Liveness Probe
如何确保当 Pod 中运行的应用程序进入失败状态时, Kubernetes 会自动重启 Pod?
可以使用存活探针。如果探针失败,那么 kubelet 会自动重启 pod。探针是 Pod.spec 的一部分,可以添加到 containers 字段中。pod 中的每个容器都可以拥有一个存活探针。
探针可以有三种类型:
1)它可以是容器内部运行的命令;
2)也可以是一个 HTTP 请求,指向容器内由网络服务提供的特定路径;
3)或者是更通用的 TCP 探针。
HTTP Probe
下面的例子展示了一个基本的 HTTP 探针:
apiversion: v1 kind: Pod metadata name: liveness-nginx spec: - containers name: veness image: nginx livenessProbe: httpGet: path: / port: 80
Kubernetes 容器探针的相关文档 https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#container-probes
Readiness Probe
虽然 LivenessProbe 能够指示 Pod 启动和运行的状态,但是如何确保在应用程序准备好服务请求之后再接受访问?
可以向 pod 规格添加就绪探针。与存活探针类似,就绪探针也有三种类型(具体信息请参阅相关文档)。
下面是一个简单的例子,其中就绪探针在 nginx Dockerl 映像的单个 pod 上运行。就绪探针向端口 80 发送了一个 HTTP 的请求:
apiversion: v1 kind: Pod metadata: name: readiness-nginx spec: containers: - name: readiness image: nginx readinessProbe: httpGet: path: / port: 80
虽然上面介绍的就绪探针与 1.2 节中所介绍的存活探针相同,但一般情况下两者是不一样的,因为它们旨在提供应用程序不同方面的信息。存活探针负责查看应用程序进程是否处于活动状态,但是应用程序可能并没有准备好接收请求。而就绪探针负责检査应用程序是否可以正确服务请求。因此、只有当通过就绪探针的检査,podオ能成为服务(请参阅 5.1 节)的一部分。
请参阅 Kubernetes 容器探针的相关文档(https://kubernetes.io/docs/conceptsworkloads/pods/pod-lifecycle/#container-probes)
Adding Liveness and Readiness Probes to Your Deployments
如何自动检查应用是否健康,且在不健康的时候让 Kubernetes 做相应的处理?
为了通知 Kubernetes 应用的状况,可以添加存活探针和就绪探针,如下所示。首先定义一个部署清单文件:
# foo.yaml apiVersion: extensions/v1beta1 kind: Deployment metadata name: webserver spec: replicas: 1 template: metadata: name: webserver spec: containers: - name: nginx image: nginx:stable containerPort: 80 # 在 pod 规格中的 containers 一节中定义存活探针和就绪探针。请参阅上述介的例子(请参阅 112 节和 11.3 节),并向部署 pod 模板的容器规格中添加如下内容: livenessProbe: initialDelaySecond: 2 periodSeconds: 10 httpGet readinessProbe: initialDelaySecond: 2 periodSeconds: 10 httpGet: path: 2 port: 80
现在启动部署并检査探针:
# kubectl get pods
# kubectl describe pod/webserver-4288715076-dk9c7
为了确认 pod 内的容器是否健康、是否可以接受访问,Kubernetes 提供了系列的健康检査机制。在 Kubernetes 里,健康检査称为探针,定义在「容器」一级,而非 pod 一级,它由两个不同的组成部分:
至于何时该选用哪种探针,应当根据容器的行为进行选择:
请注意后者的情况下,就绪探针也起到了存活探针的作用。
配置存活探针与就绪探针(https://kubernetes.io/docs/asks/configure-podcontainer/configure-liveness-readiness-probes)
Pod 生命周期的相关文档(https://kubernetes.io/docs/concepts/workloadspods/pod-lifecycle)
初始化容器的相关文档(在 v1.6 及之后的版本中相对稳定)(https://kubernetes.io/docs/concepts/workloads/pods/init-containers/)