提升 K8S 的鏡像拉取速度和容災能力的鏡像服務

2024年2月6日 21点热度 0人点赞

#冬日生活打卡季#

大傢好,又見面了,我是 GitHub 精選君!

背景介紹

在使用 Kubernetes 的過程中,每個節點在啟動前都需要拉取工作負載的鏡像,而運行在每個節點上的每個工作負載的副本都將會產生一個類似的鏡像拉取操作。而這些鏡像無論是從地理范圍內靠近的雲鏡像服務還是公共的鏡像服務,或自搭建的私有鏡像服務,鏡像的拉取都存在一定的跨網絡訪問的開銷,會直接影響工作負載的啟動速度,同時也增加了各節點之間的網絡壓力。

今天要給大傢推薦一個 GitHub 開源項目 spegel,該項目在 GitHub 有差不多 1000 Star,用一句話介紹該項目就是:“Stateless cluster local OCI registry mirror.”。以下是新的工作方式的示例:

項目介紹

Spegel,瑞典語中的“鏡子”,作為一個無狀態的集群本地 OCI 註冊表鏡像,解決了以上問題。Spegel 的主要功能是允許 Kubernetes 集群中的每個節點充當本地註冊表鏡像,這樣節點之間就可以共享鏡像。任何一個節點已經拉取的圖像,其他節點都可以直接拉取。這樣既能夠減少工作負載啟動時間,又減少了出口流量,因為鏡像將存儲在本地集群中。另外,即使外部鏡像服務關閉或故障,新創建的工作負載也能夠繼續被拉取到,提升了集群的容災能力。

如何使用

在安裝 Spegel 之前,你可以先查看項目中的兼容性指南(./docs/COMPATIBILITY.md)

確認 Spegel 適用於你的 Kubernetes 集群。如果一切正常,最方便的部署 Spegel 的方式就是使用 Helm。

helm upgrade --create-namespace --namespace spegel --install --version v0.0.16 spegel oci://ghcr.io/xenitab/helm-charts/spegel

想了解更多細節的配置文件,可以參考 Helm Chart(./charts/spegel)。

項目推介

無論是你想要從本地緩存鏡像,還是抵抗外部鏡像服務停工時的集群失敗,或者是避免從外部鏡像服務拉取圖像時的頻繁限制,甚至在邊緣節點部署時提高鏡像拉取的效率,Spegel 都是你可以嘗試的方案。

以下是該項目 Star 趨勢圖(代表項目的活躍程度):

更多項目詳情請查看如下鏈接。

開源項目地址:https://github.com/XenitAB/spegel

開源項目作者:XenitAB

以下是參與項目建設的所有成員:

關註我們,一起探索有意思的開源項目。