探针是由kubelet对容器执行的定期诊断。要执行诊断,kubelet调用由容器实现的Handler。有三类处理程序:
- ExecAction:在容器内执行指定命令。如果命令退出时返回码为0认为诊断成功。
- TCPSocketAction:对指定的容器ip:端口号进行TCP检查。如果端口打开则诊断成功。
- HTTPGetAction:对指定的容器ip:端口号/路径执行HTTP Get请求。如果状态码大于等于200且小于400,诊断成功。
探测结果:
- 成功:
- 失败:
- 未知:诊断失败,不会采取任何行动
探测种类:
- livenessProbe:存活检测。探测失败,kubelet会杀死容器,且容器服从其重启策略。不设该字段,默认Success
- readinessProbe:就绪探测。探测失败,端点控制器将从与pod匹配的所有svc端点中删除pod的ip地址。
- startupProbe:探测容器内应用是否已启动。如果启用startupProbe,则禁用其他探测,知道它成功为止。探测失败,kubelet将杀死容器,容器服从重启策略
readinessProbe:
apiVersion: v1 kind: Pod metadata: name: readiness-httpget-pod namespace: default spec: containers: - name: readiness-httpget-container image: nginx imagePullPolicy: IfNotPresent readinessProbe: httpGet: port: 80 path: /index1.html initialDelaySecods: 1 periodSeconds: 3
startupProbe:
livenessProbe: httpGet: path: /test port: 80 failureThreshold: 1 initialDelay: 10 periodSeconds: 10 startupProbe: httpGet: path: /test port: 80 failureThreshold: 10 initialDelay: 10 periodSeconds: 10
//只有startupProbe探测成功后才会交给livenessProbe。 startupProbe配置的是10*10s,所以只要应用在100s内启动都是OK的,而应用挂掉10s就会发现问题。