Pod生命週期
Pod 可以包含多個容器,應用運行在這些容器裏面,同時 Pod 也可以有一個或多個先於應用容器啓動的 Init 容器
Init 容器與普通的容器非常像,區別是:
- Init 容器總是運行到完成
- Init 容器不支持 Readiness,因爲它們必須在 Pod 就緒之前運行完成
- 每個 Init 容器必須運行成功,下一個才能夠運行
如果 Pod 的 Init 容器失敗,Kubernetes 會不斷地重啓該 Pod,直到 Init 容器成功爲止。然而,如果 Pod 對應的 restartPolicy 值爲 Never,它不會重新啓動
Init容器的作用:
- Init 容器可以包含一些安裝過程中應用容器中不存在的實用工具或個性化代碼
- Init 容器可以安全地運行這些工具,避免這些工具導致應用鏡像的安全性降低
- 應用鏡像的創建者和部署者可以各自獨立工作,而沒有必要聯合構建一個單獨的應用鏡像
- Init 容器能以不同於Pod內應用容器的文件系統視圖運行。因此,Init容器可具有訪問 Secrets 的權限,而應用容器不能夠訪問
- 由於 Init 容器必須在應用容器啓動之前運行完成,因此 Init 容器提供了一種機制來阻塞或延遲應用容器的啓動,直到滿足了一組先決條件。一旦前置條件滿足,Pod內的所有的應用容器會並行啓動
下載busybox鏡像推送到私有harbor倉庫
docker pull hub.c.163.com/library/busybox:latest # 從163鏡像倉庫中拉取鏡像
docker tag hub.c.163.com/library/busybox:latest reg.harbor.com/library/busybox # 重命名鏡像文件
docker push reg.harbor.com/library/busybox # 上傳鏡像到私有倉庫
docker rmi hub.c.163.com/library/busybox:latest # 刪除原名稱鏡像文件
編輯yaml文件
kubectl create -f demo2.yaml
kubectl get -f demo2.yaml
kubectl describe -f demo2.yaml
kubectl create -f myservice.yaml
kubectl get -f demo2.yaml
初始化完成~