word文檔 如何解密,【徽信;sjk6070】Kubernetes pod 啟動(dòng)時(shí)會(huì)拉取用戶指定的鏡像,一旦這個(gè)過程耗時(shí)太久就會(huì)導(dǎo)致 pod 長時(shí)間處于 pending 的狀態(tài),從而無法快速提供服務(wù)。
鏡像拉取的過程參考下圖所示:
k8s image pull
Pod 的 imagePullPolicy 鏡像拉取策略有三種:
IfNotPresent:只有當(dāng)鏡像在本地不存在時(shí)才會(huì)拉取。
Always:kubelet 會(huì)對比鏡像的 digest ,如果本地已緩存則直接使用本地緩存,否則從鏡像倉庫中拉取。
Never:只使用本地鏡像,如果不存在則直接失敗。
說明:每個(gè)鏡像的 digest 一定唯一,但是 tag 可以被覆蓋。
從鏡像拉取的過程來看,我們可以從以下三個(gè)方面來加速鏡像拉?。?/p>
縮減鏡像大小:
使用較小的基礎(chǔ)鏡像、移除無用的依賴、減少鏡像 layer 、使用多階段構(gòu)建等等。
推薦使用 docker-slim
加快鏡像倉庫與 k8s 節(jié)點(diǎn)之間的網(wǎng)絡(luò)傳輸速度。
主動(dòng)緩存鏡像:
Pre-pulled 預(yù)拉取鏡像,以便后續(xù)直接使用本地緩存,比如可以使用 daemonset 定期同步倉庫中的鏡像到 k8s 節(jié)點(diǎn)本地。
題外話 1:本地鏡像緩存多久?是否會(huì)造成磁盤占用問題?
本地緩存的鏡像一定會(huì)占用節(jié)點(diǎn)的磁盤空間,也就是說緩存的鏡像越多,占用的磁盤空間越大,并且緩存的鏡像默認(rèn)一直存在,并沒有 TTL 機(jī)制(比如說多長時(shí)間以后自動(dòng)過期刪除)。
但是,k8s 的 GC 機(jī)制會(huì)自動(dòng)清理掉鏡像。當(dāng)節(jié)點(diǎn)的磁盤使用率達(dá)到 HighThresholdPercent 高百分比閾值時(shí)(默認(rèn) 85% )會(huì)觸發(fā)垃圾回收,此時(shí) kubelet 會(huì)根據(jù)使用情況刪除最舊的不再使用的鏡像,直到磁盤使用率達(dá)到 LowThresholdPercent(默認(rèn) 80% )。
題外話 2:鏡像 layer 層數(shù)真的越少越好嗎?
我們經(jīng)常會(huì)看到一些文章說在 Dockerfile 里使用更少的 RUN 命令之類的減少鏡像的 layer 層數(shù)然后縮減鏡像的大小,layer 越少鏡像越小這確實(shí)沒錯(cuò),但是某些場景下得不償失。首先,如果你的 RUN 命令很大,一旦你修改了其中某一個(gè)小的部分,那么這個(gè) layer 在構(gòu)建的時(shí)候就只能重新再來,無法使用任何緩存;其次,鏡像的 layer 在上傳和下載的過程中是可以并發(fā)的,而單獨(dú)一個(gè)大的層無法進(jìn)行并發(fā)傳輸。
審核編輯:湯梓紅
-
word
+關(guān)注
關(guān)注
1文章
78瀏覽量
21879 -
文檔
+關(guān)注
關(guān)注
0文章
45瀏覽量
11971 -
鏡像
+關(guān)注
關(guān)注
0文章
159瀏覽量
10678
發(fā)布評論請先 登錄
相關(guān)推薦
評論