1. 程式人生 > >配置 containerd 映象倉庫完全攻略

配置 containerd 映象倉庫完全攻略

>作者簡介 > >王海龍,Rancher中國社群技術經理,負責Rancher中國技術社群的維護和運營。擁有6年的雲端計算領域經驗,經歷了OpenStack到Kubernetes的技術變革,無論底層作業系統Linux,還是虛擬化KVM或是Docker容器技術都有豐富的運維和實踐經驗。 ## 前 言 Kubernetes 在 Changelog 中宣佈自 [Kubernetes 1.20 之後將棄用 Docker](https://mp.weixin.qq.com/s/O4UFRRNS7yBZrMf-sAWwTQ "Kubernetes 1.20 之後將棄用 Docker") 作為容器執行時之後,containerd成為下一個容器執行時的熱門選項。雖然 containerd 很早就已經是 Docker 的一部分,但是純粹使用 containerd 還是給大家帶來了諸多困擾,本文將介紹如何使用 containerd 配置映象倉庫和加速器。 本文將以K3s為例對containerd進行配置,如果您的環境未使用 K3s 而是使用的 Kubernetes,你也可以參考本文來配置 containerd 的映象倉庫,因為 containerd 的配置是通用的。 ## 關於 K3s 和 containerd K3s 是一個輕量級 Kubernetes 發行版,二進位制大小小於100MB,所需記憶體不到Kubernetes的一半。K3s 為了降低資源消耗,將預設的 runtime 修改為 containerd,同時也內建了 Kubernetes CLI 工具 crictl和ctr。 K3s 預設的 containerd 配置檔案目錄為`/var/lib/rancher/k3s/agent/etc/containerd/config.toml`,但直接操作 containerd 的配置檔案去設定映象倉庫或加速器相比於操作 docker 要複雜許多。K3s 為了簡化配置 containerd 映象倉庫的複雜度,K3s 會在啟動時檢查`/etc/rancher/k3s/`中是否存在 registries.yaml 檔案,如果存在該檔案,就會根據 registries.yaml 的內容轉換為 containerd 的配置並存儲到`/var/lib/rancher/k3s/agent/etc/containerd/config.toml`,從而降低了配置 containerd 映象倉庫的複雜度。 ## 使用 K3s 配置私有映象倉庫 K3s 映象倉庫配置檔案由兩大部分組成:`mirrors`和`configs`: - Mirrors 是一個用於定義專用映象倉庫的名稱和 endpoint 的指令 - Configs 部分定義了每個 mirror 的 TLS 和證書配置。對於每個 mirror,你可以定義auth和/或tls containerd 使用了類似 K8S 中 svc 與 endpoint 的概念,svc 可以理解為訪問名稱,這個名稱會解析到對應的 endpoint 上。也可以理解 mirror 配置就是一個反向代理,它把客戶端的請求代理到 endpoint 配置的後端映象倉庫。mirror 名稱可以隨意填寫,但是必須符合IP或域名的定義規則。並且可以配置多個 endpoint,預設解析到第一個 endpoint,如果第一個 endpoint 沒有返回資料,則自動切換到第二個 endpoint,以此類推。 比如以下配置示例: ``` mirrors: "172.31.6.200:5000": endpoint: - "http://172.31.6.200:5000" "rancher.ksd.top:5000": endpoint: - "http://172.31.6.200:5000" "docker.io": endpoint: - "https://fogjl973.mirror.aliyuncs.com" - "https://registry-1.docker.io" ``` 可以通過 `crictl pull 172.31.6.200:5000/library/alpine` 和 `crictl pull rancher.ksd.top:5000/library/alpine`獲取到映象,但映象都是從同一個倉庫獲取到的。 ``` root@rancher-server:/etc/rancher/k3s# systemctl restart k3s.service root@rancher-server:/etc/rancher/k3s# crictl pull 172.31.6.200:5000/library/alpine Image is up to date for sha256:a24bb4013296f61e89ba57005a7b3e52274d8edd3ae2077d04395f806b63d83e root@rancher-server:/etc/rancher/k3s# crictl pull rancher.ksd.top:5000/library/alpine Image is up to date for sha256:a24bb4013296f61e89ba57005a7b3e52274d8edd3ae2077d04395f806b63d83e root@rancher-server:/etc/rancher/k3s# ``` ## 非安全(http)私有倉庫配置 配置非安全(http)私有倉庫,只需要在 endpoint 中指定 http 協議頭的地址即可。 在沒有 TLS 通訊的情況下,需要為 endpoints 指定http:// ,否則將預設為 https。 ### 無認證 如果你使用的是非安全(http)私有倉庫,那麼可以通過下面的引數來配置 K3s 連線私有倉庫: ``` root@ip-172-31-13-117:~# cat >> /etc/rancher/k3s/registries.y