此文为学习《Kubernetes权威指南》的相关笔记html
学习笔记:node
初始化容器Init Container(后称IC)用于在启动应用容器前进行初始化,完成应用容器所需的预置条件。nginx
主要应用场景如:web
做为初始化的工具, IC容器仅运行一次就结束,且不能设置readinessProbe探针,多个IC容器将依次执行,系统要求必需在全部IC执行成功后才能继续执行下一个容器。算法
在IC容器中也能够设置资源限制,但与应用容器存在以下不一样:docker
当Pod被重启时,IC容器将会从新执行,常见的Pod重启场景以下:数据库
阿里云大学云原生公开课对于IC容器做以下介绍:api
在下面的实例中,新建Pod运行一个nginx应用容器async
在启动nginx前,经过初始化容器建立一个Nginx启动主页工具
不难想到的是,大多数初始化操做都须要对应用容器文件进行修改,势必要给IC容器与应用容器设置共享Volume
apiVersion: v1
kind: Pod
metadata:
name: nginx
annotations:
spec:
initContainers:
- name: install
image: busybox
imagePullPolicy: IfNotPresent
command: #拉取一个网页到共享的Volume下
- wget
- "-O"
- "/work-dir/index.html"
- http://kubernetes.io
volumeMounts:
- name: workdir
mountPath: "/work-dir"
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
volumeMounts: #把共享的workdir挂载到nginx容器的默认web页面存储文件夹下
- name: workdir
mountPath: /usr/share/nginx/html
dnsPolicy: Default
volumes:
- name: workdir
emptyDir: {}
启动该Pod
# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx 1/1 Running 0 87s
查看Pod信息,能够看到配置的IC信息也存在于Pod详情中
# kubectl describe pod nginx
Name: nginx......
Init Containers:
install:
Container ID: docker://2f245864a6823fc943eaa03ee2d8935b21bf1874e11c095225a690d3b9ea0d8f
Image: busybox
Image ID: docker-pullable://busybox@sha256:1828edd60c5efd34b2bf5dd3282ec0cc04d47b2ff9caa0b6d4f07a21d1c08084
Port: <none>
Host Port: <none>
Command:
wget
-O
/work-dir/index.html
http://kubernetes.io......
使用kubectl describe命令能够看到Pod事件中先建立并运行了IC容器(名为install)
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled <unknown> default-scheduler Successfully assigned default/nginx to xu.node1
Normal Pulled 2m10s kubelet, xu.node1 Container image "busybox" already present on machine
Normal Created 2m10s kubelet, xu.node1 Created container install
Normal Started 2m9s kubelet, xu.node1 Started container install
Normal Pulling 2m7s kubelet, xu.node1 Pulling image "nginx"
Normal Pulled 2m5s kubelet, xu.node1 Successfully pulled image "nginx"
Normal Created 2m5s kubelet, xu.node1 Created container nginx
Normal Started 2m5s kubelet, xu.node1 Started container nginx
不出意外,在nginx容器的挂载目录中,咱们能够找到IC容器为它初始化好的index.html
# kubectl exec -it nginx -c nginx /bin/sh
$ cat /usr/share/nginx/html/index.html
<!doctype html><html id=home lang=en><head><meta name=generator content="Hugo 0.59.1"><script async src="https://www.googletagmanager.com/gtag/js?id=......