kubernetes之创建初始化容器
简介
此文讲述在应用容器运行之前如何使用初始化容器。
备注:此文档参考官方文档,并加以自己的理解。如有误导性的内容,请批评指正。
创建一个有初始化容器的Pod
创将一个Pod,该Pod中包含一个应用容器和初始化容器。在应用容器开始之前,初始化容器的初始化任务已经完成。文件名:init-containers.yaml
apiVersion: v1
kind: Pod
metadata:
name: init-demo
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
volumeMounts:
- name: workdir
mountPath: /usr/share/nginx/html
# These containers are run during pod initialization
initContainers:
- name: install
image: busybox
command:
- wget
- "-O"
- "/work-dir/index.html"
- http://kubernetes.io
volumeMounts:
- name: workdir
mountPath: "/work-dir"
dnsPolicy: Default
volumes:
- name: workdir
emptyDir: {}
在配置文件中,可以看出创建的Pod包含一个初始化容器和应用容器共享的Volume
。
初始化容器挂载了一个共享的Volume
即:/work-dir
,应用容器挂载的共享Volume
在/usr/share/nginx/html
目录下。初始化容器运行如下的命令
wget -O /work-dir/index.html http://kubernetes.io
初始化容器早 nginx server 的根目录下写入index.html
文件。
创建Pod:
# kubectl apply -f /root/k8s-example/pods/init-containers.yaml
确认初始化容器已经运行:
# kubectl get pod init-demo
输出结果显示 nginx 容器已经正在运行
NAME READY STATUS RESTARTS AGE
init-demo 1/1 Running 0 17s
进入init-demo
Pod中正在运行的nginx容器的shell内:
# kubectl exec -it init-demo -- /bin/bash
在shell中发出GET
请求:
root@nginx:~# apt-get update
root@nginx:~# apt-get install curl
root@nginx:~# curl localhost
输出显示nginx正在运行由init容器编写的网页:
<!Doctype html>
<html id="home">
<head>
...
"url": "http://kubernetes.io/"}</script>
</head>
<body>
...
<p>Kubernetes is open source giving you the freedom to take advantage ...</p>
...
删除Pod资源:
# kubectl delete pods init-demo