Вопрос или проблема
Я следую руководству, которое немного устарело, но может подойти:
https://phoenixnap.com/kb/kubernetes-almalinux
Инфраструктура будет состоять из главного узла и двух рабочих узлов.
Похоже, главный узел готов:
kubectl get nodes
NAME STATUS ROLES AGE VERSION
kube01 Ready control-plane 1d v1.32.0
на рабочих узлах каждый раз, когда я выполняю:
kubeadm join 10.17.61.133:6443 --token 5rtosf.0sapygtn0g35fx6x --discovery-token-ca-cert-hash sha256:146a38b2fc85239474e4b164eec50cd791eccf38be983574af9b68f367783da2
Я получаю эту ошибку:
I0107 15:00:31.285507 51867 join.go:421] [preflight] found NodeName empty; using OS hostname as NodeName
found multiple CRI endpoints on the host. Please define which one do you wish to use by setting the 'criSocket' field in the kubeadm configuration file: unix:///var/run/containerd/containerd.sock, unix:///var/run/cri-dockerd.sock
k8s.io/kubernetes/cmd/kubeadm/app/util/runtime.detectCRISocketImpl
k8s.io/kubernetes/cmd/kubeadm/app/util/runtime/runtime.go:262
k8s.io/kubernetes/cmd/kubeadm/app/util/runtime.DetectCRISocket
k8s.io/kubernetes/cmd/kubeadm/app/util/runtime/runtime.go:270
k8s.io/kubernetes/cmd/kubeadm/app/util/config.SetNodeRegistrationDynamicDefaults
k8s.io/kubernetes/cmd/kubeadm/app/util/config/initconfiguration.go:119
k8s.io/kubernetes/cmd/kubeadm/app/util/config.SetJoinDynamicDefaults
k8s.io/kubernetes/cmd/kubeadm/app/util/config/joinconfiguration.go:42
k8s.io/kubernetes/cmd/kubeadm/app/util/config.DefaultedJoinConfiguration
k8s.io/kubernetes/cmd/kubeadm/app/util/config/joinconfiguration.go:158
k8s.io/kubernetes/cmd/kubeadm/app/util/config.LoadOrDefaultJoinConfiguration
k8s.io/kubernetes/cmd/kubeadm/app/util/config/joinconfiguration.go:73
k8s.io/kubernetes/cmd/kubeadm/app/cmd.newJoinData
k8s.io/kubernetes/cmd/kubeadm/app/cmd/join.go:438
k8s.io/kubernetes/cmd/kubeadm/app/cmd.newCmdJoin.func2
k8s.io/kubernetes/cmd/kubeadm/app/cmd/join.go:237
k8s.io/kubernetes/cmd/kubeadm/app/cmd/phases/workflow.(*Runner).InitData
k8s.io/kubernetes/cmd/kubeadm/app/cmd/phases/workflow/runner.go:185
k8s.io/kubernetes/cmd/kubeadm/app/cmd.newCmdJoin.func1
k8s.io/kubernetes/cmd/kubeadm/app/cmd/join.go:175
github.com/spf13/cobra.(*Command).execute
github.com/spf13/[email protected]/command.go:985
github.com/spf13/cobra.(*Command).ExecuteC
github.com/spf13/[email protected]/command.go:1117
github.com/spf13/cobra.(*Command).Execute
github.com/spf13/[email protected]/command.go:1041
k8s.io/kubernetes/cmd/kubeadm/app.Run
k8s.io/kubernetes/cmd/kubeadm/app/kubeadm.go:47
main.main
k8s.io/kubernetes/cmd/kubeadm/kubeadm.go:25
runtime.main
runtime/proc.go:272
runtime.goexit
runtime/asm_amd64.s:1700
Я попытался начать с нуля, а также следовать рекомендациям, предложенным в этом ответе:
https://stackoverflow.com/questions/57868351/kubespray-fails-with-found-multiple-cri-sockets-please-use-cri-socket-to-sel но продолжаю получать сообщение при подключении узлов.
Ответ или решение
Для решения проблемы с ошибкой "found multiple CRI endpoints on the host" при настройке лабораторной среды Kubernetes, следует выполнить ряд шагов для корректного указания используемого интерфейса CRI. Данная проблема возникает, когда на узле присутствуют несколько сокетов интерфейса CRI, что затрудняет автоматическое определение подходящего интерфейса для kubeadm.
Шаги для устранения ошибки:
-
Определение наличия и типов CRI:
Обычно ошибка указывает на наличие нескольких сокетов для CRI, таких какcontainerd
иcri-dockerd
. Начните с проверки доступных CRI сокетов на узле:ls /var/run/ | grep sock
Обратите внимание на результаты, которые могут включать
containerd.sock
иcri-dockerd.sock
. -
Редактирование конфигурационного файла kubeadm:
Создайте или отредактируйте существующий конфигурационный файл kubeadm. Обычно, конфигурация сохраняется в файле с расширением.yaml
, напримерkubeadm-config.yaml
.Пример конфигурации, которая указывает на использование
containerd
:kind: JoinConfiguration apiVersion: kubeadm.k8s.io/v1beta2 nodeRegistration: criSocket: /var/run/containerd/containerd.sock
-
Команда для добавления worker узлов c конфигурационным файлом:
После составления конфигурационного файла, выполните командуkubeadm join
, указав путь к вашему конфигурационному файлу:kubeadm join 10.17.61.133:6443 --config kubeadm-config.yaml
-
Проверка успешности присоединения:
Убедитесь в успешном подключении worker узлов через команду:kubectl get nodes
Статусы узлов должны отображаться как
Ready
, что свидетельствует об успешном подключении к кластеру. -
Обновление документации и знаний:
Поскольку вы следовали устаревшему руководству, рекомендуется освежить знания, обратившись к актуальной документации Kubernetes и последним публикациям, чтобы оставаться в курсе последних изменений и рекомендаций. Это позволит избежать подобных проблем в будущем.
Вывод:
Настройка Kubernetes может включать неожиданные сложности, такие как конфликт между несколькими CRI интерфейсами. Однако, используя правильную конфигурацию и тщательно следуя процессу, можно решить эту проблему. Убедитесь, что все настройки и пакеты соответствуют актуальным версиям, чтобы минимизировать вероятность сбоев и повысить стабильность работы вашего кластера.