我正在尝试在裸机服务器(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 中运行良好。
要手动拉取图像,请执行以下操作:
在 Kubernetes 文档中还有一个部分用于在没有 Internet 连接的情况下运行 kubeadm。
事实证明,我必须将图像加载到
k8s.io
containerd 的命名空间中,以便 Kubernetes 能够识别它们。我将图像导入错误的命名空间(默认)。加载 Kubernetes 需要的所有镜像后,kubeadm init 运行良好,无需执行
kubeadm config images pull
. Kubernetes 可以使用的镜像显示在ctr -n k8s.io images ls
或中crictl images
。