Estou tentando construir kubernetes com containerd no servidor bare-metal (RHEL8).
Não há conexão com a Internet, então baixei manualmente as imagens necessárias (por exemplo, k8s.gcr.io/kube-scheduler:v1.22.1) e as carreguei usando "ctr image import".
As imagens parecem ter sido carregadas com sucesso.
#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
Então eu executei "kubeadm init", mas falhou com erros 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:
Como posso permitir que o kubeadm use imagens locais? Ou não há problema em ignorar esses erros de comprovação?
Editar: Este procedimento (carregar manualmente as imagens em vez de executar a extração das imagens de configuração do kubeadm) funcionou bem com o docker e o CentOS7.
Para puxar manualmente as imagens, execute o seguinte:
Há também uma seção para executar o kubeadm sem uma conexão com a Internet nos documentos do Kubernetes.
Acontece que eu tive que carregar imagens no
k8s.io
namespace do containerd para que o Kubernetes pudesse reconhecê-las. Eu estava importando as imagens para o namespace errado (padrão).Depois de carregar todas as imagens que o Kubernetes precisa, o kubeadm init funcionou bem sem executar
kubeadm config images pull
. As imagens que o Kubernetes pode usar são mostradas emctr -n k8s.io images ls
oucrictl images
.