Pod 的生命周期一共有下面这 5 个状态。
- Pending:正在创建 Pod,例如调度 Pod 和拉取镜像的阶段。
- Running:运行阶段,至少有一个容器正在启动或运行。
- Succeeded:运行成功,并且不会重新启动,例如 Job 创建的 Pod。
- Failed:Pod 的所有容器都停止了,并且至少有一个容器退出状态码非 0。
- Unknown:无法获取 Pod 的状态。
Pod 中的容器,也有下面 3 种状态
- Waiting:容器等待中,例如正在拉取镜像。
- Running:容器运行中,PID=1 的业务进程正在启动或运行。
- Terminated:容器终止中,例如正在删除 Pod。
kubernetes 探针一共有三种方式来向 Pod 发起健康检查。
- HTTP 请求,通过向容器发起 HTTP 请求,并识别请求响应代码来判断业务状态。
- 在容器内运行命令,通过在容器里运行一条命令并检查命令的退出状态码来判断业务健康状态。
- TCP 端口状态判断,通过是否能够和指定端口建立连接来判断业务健康状态。
三种 kubernetes 探针(Readiness、Liveness、StartupProbe)
-
Readiness
它用来确定 Pod 是否为就绪(Ready)状态,以及是否能够接收外部流量
apiVersion: apps/v1 kind: Deployment metadata: name: backend ...... spec: ...... spec: containers: - name: flask-backend image: lyzhang1999/backend:latest ...... readinessProbe: #探针 httpGet: path: /healthy port: 5000 scheme: HTTP initialDelaySeconds: 10 failureThreshold: 5 periodSeconds: 10 successThreshold: 1 timeoutSeconds: 1
-
Liveness 又称为存活探针,相比 Readiness 探针,它还能够在检测到 Pod 处于不健康状态时自动将 Pod 重启。
spec:
......
spec:
containers:
- name: flask-backend
image: lyzhang1999/backend:latest
......
livenessProbe:
httpGet:
path: /healthy
port: 5000
scheme: HTTP
failureThreshold: 5
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 1- StartupProbe 是一种专门针对业务在启动阶段设计的探针。
spec:
......
spec:
containers:
- name: flask-backend
image: lyzhang1999/backend:latest
......
startupProbe:
httpGet:
path: /healthy
port: 5000
scheme: HTTP
initialDelaySeconds: 10
failureThreshold: 5
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 1