Kubernetes 1.3版本引入了 Alpha 版本的新特性 init container(初始化容器,在Kubernetes 1.5时被更新为 Bate 版本)用于在启动应用容器(app container)之前启动一个或多个初始化容器,init container 与应用容器本质上是一样的,但他们是仅运行一次就结束的任务,并且必须在成功执行完后,系统才能继续执行下一个容器。
在很多应用场景中,应用在启动之前都需要进行如下初始化操作。
- 等待其他量关联组件正确运行(例如数据库或某个后台服务)
- 基于环境变量或配置模板生成配置文件
- 从远程数据库获取本地所需配置,或者将吱声注册到某个中央数据库中
- 下载相关依赖包,或者对系统进行一些预配置操作
下面以 Nginx 应用为例,在启动 Nginx 之前,通过初始化容器 busybox 为 Nginx 创建一个 index.html 主页文件。这里为 init container 和 Nginx 设置一个共享的 Volume,init.yaml 代码如下:
apiVersion: v1
kind: Pod
metadata:
name: init-demo
labels:
app: init
spec:
initContainers:
- name: init
image: busybox
command:
- wget
- "-O"
- "/init-dir/index.html"
-