Настраивая лабораторную среду Kubernetes, я постоянно получаю ошибку: найдено несколько конечных точек CRI на хосте.

Вопрос или проблема

Я следую руководству, которое немного устарело, но может подойти:
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.

Шаги для устранения ошибки:

  1. Определение наличия и типов CRI:
    Обычно ошибка указывает на наличие нескольких сокетов для CRI, таких как containerd и cri-dockerd. Начните с проверки доступных CRI сокетов на узле:

    ls /var/run/ | grep sock

    Обратите внимание на результаты, которые могут включать containerd.sock и cri-dockerd.sock.

  2. Редактирование конфигурационного файла kubeadm:
    Создайте или отредактируйте существующий конфигурационный файл kubeadm. Обычно, конфигурация сохраняется в файле с расширением .yaml, например kubeadm-config.yaml.

    Пример конфигурации, которая указывает на использование containerd:

    kind: JoinConfiguration
    apiVersion: kubeadm.k8s.io/v1beta2
    nodeRegistration:
     criSocket: /var/run/containerd/containerd.sock
  3. Команда для добавления worker узлов c конфигурационным файлом:
    После составления конфигурационного файла, выполните команду kubeadm join, указав путь к вашему конфигурационному файлу:

    kubeadm join 10.17.61.133:6443 --config kubeadm-config.yaml
  4. Проверка успешности присоединения:
    Убедитесь в успешном подключении worker узлов через команду:

    kubectl get nodes

    Статусы узлов должны отображаться как Ready, что свидетельствует об успешном подключении к кластеру.

  5. Обновление документации и знаний:
    Поскольку вы следовали устаревшему руководству, рекомендуется освежить знания, обратившись к актуальной документации Kubernetes и последним публикациям, чтобы оставаться в курсе последних изменений и рекомендаций. Это позволит избежать подобных проблем в будущем.

Вывод:

Настройка Kubernetes может включать неожиданные сложности, такие как конфликт между несколькими CRI интерфейсами. Однако, используя правильную конфигурацию и тщательно следуя процессу, можно решить эту проблему. Убедитесь, что все настройки и пакеты соответствуют актуальным версиям, чтобы минимизировать вероятность сбоев и повысить стабильность работы вашего кластера.

Оцените материал
Добавить комментарий

Капча загружается...