首页 > 其他分享> > |NO.Z.00126|——————————|CloudNative|——|KuberNetes&基础标签.V09|------------------------------------------
|NO.Z.00126|——————————|CloudNative|——|KuberNetes&基础标签.V09|------------------------------------------
作者:互联网
[CloudNative:KuberNetes&基础标签.V09] [Applications.KuberNetes][|DevOps|k8s基础|零宕机Pod三种探针|StartuProbe|Liveness和Readiness|Pod退出流程|PreStop的使用|]
一、为什么要引入startupProbe
### --- 为什么要引入startupProbe?
~~~ # 这个容器启动特别慢,启动之后会进行一系列的初始化操作,比如加载数据,同步操作。
~~~ 载入各种数据等,这个过程会非常慢,
~~~ 但是你把检测的过程放在LivenessProbe里面,
~~~ 会造成容器起来之后需要很长的时间才会把容器设置为lived状态,才能告诉kubelet不去杀它
~~~ 但是,如果说这个容器出现问题的话,重启容器的时间间隔会变的特别长。
~~~ # 所以k8s把这个单独列出来,配置一个startupProbe,
~~~ 配置完之后就会把readinessProbe和LivenessProbe先禁用掉,
~~~ 知道这个程序启动完成了,再去检测它的rediness和liveness,再去判断它的程序是否可以正常可用。
~~~ # startupProbe只要是执行成功了,就不会再次执行了,
~~~ 所以说我们这个程序检测出来的状态是正常的话,就退出了,然后就不再执行了。
~~~ startupProbe是在1.16版本之后才有的,之前是没有的。
startupProbe: # 可选,检测容器内进程是否完成启动。注意三种检查方式同时只能使用一种。
httpGet: # httpGet检测方式,生产环境建议使用httpGet实现接口级健康检查,健康检查由应用程序提供。
path: /api/successStart # 检查路径
port: 80
一、startupprobe参数配置:创建一个pod
### --- 创建一个pod
~~~ 查看pod.yaml配置参数
[root@k8s-master01 ~]# vim pod.yaml //使用上面的模板,打开starupProbe的参数配置
startupProbe: # 可选,检测容器内进程是否完成启动。注意三种检查方式同时只能使用一种。
httpGet: # httpGet检测方式,生产环境建议使用httpGet实现接口级健康检查,健康检查由应用程序提供。
path: /api/successStart # 检查路径
port: 80
### --- 创建pod
[root@k8s-master01 ~]# kubectl create -f pod.yaml
pod/nginx created
### --- 查看创建的pod
[root@k8s-master01 ~]# kubectl get po
NAME READY STATUS RESTARTS AGE
nginx 0/1 ContainerCreating 0 5s
二、查看pod的yaml配置参数startupProbe### --- 查看pod的yaml配置参数startupProbe
~~~ 之前是没有这个配置参数的,没有是默认会配置一个
~~~ 理论上是起不来的,因为没有这个接口
[root@k8s-master01 ~]# kubectl get po -oyaml
startupProbe:
failureThreshold: 3
httpGet:
path: /api/successStart
port: 80
scheme: HTTP
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 1
三、查看startup配置参数没有配置失败### --- 查看这个服务状态
~~~ 可以看到startup的检测结果为404
~~~ 为404它就会重启这个容器
~~~ 查看容器检测失败多少次
[root@k8s-master01 ~]# kubectl describe po nginx
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 6m9s default-scheduler Successfully assigned default/nginx to k8s-master01
Normal Pulled 31s (x4 over 4m56s) kubelet Container image "nginx:1.15.2" already present on machine
Normal Created 31s (x4 over 4m55s) kubelet Created container nginx
Normal Started 31s (x4 over 4m49s) kubelet Started container nginx
Normal Killing 31s (x3 over 3m24s) kubelet Container nginx failed startup probe, will be restarted
Warning Unhealthy 27s (x10 over 4m47s) kubelet Startup probe failed: HTTP probe failed with statuscode: 404
### --- 查看podyaml配置参数设置的检测失败次数及时间配置
[root@k8s-master01 ~]# kubectl get po -oyaml
startupProbe:
failureThreshold: 3 //失败是3次
httpGet:
path: /api/successStart
port: 80
scheme: HTTP
periodSeconds: 10 //检查间隔是10s,也就是说30秒之后它就会重启
successThreshold: 1
timeoutSeconds: 1
### --- 健康检查没有过查看pod状态
[root@k8s-master01 ~]# kubectl get po
NAME READY STATUS RESTARTS AGE
nginx 0/1 running 1 9m49s //查看到它的RESTARTS是1,因为它的健康检查没有过
[root@k8s-master01 ~]# kubectl delete -f pod.yaml
pod "nginx" deleted
四、修改健康检查配置参数### --- 修改策略httpdget的为tcpsocket的策略
[root@k8s-master01 ~]# vim pod.yaml
startupProbe: # 可选,检测容器内进程是否完成启动。注意三种检查方式同时只能使用一种。
# httpGet: # httpGet检测方式,生产环境建议使用httpGet实现接口级健康检查,健康检查由应用程序提供。
# path: /api/successStart # 检查路径
# port: 80
tcpSocket:
port: 80
### --- 重新触发pod
[root@k8s-master01 ~]# kubectl create -f pod.yaml
pod/nginx created
### --- 查看pod状态
[root@k8s-master01 ~]# kubectl get po
NAME READY STATUS RESTARTS AGE
nginx 1/1 Running 0 14s
五、修改策略后查看pod是否启动### --- 检查一下它的端口,查看80端口是否是正常的
[root@k8s-master01 ~]# kubectl get po -oyaml
startupProbe:
failureThreshold: 3
periodSeconds: 10
successThreshold: 1 //成功1次,默认是给我们加个30s的等待时间,
tcpSocket:
port: 80
timeoutSeconds: 1
### --- 查看pod启动过程
[root@k8s-master01 ~]# kubectl describe po
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 4m25s default-scheduler Successfully assigned default/nginx to k8s-master01
Normal Pulled 4m18s kubelet Container image "nginx:1.15.2" already present on machine
Normal Created 4m18s kubelet Created container nginx
Normal Started 4m18s kubelet Started container nginx
六、查看容器端口是否正常;是否正常解析配置### --- 进入容器中
~~~ exec是在容器中执行一个命令,ti是打开一个控制台。
[root@k8s-master01 ~]# kubectl exec -ti nginx -- sh
### --- 查看容器的IP地址
[root@k8s-master01 ~]# kubectl get po -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx 1/1 Running 0 6m26s 172.25.244.197 k8s-master01 <none> <none>
### --- 通过IP地址就可以访问到nginx进程里面的页面
~~~ 说明这个容器变为可用状态
~~~ 所以说你的容器特别慢的话,
~~~ 不建议把你的健康检查配置在readinessProbe和LivenessProbe中,而是配置在startupProbe中。
~~~ 只检测一次,成功就不会再去检查了。
[root@k8s-master01 ~]# curl 172.25.244.197
#<h1>Welcome to nginx!</h1>
### --- 删除创建的资源
[root@k8s-master01 ~]# kubectl delete -f pod.yaml
pod "nginx" deleted
===============================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)
标签:startupProbe,KuberNetes,NO,master01,nginx,pod,k8s,root,### 来源: https://www.cnblogs.com/yanqivip/p/16076297.html