深入理解 K3s 鏡像重寫:從配置到實際應(yīng)用
什么是 K3s 鏡像重寫?
在 K3s 鏡像倉庫配置中,每個 Mirror 都可以配備一組 Rewrites。這些 Rewrites 能夠根據(jù)正則表達式對鏡像標簽進行調(diào)整,解決了當(dāng)鏡像倉庫中的組織或項目結(jié)構(gòu)與上游不一致的情況。
例如,以下配置將透明地從 harbor.kingsd.top/production/busybox:1.35 中拉取鏡像 docker.io/rancher/busybox:1.35
root@ksd-1:~# cat /etc/rancher/k3s/registries.yaml
mirrors:
docker.io:
endpoint:
- https://harbor.kingsd.top
rewrite:
"^rancher/(.*)": "production/$1"
root@ksd-1:~#
root@ksd-1:~# crictl pull rancher/busybox:1.35
Image is up to date for sha256:8aa0a6afef383f794b4f9a3785899de3832551d6c895ba74c8d0c3357823f3de
root@ksd-1:~# crictl image list
IMAGE TAG IMAGE ID SIZE
docker.io/rancher/busybox 1.35 8aa0a6afef383 2.21MB
以上配置是 K3s 使用的容器鏡像倉庫的鏡像重寫(rewrite)配置。讓我們逐步解釋每個部分的含義:
-
mirrors: 這個部分定義了鏡像倉庫的配置。 -
docker.io: 這里指定了要配置的鏡像倉庫的名稱,即 Docker Hub。 -
endpoint: 定義了鏡像倉庫的地址。在這里,它是https://harbor.kingsd.top。 -
rewrite: 這是一個重要的部分,它定義了鏡像的重寫規(guī)則。在這個例子中,它使用正則表達式來重寫鏡像的路徑。具體來說,它將以 "rancher/" 開頭的路徑重寫為 "production/",這意味著所有以 "rancher/" 開頭的鏡像將被重寫為以 "production/" 開頭。
上面的示例中嘗試拉取 rancher/busybox:1.35,根據(jù)重寫規(guī)則,它將被重寫為 production/busybox:1.35。所以,如果在你的鏡像倉庫中存在 production/busybox:1.35,那么拉取將成功。
讀到這,你可能認為 rancher/busybox:1.35 是從 dockerhub 拉取的。但其實 dockerhub 中是不存在 rancher/busybox:1.35 的,如果換個主機,這個鏡像是拉不到的:
root@harbor:~# docker pull rancher/busybox:1.35
Error response from daemon: manifest for rancher/busybox:1.35 not found: manifest unknown: manifest unknown
使用 Harbor 作為 K3S 的鏡像代理緩存后端
借助 K3s 強大的 rewrite 特性,我們得以精心配置,將 Harbor 巧妙地嵌入到 K3S 的鏡像代理緩存體系中,為整個容器化環(huán)境提供了高效、靈活的鏡像管理解決方案。
創(chuàng)建 Harbor 代理緩存項目
建議 Harbor 配置訪問外網(wǎng)的 HTTP(S) 代理,不使用外網(wǎng)代理無法獲取 gcr.io/k8s.gcr.io 的鏡像
登入 Harbor 管理后臺 https://harbor.kingsd.top
- 左側(cè)邊欄 Administration => Registries => New Endpoint 創(chuàng)建 5 個 Endpoint:
| Provider | Name | Endpoint URL | Access ID |
|---|---|---|---|
| Docker Hub | docker.io | |
|
| Quay | quay.io | https://quay.io | 清空 |
| Quay | gcr.io | https://gcr.io | 清空 |
| Quay | k8s.gcr.io | https://k8s.gcr.io | 清空 |
| Quay | ghcr.io | https://ghcr.io | 清空 |
- 左側(cè)邊欄 Projects => New Project 創(chuàng)建 5 個項目:
| Project Name | Access Level | Proxy Cache |
|---|---|---|
| docker.io | Public | Endpoint: docker.io |
| quay.io | Public | Endpoint: quay.io |
| gcr.io | Public | Endpoint: gcr.io |
| k8s.gcr.io | Public | Endpoint: k8s.gcr.io |
| ghcr.io | Public | Endpoint: ghcr.io |
配置 K3S registries.yaml
cat >/etc/rancher/k3s/registries.yaml <<EOF
mirrors:
docker.io:
endpoint:
- https://harbor.kingsd.top
rewrite:
"(^.+$)": "docker.io/$1"
quay.io:
endpoint:
- https://harbor.kingsd.top
rewrite:
"(^.+$)": "quay.io/$1"
gcr.io:
endpoint:
- https://harbor.kingsd.top
rewrite:
"(^.+$)": "gcr.io/$1"
k8s.gcr.io:
endpoint:
- https://harbor.kingsd.top
rewrite:
"(^.+$)": "k8s.gcr.io/$1"
ghcr.io:
endpoint:
- https://harbor.kingsd.top
rewrite:
"(^.+$)": "ghcr.io/$1"
EOF
上述配置可以用作鏡像倉庫的緩存配置。通過這樣的配置,K3s 集群會將對于 quay.io、gcr.io、ghcr.io 等鏡像倉庫的拉取請求重定向到指定的 Harbor 鏡像倉庫地址,從而實現(xiàn)鏡像的緩存和加速。
具體而言,這個配置中的 endpoint 部分指定了 Harbor 鏡像倉庫的地址,而 rewrite 部分則將鏡像路徑重寫為對應(yīng)的鏡像倉庫路徑。這樣一來,當(dāng) K3s 集群中的容器需要從 gcr.io 或 ghcr.io 拉取鏡像時,實際上會先從 Harbor 鏡像倉庫中拉取,從而提高鏡像拉取的速度,并減輕對外部鏡像倉庫的依賴。
這種做法對于在封閉網(wǎng)絡(luò)環(huán)境下或需要控制對外部鏡像倉庫訪問的場景非常有用,同時也可以減少對公共鏡像倉庫的訪問頻率,降低鏡像拉取的時間和成本。
參考:
- 使用 Harbor 作為 K3S 的鏡像代理緩存后端:https://www.cnblogs.com/roy2220/p/14811537.html
- K3s 私有鏡像倉庫配置:https://docs.k3s.io/installation/private-registry?_highlight=rewrite#mirrors
A b o u t k 3 s
k 3 s 是 首 個 進 入 C N C F 沙 箱 項 目 的 K 8 S 發(fā) 行 版 , 同 時 也 是 當(dāng) 前 全 球 用 戶 量 最 大 的 C N C F 認 證 輕 量 級 K 8 S 發(fā) 行 版 。 自 2 0 1 9 年 3 月 發(fā) 布 以 來 , 備 受 全 球 開 發(fā) 者 們 關(guān) 注 , 至 今 G i t H u b S t a r 數(shù) 已 超 過 1 7 , 0 0 0 , 成 為 了 開 源 社 區(qū) 最 受 歡 迎 的 邊 緣 計 算 K 8 S 解 決 方 案 。 截 至 目 前 , K 3 s 全 球 下 載 量 超 過 1 0 0 萬 次 , 每 周 平 均 被 安 裝 超 過 2 萬 次 , 其 中 3 0 % 的 下 載 量 來 自 中 國 。
k 3 s 專 為 在 資 源 有 限 的 環(huán) 境 中 運 行 K u b e r n e t e s 的 研 發(fā) 和 運 維 人 員 設(shè) 計 , 將 滿 足 日 益 增 長 的 在 邊 緣 計 算 環(huán) 境 中 運 行 在 x 8 6 、 A R M 6 4 和 A R M v 7 處 理 器 上 的 小 型 、 易 于 管 理 的 K u b e r n e t e s 集 群 需 求 。 k 3 s 的 發(fā) 布 , 為 開 發(fā) 者 們 提 供 了 以 “ R a n c h e r 2 . X + k 3 s ” 為 核 心 的 從 數(shù) 據(jù) 中 心 到 云 到 邊 到 端 的 K 8 S 即 服 務(wù) ( K u b e r n e t e s - a s - a - S e r v i c e ) , 推 動 K u b e r n e t e s E v e r y w h e r e 。
掃 碼 添 加 k 3 s 中 文 社 區(qū) 助 手
加 入 官 方 中 文 技 術(shù) 社 區(qū)
官 網(wǎng) : h t t p s : / / k 3 s . i o
