Kubernetes 中的初始容器是在 Pod 中的主应用程序容器之前运行的特殊容器。它们用于在主应用容器启动前必须完成的设置任务。


让我们来看一个示例,在这个示例中,初始容器用于确保数据库在应用容器启动前准备就绪。在主容器尝试连接之前,初始容器将检查数据库是否可用。

【代码清单】

apiVersion: v1
kind: Pod
metadata:
 name: init-container-example
spec:
 initContainers:
 - name: init-db-check
  image: busybox
  command: ['sh', '-c', 'until nslookup my-database; do echo waiting for database; sleep 2; done;']
 containers:
 - name: app-container
  image: my-app-image
  ports:
  - containerPort: 80

【执行结果】

If the database is not ready, the init container outputs:waiting for database
waiting for database
...
Once the database becomes available, the init container exits successfully, allowing the main application container to start.

初始容器非常适合处理主应用程序启动前必须完成的任务。这些任务可能包括等待服务就绪、设置环境配置或运行脚本以提供必要的数据。如果初始容器失败,Pod 将不会继续启动主容器,这有助于确保在应用程序运行前满足必要的先决条件。每个初始容器按顺序运行,在下一个容器启动前完成其任务。一旦所有初始容器都成功执行,Kubernetes 就会启动 Pod 中的主应用程序容器。初始化容器还使用单独的 Docker 映像,这些映像可以与主应用容器不同,从而可以灵活使用初始化任务所需的工具和环境。

【小知识】

初始容器可以访问与普通容器相同的卷,这对设置主应用程序所需的文件或配置数据非常有用。如果初始容器因错误而无法启动,Kubernetes 会根据 Pod 的重启策略重新启动它,直到成功或删除 Pod。