其他分享
首页 > 其他分享> > |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