namespace-探针
名称空间:就是用来隔离k8s集群的资源的,我们通常使用名称空间对企业业务进行划分;有的资源是不支持名称空间的,我们称之为全局资源,而支持名称空间的,我们称之为局部资源;我们可以通过【kubectl api-resources】查看一个资源是否支持名称空间;如果删除了名称空间,则对应的名称空间中的资源也会被删除;注:相同名称空间下的相同资源,name名称不能重复;1.查看资源是否支持名称空间。
一.namespace
名称空间:就是用来隔离k8s集群的资源的,我们通常使用名称空间对企业业务进行划分;
有的资源是不支持名称空间的,我们称之为全局资源,而支持名称空间的,我们称之为局部资源;
我们可以通过【kubectl api-resources】查看一个资源是否支持名称空间;
如果删除了名称空间,则对应的名称空间中的资源也会被删除;
注:相同名称空间下的相同资源,name名称不能重复;
1.查看资源是否支持名称空间
[root@master ~]# kubectl api-resources
2.查看系统中的名称空间
· 查看系统中的名称空间列表
[root@master ~]# kubectl get namespaces
NAME STATUS AGE
default Active 9d
kube-flannel Active 9d
kube-node-lease Active 9d
kube-public Active 9d
kube-system Active 9d
· 单独查看一个名称空间下的对应资源
[root@master ~]# kubectl get pods -o wide -n kube-flannel
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
kube-flannel-ds-54l56 1/1 Running 2 (7d4h ago) 9d 10.0.0.232 worker1 <none> <none>
kube-flannel-ds-tldbh 1/1 Running 2 (7d4h ago) 9d 10.0.0.233 worker2 <none> <none>
kube-flannel-ds-vpvgq 1/1 Running 4 (7d6h ago) 9d 10.0.0.231 master <none> <none>
3.名称空间的管理
·创建名称空间
1.响应式创建
[root@master ~]# kubectl create namespace demotest
namespace/demotest created
[root@master ~]# kubectl get namespaces
NAME STATUS AGE
default Active 9d
demotest Active 13s
kube-flannel Active 9d
kube-node-lease Active 9d
kube-public Active 9d
kube-system Active 9d
[root@master ~]#
2.声明式创建
[root@master namespace]# cat namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
name: demo01
[root@master namespace]# kubectl apply -f .
namespace/demo01 created
[root@master namespace]# kubectl get namespaces
NAME STATUS AGE
default Active 9d
demo01 Active 16s
demotest Active 2m58s
kube-flannel Active 9d
kube-node-lease Active 9d
kube-public Active 9d
kube-system Active 9d
·删除名称空间
[root@master namespace]# kubectl delete namespaces demo01
namespace "demo01" deleted
4.资源引用名称空间
·pod资源引用名称空间
1.编辑pod资源清单
[root@master namespace]# cat pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-namespace
namespace: demo01
spec:
containers:
- name: demons
image: nginx:1.20.1-alpine
2.创建并查看
[root@master namespace]# kubectl apply -f .
namespace/demo01 created
pod/pod-namespace created
[root@master namespace]# kubectl get pods -o wide
No resources found in default namespace.
[root@master namespace]# kubectl get pods -o wide -n demo01
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod-namespace 1/1 Running 0 27s 10.100.1.38 worker1 <none> <none>
·configMap资源引用名称空间
1.编辑configmap资源清单
[root@master namespace]# cat 01-cm.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: cm01
namespace: demo01
data:
demoo: "aaaaaa"
"study": "k8s"
test: |
a=a
b=b
2. 创建configmap资源
[root@master namespace]# kubectl apply -f 01-cm.yaml
configmap/cm01 created
3.查看名称空间下的cm资源
[root@master namespace]# kubectl get cm
NAME DATA AGE
kube-root-ca.crt 1 145m
[root@master namespace]# kubectl get cm -n demo01
NAME DATA AGE
cm01 3 16s
kube-root-ca.crt 1 5m32s
二.探针
概述:
探针是一种健康检查机制,用于监测Pod内容器的运行状况
1.探针的种类
·livenessProbe
健康状态检查探针:livenessProbe
当我们设置了这个探针之后,检查不通过,pod容器就会重启,周期性检查服务是否存在;
- 检查若失败,将“重启容器”,本质上就是删除原来的容器,重新创建;
- 若不设置健康检查探针,默认就是成功的,检查成功;
·readinessProbe
可用性检查探针:readinessProbe
当我们设置这个探针之后,检查不通过,pod容器不会重启,周期性检查服务是否可用,从而判断容器是否准备就绪;
- 若检查服务不可用,就是检查失败,则会将pod从service的endppints列表中移除;
- 若检查可用,则会将pod重新添加会secvice的endppints列表中;
- 若不设置这个探针,则默认是检查成功状态;
·startupProbe
启动探针:startupProbe
从k8s的1.16版本之后才新加的功能,1.16版本之前没有这个探针;
- 如果设置了这个探针,则其他所有探针都会被禁用,指导这个探针检查成功为止;
- 如果检查失败,kubelet会杀死容器,而容器依照我们的重启策略进行重启;
- 如果没有设置这个探针,默认是成功状态
2.探针使用的检查方法
·命令检查:exec
就是执行一段命令,根据返回的结果判断是否成功,返回0或者非0(类似shell中echo $?)
·http请求检查:httpGet
根据返回的状态码,判断是否正常;
·端口检查:tcpSocket
测试某个TCP端口是否能够链接,类似于telnet,nc等网络工具;
·grpc:(了解即可)
3.livenessProbe健康检查探针
·exec方式
1.当命令正确时
[root@master probe]# cat 01-probe.yaml
apiVersion: v1
kind: Pod
metadata:
name: demo-livenessprobe
spec:
containers:
- name: demoo
image: nginx:1.20.1-alpine
#声明健康检查探针livenessProbe
livenessProbe:
#使用exec方式做检查;
exec:
#自定义检查命令
command:
- cat
- /etc/hosts
#检查失败几次算【不存活】,默认值是3,最小值是1,检查成功后,值会重置重1开始数;
failureThreshold: 3
#容器启动后多久开始进行健康检查,即此时间段内,检测到服务失败并不计数;默认1,最小值1
initialDelaySeconds: 15
#探针检测频率,多久检测一次,默认10(秒),最小值1(秒)
periodSeconds: 1
#检查成功几次算【存活】,默认1,最小值1
successThreshold: 1
#一次检查超时时间,默认1(秒),最小值1(秒)
timeoutSeconds: 1
[root@master probe]# kubectl get pods
NAME READY STATUS RESTARTS AGE
demo-livenessprobe 1/1 Running 1 (2s ago) 10s
2.当命令错误时
故意写错命令测试
[root@master probe]# cat 01-probe.yaml
apiVersion: v1
kind: Pod
metadata:
name: demo-livenessprobe
spec:
containers:
- name: demoo
image: nginx:1.20.1-alpine
#声明健康检查探针livenessProbe
livenessProbe:
#使用exec方式做检查;
exec:
#自定义检查命令
command:
- catt
- /etc/hosts
#检查失败几次算【不存活】,默认值是3,最小值是1,检查成功后,值会重置重1开始数;
failureThreshold: 3
#容器启动后多久开始进行健康检查,即此时间段内,检测到服务失败并不计数;默认1,最小值1
initialDelaySeconds: 15
#探针检测频率,多久检测一次,默认10(秒),最小值1(秒)
periodSeconds: 1
#检查成功几次算【存活】,默认1,最小值1
successThreshold: 1
#一次检查超时时间,默认1(秒),最小值1(秒)
timeoutSeconds: 1
[root@master probe]# kubectl get pods
NAME READY STATUS RESTARTS AGE
demo-livenessprobe 0/1 CrashLoopBackOff 9 (3m8s ago) 14m
·httpGet检查方式
1.端口正确
检查成功一次即存活
[root@master probe]# cat 01-probe.yaml
apiVersion: v1
kind: Pod
metadata:
name: demo-livenessprobe
spec:
containers:
- name: demoo
image: nginx:1.20.1-alpine
#声明健康检查探针livenessProbe
livenessProbe:
#使用httpGet方式做检查;
httpGet:
#检查那个端口,通过哪个端口访问页面?
port: 80
#指定探测的页面路径
path: /usr/share/nginx/html/index.html
#检查失败几次算【不存活】,默认值是3,最小值是1,检查成功后,值会重置重1开始数;
failureThreshold: 3
#容器启动后多久开始进行健康检查,即此时间段内,检测到服务失败并不计数;默认1,最小值1
initialDelaySeconds: 15
#探针检测频率,多久检测一次,默认10(秒),最小值1(秒)
periodSeconds: 1
#检查成功几次算【存活】,默认1,最小值1
successThreshold: 1
#一次检查超时时间,默认1(秒),最小值1(秒)
timeoutSeconds: 1
2.端口错误
检查失败三次即不存活
[root@master probe]# cat 01-probe.yaml
apiVersion: v1
kind: Pod
metadata:
name: demo-livenessprobe
spec:
containers:
- name: demoo
image: nginx:1.20.1-alpine
#声明健康检查探针livenessProbe
livenessProbe:
#使用httpGet方式做检查;
httpGet:
#检查那个端口,通过哪个端口访问页面?
port: 88
#指定探测的页面路径
path: /usr/share/nginx/html/index.html
#检查失败几次算【不存活】,默认值是3,最小值是1,检查成功后,值会重置重1开始数;
failureThreshold: 3
#容器启动后多久开始进行健康检查,即此时间段内,检测到服务失败并不计数;默认1,最小值1
initialDelaySeconds: 15
#探针检测频率,多久检测一次,默认10(秒),最小值1(秒)
periodSeconds: 1
#检查成功几次算【存活】,默认1,最小值1
successThreshold: 1
#一次检查超时时间,默认1(秒),最小值1(秒)
timeoutSeconds: 1
[root@master probe]# kubectl get pods
NAME READY STATUS RESTARTS AGE
demo-livenessprobe 1/1 Running 3 (18s ago) 70s
[root@master probe]# kubectl get pods
NAME READY STATUS RESTARTS AGE
demo-livenessprobe 0/1 CrashLoopBackOff 3 (4s ago) 73s
·tcpSocket检测方式
端口正确
检查成功一次即存活
[root@master probe]# cat 01-probe.yaml
apiVersion: v1
kind: Pod
metadata:
name: demo-livenessprobe
spec:
containers:
- name: demoo
image: nginx:1.20.1-alpine
#声明健康检查探针livenessProbe
livenessProbe:
#使用tcpSocket方式做检查;
tcpSocket:
#检查哪一个端口
port: 80
#检查失败几次算【不存活】,默认值是3,最小值是1,检查成功后,值会重置重1开始数;
failureThreshold: 3
#容器启动后多久开始进行健康检查,即此时间段内,检测到服务失败并不计数;默认1,最小值1
initialDelaySeconds: 15
#探针检测频率,多久检测一次,默认10(秒),最小值1(秒)
periodSeconds: 1
#检查成功几次算【存活】,默认1,最小值1
successThreshold: 1
#一次检查超时时间,默认1(秒),最小值1(秒)
timeoutSeconds: 1
[root@master probe]# kubectl get pods
NAME READY STATUS RESTARTS AGE
demo-livenessprobe 1/1 Running 0 52s
4.readinessProbe可用性检查
[root@master probe]# cat 01-probe.yaml
apiVersion: v1
kind: Pod
metadata:
name: demo-livenessprobe
spec:
containers:
- name: demoo
image: nginx:1.20.1-alpine
#声明健康检查探针readinessProbe
readinessProbe:
#使用tcpSocket方式做检查;
tcpSocket:
#检查哪一个端口
port: 80
#检查失败几次算【不存活】,默认值是3,最小值是1,检查成功后,值会重置重1开始数;
failureThreshold: 3
#容器启动后多久开始进行健康检查,即此时间段内,检测到服务失败并不计数;默认1,最小值1
initialDelaySeconds: 15
#探针检测频率,多久检测一次,默认10(秒),最小值1(秒)
periodSeconds: 1
#检查成功几次算【存活】,默认1,最小值1
successThreshold: 1
#一次检查超时时间,默认1(秒),最小值1(秒)
timeoutSeconds: 1
5.startupProbe启动检查
[root@master probe]# cat 01-probe.yaml
apiVersion: v1
kind: Pod
metadata:
name: demo-livenessprobe
spec:
containers:
- name: demoo
image: nginx:1.20.1-alpine
#声明启动探针startupProbe
startupProbe:
#使用tcpSocket方式做检查;
tcpSocket:
#检查哪一个端口
port: 80
#检查失败几次算【不存活】,默认值是3,最小值是1,检查成功后,值会重置重1开始数;
failureThreshold: 3
#容器启动后多久开始进行健康检查,即此时间段内,检测到服务失败并不计数;默认1,最小值1
initialDelaySeconds: 15
#探针检测频率,多久检测一次,默认10(秒),最小值1(秒)
periodSeconds: 1
#检查成功几次算【存活】,默认1,最小值1
successThreshold: 1
#一次检查超时时间,默认1(秒),最小值1(秒)
timeoutSeconds: 1
6.三个探针一起使用
[root@master probe]# cat 01-probe.yaml
apiVersion: v1
kind: Pod
metadata:
name: demo-livenessprobe
spec:
containers:
- name: demoo
image: nginx:1.20.1-alpine
#声明启动探针startupProbe
startupProbe:
tcpSocket:
port: 80
failureThreshold: 3
initialDelaySeconds: 15
periodSeconds: 1
successThreshold: 1
timeoutSeconds: 1
#声明启动探针livenessProbe
livenessProbe:
tcpSocket:
port: 80
failureThreshold: 3
initialDelaySeconds: 15
periodSeconds: 1
successThreshold: 1
timeoutSeconds: 1
#声明启动探针readinessProbe
readinessProbe:
tcpSocket:
port: 80
failureThreshold: 3
initialDelaySeconds: 15
periodSeconds: 1
successThreshold: 1
timeoutSeconds: 1
更多推荐
所有评论(0)