Init 容器与启动顺序
学习 Init 容器如何在主应用容器启动前执行设置任务,以及它们如何在 Pod 内确保启动顺序
Init 容器与启动顺序 是 CoddyKit 上的免费 DevOps Bootcamp 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 DevOps Bootcamp 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 DevOps Bootcamp 课程共包含 4 节课。
什么是初始化容器
初始化容器是一种特殊容器,会在容器组中的主应用容器启动之前运行至完成。一个容器组可以有一个或多个初始化容器。
它们非常适合执行一次性初始化任务,例如等待依赖项、克隆配置或运行数据库迁移。
它们与应用容器有何不同
初始化容器始终运行至完成,并且必须成功后,下一个初始化容器才能启动。相比之下,应用容器会持续运行。
- 初始化容器按顺序运行,一次运行一个
- 应用容器并行运行
- 如果初始化容器失败,Kubernetes 会根据 restartPolicy 重启它
基本的初始化容器规范
初始化容器位于 spec.initContainers 下,与 spec.containers 同级。
apiVersion: v1
kind: Pod
metadata:
name: app-with-init
spec:
initContainers:
- name: wait-for-db
image: busybox:1.36
command: ['sh', '-c', 'echo waiting; sleep 5']
containers:
- name: app
image: nginx:1.27顺序为何重要
Kubernetes 保证运行顺序:每个初始化容器都成功完成后,主容器才会开始运行。
这样,您可以用声明方式表达依赖关系,而不必将重试循环写入应用镜像。
等待服务
一种常见做法是阻止启动,直到依赖的服务响应。
initContainers:
- name: wait-for-api
image: busybox:1.36
command:
- sh
- -c
- 'until nslookup api-service; do echo waiting; sleep 2; done'多个初始化容器
您可以串联多个初始化容器。它们会按照列出的顺序运行,每个容器完全完成后,下一个才会开始。
initContainers:
- name: step-1-fetch-config
image: busybox:1.36
command: ['sh', '-c', 'echo fetching config']
- name: step-2-migrate
image: busybox:1.36
command: ['sh', '-c', 'echo running migration']使用 emptyDir 共享数据
初始化容器经常使用共享的 emptyDir 卷为应用容器准备文件。
volumes:
- name: shared
emptyDir: {}
initContainers:
- name: setup
image: busybox:1.36
command: ['sh', '-c', 'echo hello > /work/index.html']
volumeMounts:
- name: shared
mountPath: /work检查初始化状态
初始化容器运行期间,容器组会显示类似 Init:0/2 的状态。使用 kubectl 跟踪进度。
kubectl get pod app-with-init
kubectl logs app-with-init -c wait-for-db
kubectl describe pod app-with-init资源使用规则
由于初始化容器按顺序运行,Kubernetes 在调度时会采用它们中最高的资源请求或限制(而不是总和),然后再与应用容器的需求进行比较。
常见使用场景
- 等待数据库或外部接口可访问
- 在应用启动前运行架构迁移
- 生成或下载配置文件
- 设置挂载卷上的文件权限
- 将容器组注册到服务注册中心
失败行为
如果初始化容器失败,并且容器组的 restartPolicy 是 Always 或 OnFailure,Kubernetes 会不断重试,直到它成功为止。在此之前,主容器不会启动。
快速检查
测试您对初始化容器运行顺序的理解。
回顾
您已经了解到,初始化容器会按顺序运行至完成,然后应用容器才会启动。它们可以确保启动顺序,通过卷准备共享数据,并处理迁移或依赖项检查等一次性初始化任务。
接下来,您可以将初始化容器与边车容器结合起来,构建更丰富的容器组启动模式。
常见问题解答
「Init 容器与启动顺序」课时是免费的吗?
是的 — 「Init 容器与启动顺序」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 DevOps Bootcamp 课程的其余内容,请升级到 CoddyKit PRO。 DevOps Bootcamp 课程共包含 4 节课。
「Init 容器与启动顺序」这节课中我会学到什么?
学习 Init 容器如何在主应用容器启动前执行设置任务,以及它们如何在 Pod 内确保启动顺序 你通过在浏览器中直接运行的动手代码来练习 DevOps Bootcamp,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 DevOps Bootcamp 需要有经验吗?
无需任何先前经验。CoddyKit 上的 DevOps Bootcamp 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「Init 容器与启动顺序」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 DevOps Bootcamp 课中编写并运行代码吗?
能。每节 DevOps Bootcamp 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- Pod:最小单元
- Pod 生命周期与状态
- 多容器 Pod(Sidecar)
- Init 容器与启动顺序