Pod重启时,初始化容器未重新启动

3
我有一个初始化容器,执行一些需要主容器正确运行的操作,例如创建一些目录和一个生命探针。如果其中一个目录被删除,则生命探针可能会失败。当由于生命探针失败而重新启动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.5v1.24.0
问题是如何强制初始化容器在Pod重新启动时重新启动。
1个回答

2
重启次数指的是容器的重启次数,而不是 Pod 的重启次数。
init 容器只需要在 Pod 的生命周期中运行一次,您需要设计您的容器以满足此要求。您可以阅读这个 PR,特别是这个 comment

哦,确实你是对的。添加第二个容器到Pod中以检查第二个容器是否正在重新启动,并且它没有重新启动,这其实也解释了为什么初始化容器也没有重新启动。感谢您的回答。 - vladtf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接