3.3.2. Init 容器
init 容器 是在 pod 应用程序容器启动前启动的 pod 中的容器。Init 容器可以共享卷,执行网络操作,并在剩余的容器启动前执行计算。Init 容器也可以阻止或延迟应用程序容器的启动,直到满足一些前提条件为止。
当 pod 启动时,在网络和卷初始化后,初始容器会按顺序启动。每个 init 容器都必须成功退出,然后调用下一个容器。如果 init 容器启动(因为运行时无法启动)或退出失败,则会根据 Pod 重启策略 来重试它。
直到所有 init 容器都成功前,pod 无法就绪。
有关一些 init 容器使用示例,请参阅 Kubernetes 文档。
以下示例概述了一个包含两个 init 容器的简单 pod。第一个 init 容器会等待 myservice
,第二个则等待 mydb
。两个容器都成功后,Pod 就会启动。
Init 容器 Pod 对象定义(YAML)示例
apiVersion: v1 kind: Pod metadata: name: myapp-pod labels: app: myapp spec: containers: - name: myapp-container image: busybox command: ['sh', '-c', 'echo The app is running! && sleep 3600'] initContainers: - name: init-myservice 1 image: busybox command: ['sh', '-c', 'until nslookup myservice; do echo waiting for myservice; sleep 2; done;'] - name: init-mydb 2 image: busybox command: ['sh', '-c', 'until nslookup mydb; do echo waiting for mydb; sleep 2; done;']
每个 init 容器都具有 app 容器的所有字段, 但 readinessProbe
除外。init 容器必须退出才能继续,且无法定义除完成之外的就绪度。
init 容器可以在 pod 上包含 activeDeadlineSeconds
和 livenessProbe
,以防止 init 容器永远失败。活动截止时间包括 init 容器。