Init 容器是一种特殊的容器,允许在 Pod 内的应用容器启动之前运行。Init 容器可以包含一些安装过程中应用容器中不存在的实用工具或安装脚本。本文介绍 Init 容器的基本使用方法。
Init 容器可以在多种 Kubernetes 工作负载里使用,例如:Deployment、DaemonSet、Job 等,常用于在主容器启动前,进行的初始化工作。
Init 容器与普通容器属性和行为非常相似,除了如下两点:
如果 Pod 的 Init 容器启动失败,kubelet 会不断地重启该 Init 容器直到该容器成功为止。 然而,如果 Pod 对应的 restartPolicy 值为Never
,并且 Pod 的 Init 容器失败, 则 Kubernetes 会将整个 Pod 状态设置为失败。
Init 容器通过initContainers
字段配置,该字段为 Container 类型对象数组形式,和主容器的containers
数组同级相邻。更多详情,请参见 Kubernetes 官方文档。
说明
通过 kubectl 命令行创建无状态负载(Deployment)前请确保:
本文以 Deployment 为例,介绍如何配置 Init 容器。
deployment-demo.yaml
代码如下:apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: initContainers: # 配置 Init 容器 - name: getresource image: cr-cn-beijing.volces.com/tw/nginx:1.0 # Init 容器镜像地址和 Tag command: ['sh', '-c', 'echo This is initContainers information! && sleep 30'] containers: - name: nginx image: cr-cn-beijing.volces.com/tw/nginx:1.0 # 主容器镜像地址和 Tag ports: - containerPort: 80
kubectl apply -f deployment-demo.yaml
配置完成后,您可以在控制台查看 Init 容器的状态信息。