Kubernetes

帶有 containerd 的 Kubeadm 無法使用本地載入的圖像

  • November 24, 2021

我正在嘗試在裸機伺服器(RHEL8)中使用 containerd 建構 kubernetes。

沒有網際網路連接,所以我手動下載了所需的圖像(例如 k8s.gcr.io/kube-scheduler:v1.22.1)並使用“ctr image import”載入它們。

圖像似乎已成功載入。

#ctr images ls -q
k8s.gcr.io/coredns/coredns:v1.8.4
k8s.gcr.io/etcd:3.5.0-0
k8s.gcr.io/kube-apiserver:v1.22.1
k8s.gcr.io/kube-controller-manager:v1.22.1
k8s.gcr.io/kube-proxy:v1.22.1
k8s.gcr.io/kube-scheduler:v1.22.1
k8s.gcr.io/pause:3.5

然後我執行了“kubeadm init”,但由於 ImagePull 錯誤而失敗。

#kubeadm init --kubernetes-version=1.22.1 --cri-socket=/run/containerd/containerd.sock
[init] Using Kubernetes version: v1.22.1
[preflight] Running pre-flight checks
       [WARNING FileExisting-tc]: tc not found in system path
[preflight] Pulling images required for setting up a Kubernetes cluster
[preflight] This might take a minute or two, depending on the speed of your internet connection
[preflight] You can also perform this action in beforehand using 'kubeadm config images pull'
error execution phase preflight: [preflight] Some fatal errors occurred:

如何讓 kubeadm 使用本地鏡像?還是可以忽略這些預檢錯誤?

編輯:這個過程(手動載入圖像而不是執行 kubeadm config images pull)在 docker 和 CentOS7 中執行良好。

事實證明,我必須將圖像載入到k8s.iocontainerd 的命名空間中,以便 Kubernetes 能夠辨識它們。我將圖像導入錯誤的命名空間(預設)。

ctr -n k8s.io images import xxx.tar
...

載入 Kubernetes 需要的所有鏡像後,kubeadm init 執行良好,無需執行

kubeadm config images pull. Kubernetes 可以使用的鏡像顯示在

ctr -n k8s.io images ls或中crictl images

# crictl images
IMAGE                                                          TAG                 IMAGE ID            SIZE
k8s.gcr.io/coredns/coredns                                     v1.8.4              8d147537fb7d1       47.7MB
k8s.gcr.io/etcd                                                3.5.0-0             0048118155842       296MB
k8s.gcr.io/kube-apiserver                                      v1.22.1             f30469a2491a5       130MB
k8s.gcr.io/kube-controller-manager                             v1.22.1             6e002eb89a881       123MB
k8s.gcr.io/kube-proxy                                          v1.22.1             36c4ebbc9d979       105MB
k8s.gcr.io/kube-scheduler                                      v1.22.1             aca5ededae9c8       53.9MB
k8s.gcr.io/pause                                               3.5                 ed210e3e4a5ba       686kB

要手動拉取圖像,請執行以下操作:

kubeadm config images list
kubeadm config images pull

在 Kubernetes 文件中還有一個部分用於在沒有 Internet 連接的情況下執行 kubeadm。

引用自:https://serverfault.com/questions/1079369