Kubernetes
帶有 containerd 的 Kubeadm 無法使用本地載入的圖像
我正在嘗試在裸機伺服器(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.io
containerd 的命名空間中,以便 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。