Pod由一个或者多个容器组成,这里的容器通常指的是运行应用程序的业务容器。但是Pod中除了业务容器外,还有基础容器、初始化容器和临时容器。
初始化容器晚于基础容器运行,但先于业务容器运行。如果Pod的初始化容器运行失败,在默认情况下Kubernetes会不断尝试重启Pod,直到初始化容器运行成功。如果将Pod的配置参数“restartPolicy”设置为“Never”,这时候Kubernetes将不会执行重启的动作。
如果要将Pod中的容器指定为初始化容器,可以通过在“spec”中添加“initContainers”字段。一个Pod可以指定多个初始化容器,它们会按顺序逐个运行。每个初始化容器必须运行成功,下一个才能够运行。当所有的初始化容器运行完成后,Kubernetes才会开始执行业务容器从而运行应用程序。
视频讲解如下:
下面给出一个初始化容器的示例。
(1)创建initcontainer.yaml文件,并输入下面的内容。
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
labels:
app: myapp
spec:
containers:
- name: myapp-container
image: busybox:1.28
command: ['sh', '-c', 'echo The app running! && sleep 5']
initContainers:
- name: init-myservice
image: busybox:1.28
command: ['sh', '-c', 'echo The init-myservice running! && sleep 5']
- name: init-mydb
image: busybox:1.28
command: ['sh', '-c', 'echo The init-mydb running! && sleep 5']
(2)执行下面的语句创建Pod。
kubectl apply -f initcontainer.yaml
(3)Pod创建成功后,使用describe查看具体的输出信息,如下图所示。
kubectl describe -f initcontainer.yaml
通过“Message”的输出信息可以看成,Kubernetes首先启动了两个初始化容器“init-myservice”和“init-mydb”,最后启动了业务容器“myapp-container”。
因为初始化容器与业务容器分离,因此它具有以下的优势:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。