Pod 只有在其所有容器都准备好时才准备好。
当一个 Pod 准备就绪时,应该将它添加到所有匹配的服务的负载平衡池中,因为这意味着这个 Pod 能够为请求提供服务。
正如您在Readiness Probe documentation 中看到的:
kubelet 使用就绪探测来了解容器何时准备好开始接受流量。
使用readiness probe 可以确保流量不会到达尚未准备好的容器。
使用liveness probe 可以确保容器在失败时重启(kubelet 只会杀死并重启特定的容器)。
另外,为了回答你的最后一个问题,我将使用一个例子:
如果重启了 3 个容器中的 1 个,则意味着整个 pod 都重启了。这是正确的吗?
让我们为一个总是失败的容器创建一个简单的 Pod 清单文件和 livenessProbe:
---
# web-app.yml
apiVersion: v1
kind: Pod
metadata:
labels:
run: web-app
name: web-app
spec:
containers:
- image: nginx
name: web
- image: redis
name: failed-container
livenessProbe:
httpGet:
path: /healthz # I don't have this endpoint configured so it will always be failed.
port: 8080
创建web-app Pod 并等待一段时间后,我们可以检查livenessProbe 的工作原理:
$ kubectl describe pod web-app
Name: web-app
Namespace: default
Containers:
web:
...
State: Running
Started: Tue, 09 Mar 2021 09:56:59 +0000
Ready: True
Restart Count: 0
...
failed-container:
...
State: Waiting
Reason: CrashLoopBackOff
Last State: Terminated
Reason: Completed
Exit Code: 0
Ready: False
Restart Count: 7
...
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
...
Normal Killing 9m40s (x2 over 10m) kubelet Container failed-container failed liveness probe, will be restarted
...
如您所见,只有 failed-container 容器被重新启动 (Restart Count: 7)。
更多信息可以在Liveness, Readiness and Startup Probes documentation找到。