新聞中心
Kubernetes-INIT容器的六個特性
作者:不焦躁的程序員 2023-10-07 09:52:30
云計算 本文主要從以下四個方面介紹Init容器:Init容器作用、Init容器特性、Init容器與應用容器的區(qū)別、Init容器實戰(zhàn)。

成都創(chuàng)新互聯(lián)公司堅持“要么做到,要么別承諾”的工作理念,服務領域包括:成都做網(wǎng)站、成都網(wǎng)站設計、成都外貿網(wǎng)站建設、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務,滿足客戶于互聯(lián)網(wǎng)時代的白云網(wǎng)站設計、移動媒體設計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡建設合作伙伴!
本文主要從以下4個方面介紹Init容器:Init容器作用、Init容器特性、Init容器與應用容器的區(qū)別、Init容器實戰(zhàn)。
Kubernetes中的Pod內可以運行多個容器,主要分為2種:Init容器、應用容器,Sidecar容器也是一種特殊的Init容器。
Init容器的作用
Init 容器是一種特殊容器,在Pod內的應用容器啟動之前運行。用于執(zhí)行一些初始化的任務或設置,或者用于延遲執(zhí)行應用容器。
有不少場景都需要在應用容器啟動之前進行部分初始化操作,比如:等待某個服務需要等待其關聯(lián)的服務可用后才啟動、從配置中心獲取配置后再啟動 等。
Init容器的特性
- Pod中的所有Init容器按定義的順序串行運行,直到它們全部成功結束后,才能啟動應用容器。
- Init容器通常很小,執(zhí)行簡單的邏輯,它們以輕量的方式快速運行。
- Init容器與編程語言中的初始化對象類似,只會執(zhí)行一次。
- 在所有的 Init 容器沒有成功完成之前,Pod不會變成 Ready 狀態(tài)。
- 某個Init容器運行失敗后,會導致整個Pod重新啟動(重啟策略為 Never 時例外)。如果 Pod 對應的重啟策略為Never,并且 Pod 的 Init 容器失敗,則Kubernetes會將Pod狀態(tài)設置為失敗。
- Pod重啟后,初始化容器也會再次運行,因此需要確保所有Init容器的操作具有冪等性。這一點與應用開發(fā)中要保證某個接口的冪等性類似。
Init容器與應用容器的關系
Init 容器與應用容器非常像,Init容器支持應用容器的全部字段和特性,包括資源限制、數(shù)據(jù)卷和安全設置,Init容器與應用容器共享數(shù)據(jù)卷和網(wǎng)絡。關系如下圖:
但是Init容器與應用容器也有三點不同:
- 應用容器運行后沒有特殊情況不會停止,他們持續(xù)提供服務,沒有運行完成的概念。但是Init容器的存在就是為了初始化任務,所以必須是一個從開始到結束的過程。
- 應用容器可以多個并行運行。但是Init容器必須當前這個啟動完成后,才能啟動下一個。
- Init容器的設計是為了完成初始化任務,所以Init容器必須要在 Pod 就緒之前運行完成。自然的Init容器就不支持 生命周期、存活探針、就緒探針。
Init容器使用實戰(zhàn)
實戰(zhàn)描述
- 定義一個Pod,Pod里定義了Init容器和應用容器。
- Pod里的Init容器先從網(wǎng)絡上下載數(shù)據(jù),將下載的數(shù)據(jù)放到emptyDir。
- 等待init容器執(zhí)行完畢后,應用容器會自動啟動,在應用容器中掛載emptyDir,此時應用容器可以看到Init容器之前下載的數(shù)據(jù)。
yaml編排文件如下
apiVersion: v1
kind: Pod
metadata:
name: init-container-test
namespace: demo
labels:
app: init-container-test
spec:
nodeName: k8s-worker-1
initContainers:
- name: download
image: busybox
command:
- wget
- -O
- /temp-dir/index.html
- http://www.baidu.com
volumeMounts:
- name: temp-dir
mountPath: /temp-dir
containers:
- name: web-app
image: nginx
ports:
- containerPort: 80
hostPort: 8082
volumeMounts:
- name: temp-dir
mountPath: /usr/share/nginx/html
volumes:
- name: temp-dir
emptyDir: {}執(zhí)行kubectl describe pod init-container-test -n demo命令,可以看到有兩處容器:
如果Init容器執(zhí)行有異常,可以看到Pod會被不停地重啟。
總結
本文主要從以下四個方面介紹Init容器:Init容器作用、Init容器特性、Init容器與應用容器的區(qū)別、Init容器實戰(zhàn)。
重點要注意:
- Init容器按定義的順序串行運行。
- 確保所有Init容器的操作具有冪等性。
當前標題:Kubernetes-Init容器的六個特性
鏈接分享:http://m.fisionsoft.com.cn/article/djohdho.html


咨詢
建站咨詢
