簡介
此文講述在應用容器運行之前如何使用初始化容器。
備注:此文檔參考官方文檔,並加以自己的理解。如有誤導性的內容,請批評指正。
創建一個有初始化容器的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