首页 > 其他分享> > |NO.Z.00127|——————————|CloudNative|——|KuberNetes&基础标签.V10|------------------------------------------
|NO.Z.00127|——————————|CloudNative|——|KuberNetes&基础标签.V10|------------------------------------------
作者:互联网
[CloudNative:KuberNetes&基础标签.V10] [Applications.KuberNetes][|DevOps|k8s基础|零宕机Pod三种探针|StartuProbe|Liveness和Readiness|Pod退出流程|PreStop的使用|]
一、判断pod和进程是否存活
### --- 判断pod和进程存活的参数
~~~ readinessProbe:判定容器是不是存活的
~~~ livenessProbe:判定容器里进程是否是存活的
二、判断容器和进程是否存活readinessProbe.livenessProbe;创建资源### --- 创建资源yaml配置文件
~~~ 在执行nginx的时候,可能这个容器里面没有执行的命令
[root@k8s-master01 ~]# vim pod.yaml //判定nginx的时候只要80端口起来的就说明是正常的
#startupProbe: # 可选,检测容器内进程是否完成启动。注意三种检查方式同时只能使用一种。
# httpGet: # httpGet检测方式,生产环境建议使用httpGet实现接口级健康检查,健康检查由应用程序提供。
# path: /api/successStart # 检查路径
# port: 80
# tcpSocket:
# port: 80
readinessProbe: # 可选,健康检查。注意三种检查方式同时只能使用一种。
httpGet: # httpGet检测方式,生产环境建议使用httpGet实现接口级健康检查,健康检查由应用程序提供。
path: / # 检查路径
port: 80 # 监控端口
livenessProbe: # 可选,健康检查
exec: # 执行容器命令检测方式
command:
- pgrep
- nginx
### --- 创建pod
[root@k8s-master01 ~]# kubectl create -f pod.yaml
pod/nginx created
### --- 查看创建的资源
[root@k8s-master01 ~]# kubectl get po
NAME READY STATUS RESTARTS AGE
nginx 1/1 Running 0 11s
### --- 查看资源创建过程
~~~ 提示没有这个命令
[root@k8s-master01 ~]# kubectl describe po
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 85s default-scheduler Successfully assigned default/nginx to k8s-master01
Normal Killing 30s (x2 over 60s) kubelet Container nginx failed liveness probe, will be restarted
Normal Pulled 29s (x3 over 84s) kubelet Container image "nginx:1.15.2" already present on machine
Normal Created 29s (x3 over 84s) kubelet Created container nginx
Normal Started 29s (x3 over 83s) kubelet Started container nginx
Warning Unhealthy 29s (x2 over 59s) kubelet Readiness probe failed: Get "http://172.25.244.198:80/": dial tcp 172.25.244.198:80: connect: connection refused
Warning Unhealthy 10s (x8 over 79s) kubelet Liveness probe failed: OCI runtime exec failed: exec failed: container_linux.go:367: starting container process caused: exec: "pgrep": executable file not found in $PATH: unknown
三、资源创建失败修改配置参数### --- 删除资源,更新配置参数
~~~ 更改内部执行命令为ls,查看命令可执行后状态
[root@k8s-master01 ~]# kubectl delete -f pod.yaml
pod "nginx" deleted
### --- 修改配置参数
[root@k8s-master01 ~]# vim pod.yaml
readinessProbe: # 可选,健康检查。注意三种检查方式同时只能使用一种。
httpGet: # httpGet检测方式,生产环境建议使用httpGet实现接口级健康检查,健康检查由应用程序提供。
path: / # 检查路径
port: 80 # 监控端口
livenessProbe: # 可选,健康检查
exec: # 执行容器命令检测方式
command:
- ls
### --- 重新创建资源
[root@k8s-master01 ~]# kubectl create -f pod.yaml
pod/nginx created
### --- 查看创建的资源
[root@k8s-master01 ~]# kubectl get po
NAME READY STATUS RESTARTS AGE
nginx 1/1 Running 0 13s
### --- 查看资源创建过程
[root@k8s-master01 ~]# kubectl describe po nginx
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 79s default-scheduler Successfully assigned default/nginx to k8s-master01
Normal Pulled 76s kubelet Container image "nginx:1.15.2" already present on machine
Normal Created 76s kubelet Created container nginx
Normal Started 75s kubelet Started container nginx
四、把资源进程停止查看状态### --- 把它的进程给停掉看一下是什么状态
[root@k8s-master01 ~]# kubectl exec -ti nginx -- bash
root@nginx:/usr/share/nginx/html# ls
50x.html index.html
root@nginx:/usr/share/nginx/html# nginx -s stop
2021/04/16 16:00:54 [notice] 109#109: signal process started
root@nginx:/usr/share/nginx/html# command terminated with exit code 137
### --- 查看pod状态
~~~ 推荐健康检查配置:接口级的健康检查;
~~~ 就是LivenessProbe和readinessProbe都以接口的形式去检查容器状态。
[root@k8s-master01 ~]# kubectl get po
NAME READY STATUS RESTARTS AGE
nginx 1/1 Running 1 3m44s
五、健康检查配置参数以coredns配置作为参考### --- 以coredns的配置作为参考
~~~ readinessProbe配置了一个ready的接口。
~~~ 告诉kubelet我这个容器是运行的,不要给我重启;会有一个初始化时间,不要给重启。
~~~ 这个readinessProbe状态显示是true的话,说明是可以接受流量的,
[root@k8s-master01 ~]# kubectl edit deploy coredns -n kube-system
livenessProbe:
failureThreshold: 5
httpGet:
path: /health
port: 8080
scheme: HTTP
initialDelaySeconds: 60
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 5
# LivenessProbe配置了一个health的接口
readinessProbe:
failureThreshold: 3
httpGet:
path: /ready
port: 8181
scheme: HTTP
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 1
### --- endpoint会把可用的进程给加入进来。
[root@k8s-master01 ~]# kubectl get ep
NAME ENDPOINTS AGE
kubernetes 192.168.1.11:6443,192.168.1.12:6443,192.168.1.13:6443 6d20h
六、配置说明### --- 配置说明
~~~ 刚才的健康检查只能说明是容器在启动的过程中它的状态,
~~~ 并不能说明它在发布应用的时候是0-1的状态,就是在启动之前,
~~~ 比如说nginx的进程时没有重启完的,可能会被强杀掉,
~~~ 所以说我们配置了一个在启动之前的逻辑的检查,在退出的时候也需要判断逻辑的判断和逻辑的检查。
===============================END===============================
Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart ——W.S.Landor
来自为知笔记(Wiz)
标签:Readiness,KuberNetes,master01,---,nginx,pod,k8s,root,### 来源: https://www.cnblogs.com/yanqivip/p/16076301.html