简介
Init 容器是一种特殊容器,在Pod内的应用容器启动之前运行。Init容器可以包括一些应用镜像中不存在的实用工具和安装脚本。
Init容器启动流程
如图可以看到Pod中的Init容器启动流程

Init容器一个接一个地运行,并且必须在pod的主容器启动之前全部成功完成。
Init容器使用场景
- 初始化 pod 主容器使用的卷中的文件。包括从安全证书存储中检索主容器使用的证书和私钥、生成配置文件、下载数据等
- 初始化 pod 的网络系统。因为 pod 的所有容器共享相同的网络命名空间,因此网络接口和配置,init 容器对其所做的任何更改也会影响主容器
- 延迟 Pod 的主容器的启动,直到满足前提条件。例如,如果主容器在容器启动之前依赖于另一个可用的服务,则 init 容器可以阻塞,直到该服务准备就绪
- 通知外部服务 pod 即将开始运行。在启动应用程序的新实例时必须通知外部系统的特殊情况下,可以使用 init 容器来传递此通知
使用Init容器
在 pod 清单中,init 容器定义非常简单,initContainers在 spec 部分的字段中定义,就像在其containers字段中定义常规容器一样
- demo
apiVersion: v1
kind: Pod
metadata:
name: kubia-init
spec:
initContainers:
- name: init-demo
image: luksa/init-demo:1.0
- name: network-check
image: luksa/network-connectivity-checker:1.0
containers:
- name: kubia
image: luksa/kubia:1.0
ports:
- name: http
containerPort: 8080
- name: envoy
image: luksa/kubia-ssl-proxy:1.0
ports:
- name: https
containerPort: 8443
- name: admin
containerPort: 9901
网友评论