赞
踩
k8s通过探针机制监控Pod内部容器的程序存活状态。其探针类型有三种,分别是:
这三种探针可以同时写入配置文件中。
三种探针拥有共同的探测机制,分别是:
检测容器容器是否正在运行,如果存活探测失败,则kubelet会杀死容器,并且容器将受到其重启策略的影响,如果容器不提供存活探针,则默认状态为 Success,livenessProbe用于控制是否重启pod。
- powershell
- apiVersion: v1
- kind: Pod
- metadata:
- name: liveness-exec
- labels:
- test: liveness
- spec:
- containers:
- - name: nginx
- ports:
- - containerPort: 80
- args:
- - /bin/sh
- - -c
- - sleep 7;nginx -g "daemon off;" #这一步会和初始化同时开始运行,也就是在初始化5s后和7秒之间,会检测出一次失败,7秒后启动后检测正常,所以pod不会重启
- image: 192.168.247.100:5000/nginx #我自己的私有仓库,用的是官方的nginx镜像
- imagePullPolicy: IfNotPresent
- livenessProbe:
- tcpSocket:
- port: 80
- initialDelaySeconds: 5 #初始化时间5s
- periodSeconds: 4 #检测间隔时间4s
- timeoutSeconds: 1 #默认检测超时时间为1s
- failureThreshold: 3 #默认失败次数为3次,达到3次后重启pod
- successThreshold: 1
运行:
- kubectl create -f nginx_pod.yaml
- kubectl describe pod liveness-exec #可以看到探针检测到一次失败,但是之后没有再检测出来
- kubectl get pod -o wide 可以获得pod ip,我的为172.175.156.116。运行curl -I 172.175.156.116可以看到状态码为200,访问正常。
- apiVersion: v1
- kind: Pod
- metadata:
- name: liveness-exec
- labels:
- test: liveness
- spec:
- containers:
- - name: nginx
- ports:
- - containerPort: 80
- args:
- - /bin/sh
- - -c
- - sleep 7;nginx -g "daemon off;"
- image: 192.168.247.100:5000/nginx
- imagePullPolicy: IfNotPresent
- livenessProbe:
- httpGet: #httpget
- port: 80 #访问的端口
- path: /index.html #访问的路径
- initialDelaySeconds: 5
- periodSeconds: 4
- timeoutSeconds: 1
- failureThreshold: 3
- successThreshold: 1
可以看到在5到7秒之间检测到连接拒绝,但在之后正常。5到7秒是设置的,目的就是看到是可以检测出来的。
- apiVersion: v1
- kind: Pod
- metadata:
- name: liveness-exec
- labels:
- test: liveness
- spec:
- containers:
- - name: nginx
- ports:
- - containerPort: 80
- args:
- - /bin/sh
- - -c
- - sleep 7;nginx -g "daemon off;"
- image: 192.168.247.100:5000/nginx
- imagePullPolicy: IfNotPresent
- livenessProbe:
- exec: #这里
- command: #这里
- - ls #这里
- - /var/run/nginx.pid #查看是否有pid文件
- initialDelaySeconds: 5
- periodSeconds: 4
- timeoutSeconds: 1
- failureThreshold: 3
- successThreshold: 1
如果就绪探测失败,端点控制器将从与Pod匹配的所有Service的端点中(endpoint)删除该Pod的IP地址,初始延迟之前的就绪状态默认为Failure(失败),如果容器不提供就绪探针,则默认状态为 Success,readinessProbe用于控制pod是否添加至service。
与livenessProbe探针基本一致,此处略。
判断容器内的应用程序是否已启动完成,如果配置了启动探测,则会先禁用所有其它的探测,直到startupProbe检测成功为止,如果startupProbe探测失败,则kubelet将杀死容器,容器将按照重启策略进行下一步操作,如果容器没有提供启动探测,则默认状态为成功。
主要是利用failureThreshold和periodSeconds两个参数。
- apiVersion: v1
- kind: Pod
- metadata:
- name: liveness-exec
- labels:
- test: liveness
- spec:
- containers:
- - name: nginx
- ports:
- - containerPort: 80
- args:
- - /bin/sh
- - -c
- - sleep 30;nginx -g "daemon off;"
- image: 192.168.247.100:5000/nginx
- imagePullPolicy: IfNotPresent
- startupProbe:
- exec:
- command:
- - ls
- - /var/run/nginx.pid
- initialDelaySeconds: 5
- periodSeconds: 4
- timeoutSeconds: 1
- failureThreshold: 30
- successThreshold: 1
最大启动时间为(periodSeconds + timeoutSeconds) * failureThreshold: 30
参数名称 | 参数描述 |
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。 |
Pod在遇到故障之后“重启”的动作Pod在遇到故障之后“重启”的动作。
Always: 当容器终止退出后,总是“重启”容器,默认策略
OnFailure: 当容器异常退出(退出状态码非0)时,重启容器
Never: 当容器终止退出,从不“重启”容器。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。