我有一个初始化容器,执行一些需要主容器正确运行的操作,例如创建一些目录和一个生命探针。如果其中一个目录被删除,则生命探针可能会失败。当由于生命探针失败而重新启动Pod时,我期望初始化容器也会重新启动,但它没有重新启动。
这是kubernetes文档对此的说明:
"If the Pod restarts, or is restarted, all init containers must execute again." https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ 最简单的证明此行为的方法是使用k8s文档中的Pod示例,添加一个始终失败的生命探针,并期望初始化容器被重新启动,但实际上并没有按预期工作。
以下是我正在使用的示例:
“Sleep” 和 “date” 命令用于确认初始化容器已重启。 Pod 正在重新启动:
但从日志中可以清楚地看到,初始化容器没有:
我在两个Kubernetes服务器上都检查过了,分别是v1.19.5和v1.24.0。
问题是如何强制初始化容器在Pod重新启动时重新启动。
这是kubernetes文档对此的说明:
"If the Pod restarts, or is restarted, all init containers must execute again." https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ 最简单的证明此行为的方法是使用k8s文档中的Pod示例,添加一个始终失败的生命探针,并期望初始化容器被重新启动,但实际上并没有按预期工作。
以下是我正在使用的示例:
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
labels:
app: myapp
spec:
restartPolicy: Always
containers:
- name: myapp-container
image: busybox:1.28
command: ['sh', '-c', 'echo "App started at $(date)" && tail -f /dev/null']
livenessProbe:
exec:
command:
- sh
- -c
- exit 1
initialDelaySeconds: 1
periodSeconds: 1
initContainers:
- name: myapp-init
image: busybox:1.28
command: ['/bin/sh', '-c', 'sleep 5 && echo "Init container started at $(date)"']
“Sleep” 和 “date” 命令用于确认初始化容器已重启。 Pod 正在重新启动:
NAME READY STATUS RESTARTS AGE
pod/myapp-pod 1/1 Running 4 2m57s
但从日志中可以清楚地看到,初始化容器没有:
$ k logs pod/myapp-pod myapp-init
Init container started at Thu Jun 16 12:12:03 UTC 2022
$ k logs pod/myapp-pod myapp-container
App started at Thu Jun 16 12:14:20 UTC 2022
我在两个Kubernetes服务器上都检查过了,分别是v1.19.5和v1.24.0。
问题是如何强制初始化容器在Pod重新启动时重新启动。