配置Pod初始化
这个章节展示了如何使用一个初始化容器初始化一个Pod在应用程序容器运行之前。
创建一个Pod包含一个初始化容器
在本次实验中创建一个Pod包含一个应用程序容器和一个初始化容器。这个初始化容器在应用容器启动之前运行完成。
下面是这个Pod的配置文件:
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。
初始化容器挂载共享卷在/work-dir,应用程序容器挂载共享卷在/usr/share/nginx/html。这个初始化容器运行下面的命令然后退出:
wget -O /work-dir/index.html http://kubernetes.io
注意 这个初始化容器在nginx服务根目录下面写入一个index.html文件。
创建一个Pod:
kubectl create -f init.yaml
验证nginx容器是否运行:
kubectl get pod init-demo
输出展示nginx容器正在运行:
NAME READY STATUS RESTARTS AGE
nginx 1/1 Running 0 43m
使用shell进入到运行的nginx容器里面:
kubectl exec -it init-demo -- /bin/bash
在shell里面,发送一个GET请求给nginx服务:
root@nginx:~# apt-get update
root@nginx:~# apt-get install curl
root@nginx:~# curl localhost
输出展示了nginx服务的站点页面:
<!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>
...