Kubernetes有一個內(nèi)置的垃圾收集系統(tǒng),可以清理不使用的鏡像。它由Kubelet管理,它是Kubernetes 的工作進程并且在每個節(jié)點上運行。
Kubelet 會自動監(jiān)控未使用的圖像,并定期刪除它們(https://kubernetes.io/docs/concepts/cluster-administration/kubelet-garbage-collection)。通過評估鏡像的磁盤使用情況和最后使用時間來決定是否刪除鏡像。一個已經(jīng)使用了一周的大鏡像通常會在昨天使用的小鏡像之前被清理干凈。
通過指定磁盤使用率的高閾值和低閾值,您可以自定義垃圾收集何時運行。磁盤使用率高于“高”閾值將觸發(fā)垃圾回收。該過程將嘗試將磁盤使用率降低到“低”閾值。
閾值使用兩個Kubelet標(biāo)志定義:
? image-gc-high-threshold – 設(shè)置高閾值;默認(rèn)為85%。
? image-gc-low-threshold – 設(shè)置低閾值;默認(rèn)為80%。
這些設(shè)置應(yīng)該已經(jīng)在您的集群中處于活動狀態(tài)。Kubelet將嘗試在磁盤使用率達到85%后將其降低到80%。
你可以設(shè)置Kubectl 相關(guān)參數(shù)/var/lib/kubelet/kubeadm-flags.env:
KUBELET_KUBEADM_ARGS="--image-gc-high-threshold=60 --image-gc-low-threshold=50"
編輯文件后,重啟Kubectl:
systemctl daemon-reloadsystemctl restart kubelet
清除舊容器
Kubelet 還負(fù)責(zé)處理冗余容器的清理。任何被攔截或身份不明的容器都將被刪除。
您可以通過定義最小容器使用年限,在刪除舊容器之前授予一個寬限期。附加的標(biāo)志可以讓你控制單個pod和節(jié)點上允許存在的死容器的總數(shù):
? maximum-dead-containers – 可保留的舊容器的最大數(shù)量。當(dāng)設(shè)置為1(默認(rèn)值)時,不應(yīng)用限制。
? maximum-dead-containers-per-container – 在每個容器的基礎(chǔ)上設(shè)置要保留的舊實例的數(shù)量。如果容器被新實例替換,那么將允許保留這么多舊版本。
? minimum-container-ttl-duration – 廢棄容器的垃圾回收寬限期。一旦容器存在了這么多分鐘,它就有資格進行垃圾回收。默認(rèn)值為0表示不設(shè)置寬限期。
您可以使用與上面描述的相同的過程使用Kubelet標(biāo)志配置這些設(shè)置。
我應(yīng)該手動干預(yù)嗎?
您不應(yīng)該手動刪除死容器或鏡像。如果磁盤空間被填滿,或者垃圾收集似乎不起作用,請嘗試將Kubelet標(biāo)志調(diào)整為更積極的設(shè)置。
Kubernetes警告執(zhí)行外部垃圾收集。不要使用集群管理api或第三方工具手動刪除資源。這可能會造成不一致的狀態(tài),從而影響Kubelet的操作。
Kubelet負(fù)責(zé)管理分配給每個節(jié)點的容器。當(dāng)調(diào)度一個新的容器時,Kubelet將下載它的鏡像。成功的集群操作依賴于Kubelet的期望是否得到滿足。缺少鏡像或容器會導(dǎo)致Kubelet問題。
未來:驅(qū)逐
當(dāng)前的Kubernetes版本支持上述設(shè)置。然而,他們正在反對一個更強大的“驅(qū)逐”制度。驅(qū)逐是清理Kubernetes資源的統(tǒng)一方式;它們最終將取代垃圾回收。
驅(qū)逐的發(fā)生有幾個原因。Kubelet將監(jiān)控多個因素,包括可用硬件資源和用戶配置的保留期。
這個新系統(tǒng)促進了作為專用機制的垃圾收集的刪除。由于內(nèi)存不足,相同的進程終止pods將刪除冗余的鏡像,因為磁盤空間變得有限。
定義了兩種類型的驅(qū)逐:硬和軟。硬驅(qū)逐將立即采取行動刪除目標(biāo)資源。沒有寬限期。軟驅(qū)逐有一個用戶配置的寬限期;一旦寬限期到期,該資源將成為目標(biāo)。如果在寬限期內(nèi)清除的原因得到解決,例如有更多的磁盤空間可用,則可以終止清除。
容器清理還不完全支持驅(qū)逐系統(tǒng)。deat-containers標(biāo)志已經(jīng)被棄用,以便將來使用。您已經(jīng)可以將它用于容器鏡像—設(shè)置—eviction-hart或--eviction-soft,而不是threshold 標(biāo)志。
--eviction-hard=imagefs.available<1Gi
這個示例指示Kubelet刪除所有未使用的容器鏡像,如果鏡像存儲的可用磁盤空間低于1GB。
--eviction-soft=imagefs.available<1Gi--eviction-soft-grace-period=imagefs.available=5m
第二個例子展示了如何使用“軟”驅(qū)逐。在這種情況下,除非可用磁盤空間低于1GB至少5分鐘,否則不會刪除鏡像。
總結(jié)
Kubernetes默認(rèn)啟用了垃圾收集。死容器和冗余鏡像將定期清除。默認(rèn)計劃的目標(biāo)是磁盤使用率為80%或更低;容器一旦被攔截,就會被非常積極地清理。您可以使用Kubelet標(biāo)志來調(diào)整流程中的閾值。文章來源:http://www.zghlxwxcb.cn/news/detail-604104.html
垃圾收集這個概念最終將被淘汰,取而代之的是驅(qū)逐。驅(qū)逐有一個簡化的配置,可以更好地與其他形式的資源刪除保持一致。您可以在您的集群中設(shè)置驅(qū)逐。請記住,垃圾收集標(biāo)志并不直接映射到它們的驅(qū)逐對應(yīng)對象。文章來源地址http://www.zghlxwxcb.cn/news/detail-604104.html
到了這里,關(guān)于如何清理Kubernetes集群中的舊容器和鏡像的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!