当前位置:   article > 正文

Kubernetes系列-Pod探针实战_pod探测

pod探测

1. 概述

k8s通过探针机制监控Pod内部容器的程序存活状态。其探针类型有三种,分别是:

  • livenessProbe(存活探针)
  • readinessProbe(就绪探针)
  • startupProbe(启动探针)

这三种探针可以同时写入配置文件中。

三种探针拥有共同的探测机制,分别是:

  • TcpSocketAction(端口探测)
  • HttpGetActive(api探测)
  • ExecActive(命令行探测)

2. livenessProbe探针

2.1 概述

检测容器容器是否正在运行,如果存活探测失败,则kubelet会杀死容器,并且容器将受到其重启策略的影响,如果容器不提供存活探针,则默认状态为 Success,livenessProbe用于控制是否重启pod。

2.2 配置方法

2.2.1 TcpSocketAction探测方式

  1. powershell
  2. apiVersion: v1
  3. kind: Pod
  4. metadata:
  5. name: liveness-exec
  6. labels:
  7. test: liveness
  8. spec:
  9. containers:
  10. - name: nginx
  11. ports:
  12. - containerPort: 80
  13. args:
  14. - /bin/sh
  15. - -c
  16. - sleep 7;nginx -g "daemon off;" #这一步会和初始化同时开始运行,也就是在初始化5s后和7秒之间,会检测出一次失败,7秒后启动后检测正常,所以pod不会重启
  17. image: 192.168.247.100:5000/nginx #我自己的私有仓库,用的是官方的nginx镜像
  18. imagePullPolicy: IfNotPresent
  19. livenessProbe:
  20. tcpSocket:
  21. port: 80
  22. initialDelaySeconds: 5 #初始化时间5s
  23. periodSeconds: 4 #检测间隔时间4s
  24. timeoutSeconds: 1 #默认检测超时时间为1s
  25. failureThreshold: 3 #默认失败次数为3次,达到3次后重启pod
  26. successThreshold: 1

运行:

  1. kubectl create -f nginx_pod.yaml
  2. kubectl describe pod liveness-exec #可以看到探针检测到一次失败,但是之后没有再检测出来
  3. kubectl get pod -o wide 可以获得pod ip,我的为172.175.156.116。运行curl -I 172.175.156.116可以看到状态码为200,访问正常。

2.2.2 HttpGetActive探测方式

  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4. name: liveness-exec
  5. labels:
  6. test: liveness
  7. spec:
  8. containers:
  9. - name: nginx
  10. ports:
  11. - containerPort: 80
  12. args:
  13. - /bin/sh
  14. - -c
  15. - sleep 7;nginx -g "daemon off;"
  16. image: 192.168.247.100:5000/nginx
  17. imagePullPolicy: IfNotPresent
  18. livenessProbe:
  19. httpGet: #httpget
  20. port: 80 #访问的端口
  21. path: /index.html #访问的路径
  22. initialDelaySeconds: 5
  23. periodSeconds: 4
  24. timeoutSeconds: 1
  25. failureThreshold: 3
  26. successThreshold: 1

可以看到在5到7秒之间检测到连接拒绝,但在之后正常。5到7秒是设置的,目的就是看到是可以检测出来的。

2.2.3 ExecActive探测方式

  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4. name: liveness-exec
  5. labels:
  6. test: liveness
  7. spec:
  8. containers:
  9. - name: nginx
  10. ports:
  11. - containerPort: 80
  12. args:
  13. - /bin/sh
  14. - -c
  15. - sleep 7;nginx -g "daemon off;"
  16. image: 192.168.247.100:5000/nginx
  17. imagePullPolicy: IfNotPresent
  18. livenessProbe:
  19. exec: #这里
  20. command: #这里
  21. - ls #这里
  22. - /var/run/nginx.pid #查看是否有pid文件
  23. initialDelaySeconds: 5
  24. periodSeconds: 4
  25. timeoutSeconds: 1
  26. failureThreshold: 3
  27. successThreshold: 1

3. readinessProbe探针

3.1 概述

如果就绪探测失败,端点控制器将从与Pod匹配的所有Service的端点中(endpoint)删除该Pod的IP地址,初始延迟之前的就绪状态默认为Failure(失败),如果容器不提供就绪探针,则默认状态为 Success,readinessProbe用于控制pod是否添加至service。

3.2 配置方法

与livenessProbe探针基本一致,此处略。

4. startupProbe探针

4.1 概述

判断容器内的应用程序是否已启动完成,如果配置了启动探测,则会先禁用所有其它的探测,直到startupProbe检测成功为止,如果startupProbe探测失败,则kubelet将杀死容器,容器将按照重启策略进行下一步操作,如果容器没有提供启动探测,则默认状态为成功。

4.1 配置方法

主要是利用failureThreshold和periodSeconds两个参数。

  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4. name: liveness-exec
  5. labels:
  6. test: liveness
  7. spec:
  8. containers:
  9. - name: nginx
  10. ports:
  11. - containerPort: 80
  12. args:
  13. - /bin/sh
  14. - -c
  15. - sleep 30;nginx -g "daemon off;"
  16. image: 192.168.247.100:5000/nginx
  17. imagePullPolicy: IfNotPresent
  18. startupProbe:
  19. exec:
  20. command:
  21. - ls
  22. - /var/run/nginx.pid
  23. initialDelaySeconds: 5
  24. periodSeconds: 4
  25. timeoutSeconds: 1
  26. failureThreshold: 30
  27. successThreshold: 1

最大启动时间为(periodSeconds + timeoutSeconds) * failureThreshold: 30

5. 探针通用参数配置

参数名称参数描述
initialDelaySeconds: 120初始化延迟时间,告诉kubelet在执行第一次探测前应该等待多少秒,默认是0秒,最小值是0
periodSeconds: 60探测周期间隔时间,指定了kubelet应该每多少秒秒执行一次存活探测,默认是 10 秒。最小值是 1
timeoutSeconds: 5单次探测超时时间,探测的超时后等待多少秒,默认值是1秒,最小值是1。
successThreshold: 1从失败转为成功的重试次数,探测器在失败后,被视为成功的最小连续成功数,默认值是1,存活探测的这个值必须是1,最小值是 1。
failureThreshold: 3从成功转为失败的重试次数,当Pod启动了并且探测到失败,Kubernetes的重试次数,存活探测情况下的放弃就意味着重新启动容器,就绪探测情况下的放弃Pod 会被打上未就绪的标签,默认值是3,最小值是1。

6. 重启策略

Pod在遇到故障之后“重启”的动作Pod在遇到故障之后“重启”的动作。

  • Always: 当容器终止退出后,总是“重启”容器,默认策略

  • OnFailure: 当容器异常退出(退出状态码非0)时,重启容器

  • Never: 当容器终止退出,从不“重启”容器。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/247271
推荐阅读
相关标签
  

闽ICP备14008679号