v1.0.0 開(kāi)始可用
可以配置 Containerd 連接到私有鏡像倉(cāng)庫(kù),并使用它們?cè)诠?jié)點(diǎn)上拉取私有鏡像。
啟動(dòng)時(shí),K3s 會(huì)檢查?/etc/rancher/k3s/
?中是否存在?registries.yaml
?文件,并指示 containerd 使用文件中定義的鏡像倉(cāng)庫(kù)。如果你想使用一個(gè)私有的鏡像倉(cāng)庫(kù),那么你需要在每個(gè)使用鏡像倉(cāng)庫(kù)的節(jié)點(diǎn)上以 root 身份創(chuàng)建這個(gè)文件。
請(qǐng)注意,server 節(jié)點(diǎn)默認(rèn)是可以調(diào)度的。如果你沒(méi)有在 server 節(jié)點(diǎn)上設(shè)置污點(diǎn),那么將在它們上運(yùn)行工作負(fù)載,請(qǐng)確保在每個(gè) server 節(jié)點(diǎn)上創(chuàng)建?registries.yaml
?文件。
Containerd 中的配置可以用于通過(guò) TLS 連接到私有鏡像倉(cāng)庫(kù),也可以與啟用驗(yàn)證的鏡像倉(cāng)庫(kù)連接。下一節(jié)將解釋?registries.yaml
?文件,并給出在 K3s 中使用私有鏡像倉(cāng)庫(kù)配置的不同例子。
該文件由兩大部分組成:
Mirrors 是一個(gè)用于定義專用鏡像倉(cāng)庫(kù)的名稱和 endpoint 的指令,例如。
mirrors:
mycustomreg.com:
endpoint:
- "https://mycustomreg.com:5000"
每個(gè) mirror 必須有一個(gè)名稱和一組 endpoint。當(dāng)從鏡像倉(cāng)庫(kù)中拉取鏡像時(shí),containerd 會(huì)逐一嘗試這些 endpoint URL,并使用第一個(gè)可用的 endpoint。
v1.21.0 + K3s1 起可用
每個(gè)鏡像都可以有一組重寫。重寫可以根據(jù)正則表達(dá)式來(lái)改變鏡像的標(biāo)簽。如果鏡像倉(cāng)庫(kù)中的組織/項(xiàng)目結(jié)構(gòu)與上游的不同,這很有用。
例如,以下配置將透明地從 ?registry.example.com:5000/mirrorproject/rancher-images/coredns-coredns:1.6.3
? 拉取鏡像 ?docker.io/rancher/coredns-coredns:1.6.3
?:
mirrors:
docker.io:
endpoint:
- "https://registry.example.com:5000"
rewrite:
"^rancher/(.*)": "mirrorproject/rancher-images/$1"
鏡像仍將以原始名稱存儲(chǔ),所以 ?crictl image ls
? 將顯示 ?docker.io/rancher/coredns-coredns:1.6.3
? 在節(jié)點(diǎn)上是可用的,即使鏡像是以不同的名字從鏡像倉(cāng)庫(kù)中拉取的。
Configs 部分定義了每個(gè) mirror 的 TLS 和憑證配置。對(duì)于每個(gè) mirror,你可以定義?auth
?或?tls
?。
?tls
?部分包括:
指令 | 描述 |
---|---|
cert_file
|
用來(lái)與鏡像倉(cāng)庫(kù)進(jìn)行驗(yàn)證的客戶證書路徑 |
key_file
|
用來(lái)驗(yàn)證鏡像倉(cāng)庫(kù)的客戶端密鑰路徑 |
ca_file
|
定義用于驗(yàn)證鏡像倉(cāng)庫(kù)服務(wù)器證書文件的 CA 證書路徑 |
insecure_skip_verify
|
定義是否應(yīng)跳過(guò)鏡像倉(cāng)庫(kù)的 TLS 驗(yàn)證的布爾值 |
?auth
?部分由用戶名/密碼或身份驗(yàn)證令牌組成:
指令 | 描述 |
---|---|
username
|
鏡像倉(cāng)庫(kù)身份驗(yàn)證的用戶名 |
password
|
鏡像倉(cāng)庫(kù)身份驗(yàn)證的用戶密碼 |
auth
|
鏡像倉(cāng)庫(kù) auth 的認(rèn)證 token |
以下是在不同模式下使用私有鏡像倉(cāng)庫(kù)的基本例子:
下面的例子展示了當(dāng)你使用 TLS 時(shí),如何在每個(gè)節(jié)點(diǎn)上配置?/etc/rancher/k3s/registries.yaml
?。
mirrors:
docker.io:
endpoint:
- "https://mycustomreg.com:5000"
configs:
"mycustomreg:5000":
auth:
username: xxxxxx # 這是私有鏡像倉(cāng)庫(kù)的用戶名
password: xxxxxx # 這是私有鏡像倉(cāng)庫(kù)的密碼
tls:
cert_file: # 鏡像倉(cāng)庫(kù)中使用的cert文件的路徑。
key_file: # 鏡像倉(cāng)庫(kù)中使用的key文件的路徑。
ca_file: # 鏡像倉(cāng)庫(kù)中使用的ca文件的路徑。
mirrors:
docker.io:
endpoint:
- "https://mycustomreg.com:5000"
configs:
"mycustomreg:5000":
tls:
cert_file: # 鏡像倉(cāng)庫(kù)中使用的cert文件的路徑。
key_file: # 鏡像倉(cāng)庫(kù)中使用的key文件的路徑。
ca_file: # 鏡像倉(cāng)庫(kù)中使用的ca文件的路徑。
下面的例子展示了當(dāng)你不使用 TLS 時(shí),如何在每個(gè)節(jié)點(diǎn)上配置?/etc/rancher/k3s/registries.yaml
?。
mirrors:
docker.io:
endpoint:
- "http://mycustomreg.com:5000"
configs:
"mycustomreg:5000":
auth:
username: xxxxxx # 這是私有鏡像倉(cāng)庫(kù)的用戶名
password: xxxxxx # 這是私有鏡像倉(cāng)庫(kù)的密碼
mirrors:
docker.io:
endpoint:
- "http://mycustomreg.com:5000"
在沒(méi)有 TLS 通信的情況下,需要為 endpoints 指定?
http://
?,否則將默認(rèn)為 https。
為了使鏡像倉(cāng)庫(kù)更改生效,你需要重新啟動(dòng)每個(gè)節(jié)點(diǎn)上的 K3s。
首先,從 GitHub 上獲取你正在使用的版本的 k3s-images.txt 文件。 從 docker.io 中拉取 k3s-images.txt 文件中列出的 K3s 鏡像。
示例: ?docker pull docker.io/rancher/coredns-coredns:1.6.3
?
然后,將鏡像重新標(biāo)記成私有鏡像倉(cāng)庫(kù)。
示例: ?docker tag coredns-coredns:1.6.3 mycustomreg:5000/coredns-coredns
?
最后,將鏡像推送到私有鏡像倉(cāng)庫(kù)。
示例: ?docker push mycustomreg.com:5000/coredns-coredns
?
更多建議: