Kubernetes Init Container
在很多场景中,应用在启动之前都需要进行如下初始化操作。
- 等待其他关联组件正确运行(例如数据库或某个后台服务)。
- 基于环境变量或配置模板生成配置文件。
- 从远程数据库获取本地所需配置,或者自身注册到某个中央数据中。
- 下载某个依赖包,或者对系统进行一些预配置操作。
Kubernetes v1.3 引入了一个 Alpha 版本的新特新 init container(在 Kubernetes v1.5 时被更新为 Beta 版本),用于在启动应用容器(app container)之前启动一个或多个 “初始化” 容器,完成应用容器所需的预置条件。Init container 与应用容器本质上一样的,但它们是仅运行一次就结束的任务,而且必须在成功执行完成之后,系统才会继续执行下一个容器。根据 Pod 的重启策略(RestartPolicy),当 init container 执行失败,在设置了 RestartPolicy=Never 时,Pod 将会启动失败;而设置 RestartPolicy=Always 时,Pod 将会被启动自动重启。
v1.8 版本之后,Init Container 特性完全成熟,其定义被放入了 Pod 的 spec.initContainers。
下面以 Nginx 应用为例,在启动 Nginx 之前,通过初始化容器 busybox 为 Nginx 创建一个 index.html 主页文件。这里为 init container 和 Nginx 设置了一个共享的 volumeÿ