0Pricing
Kubernetes Basics · 课时

Init 容器与启动顺序

学习 Init 容器如何在主应用容器启动前执行设置任务,以及它们如何在 Pod 内确保启动顺序

Init 容器与启动顺序 是 CoddyKit 上的免费 Kubernetes Basics 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Kubernetes Basics 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Kubernetes Basics 课程共包含 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 导师)并解锁 Kubernetes Basics 课程的其余内容,请升级到 CoddyKit PRO。 Kubernetes Basics 课程共包含 4 节课。

「Init 容器与启动顺序」这节课中我会学到什么?

学习 Init 容器如何在主应用容器启动前执行设置任务,以及它们如何在 Pod 内确保启动顺序 你通过在浏览器中直接运行的动手代码来练习 Kubernetes Basics,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Kubernetes Basics 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Kubernetes Basics 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「Init 容器与启动顺序」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Kubernetes Basics 课中编写并运行代码吗?

能。每节 Kubernetes Basics 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. Pod:最小单元
  2. Pod 生命周期与状态
  3. 多容器 Pod(Sidecar)
  4. Init 容器与启动顺序
← 返回 Kubernetes Basics