Решение проблемы “Найдено несколько CRI-эндпоинтов на хосте”?

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

(Извините, если это глупый вопрос…)

chuck@k8smaster:~$ sudo systemctl status crio
● crio.service - Интерфейс времени выполнения контейнеров для OCI (CRI-O)
     Загрузено: загружено (/lib/systemd/system/crio.service; включено; предустановленный параметр: включено)
     Активно: активно (работает) с пятницы 2022-12-16 15:36:06 UTC; 28 минут назад
       Документы: https://github.com/cri-o/cri-o
   Основной PID: 955 (crio)
      Задачи: 25
     Память: 59.1M
        CPU: 563ms
     CGroup: /system.slice/crio.service
             └─955 /usr/bin/crio
chuck@k8smaster:~$ sudo kubeadm init --pod-network-cidr=192.168.2.0/16
Обнаружены несколько конечных точек CRI на хосте. Пожалуйста, укажите, какую из них вы хотите использовать, установив поле 'criSocket' в файле конфигурации kubeadm: unix:///var/run/containerd/containerd.sock, unix:///var/run/crio/crio.sock
Чтобы увидеть стек вызовов этой ошибки, выполните с --v=5 или выше
chuck@k8smaster:~$ sudo kubeadm init --pod-network-cidr=192.168.2.0/16 --v=5
Обнаружены несколько конечных точек CRI на хосте. Пожалуйста, укажите, какую из них вы хотите использовать, установив поле 'criSocket' в файле конфигурации kubeadm: unix:///var/run/containerd/containerd.sock, unix:///var/run/crio/crio.sock
k8s.io/kubernetes/cmd/kubeadm/app/util/runtime.detectCRISocketImpl
    cmd/kubeadm/app/util/runtime/runtime.go:166
k8s.io/kubernetes/cmd/kubeadm/app/util/runtime.DetectCRISocket
    cmd/kubeadm/app/util/runtime/runtime.go:174
k8s.io/kubernetes/cmd/kubeadm/app/util/config.SetNodeRegistrationDynamicDefaults
    cmd/kubeadm/app/util/config/initconfiguration.go:112
k8s.io/kubernetes/cmd/kubeadm/app/util/config.SetInitDynamicDefaults
    cmd/kubeadm/app/util/config/initconfiguration.go:63
k8s.io/kubernetes/cmd/kubeadm/app/util/config.DefaultedInitConfiguration
    cmd/kubeadm/app/util/config/initconfiguration.go:242
k8s.io/kubernetes/cmd/kubeadm/app/util/config.LoadOrDefaultInitConfiguration
    cmd/kubeadm/app/util/config/initconfiguration.go:276
k8s.io/kubernetes/cmd/kubeadm/app/cmd.newInitData
    cmd/kubeadm/app/cmd/init.go:300
k8s.io/kubernetes/cmd/kubeadm/app/cmd.newCmdInit.func3
    cmd/kubeadm/app/cmd/init.go:153
k8s.io/kubernetes/cmd/kubeadm/app/cmd/phases/workflow.(*Runner).InitData
    cmd/kubeadm/app/cmd/phases/workflow/runner.go:183
k8s.io/kubernetes/cmd/kubeadm/app/cmd.newCmdInit.func1
    cmd/kubeadm/app/cmd/init.go:104
github.com/spf13/cobra.(*Command).execute
    vendor/github.com/spf13/cobra/command.go:916
github.com/spf13/cobra.(*Command).ExecuteC
    vendor/github.com/spf13/cobra/command.go:1040
github.com/spf13/cobra.(*Command).Execute
    vendor/github.com/spf13/cobra/command.go:968
k8s.io/kubernetes/cmd/kubeadm/app.Run
    cmd/kubeadm/app/kubeadm.go:50
main.main
    cmd/kubeadm/kubeadm.go:25
runtime.main
    /usr/local/go/src/runtime/proc.go:250
runtime.goexit
    /usr/local/go/src/runtime/asm_amd64.s:1594
chuck@k8smaster:~$ sudo kubeadm init --pod-network-cidr=192.168.2.0/16 --cri-socket=unix:///var/run/cri-dockerd.sock
[sudo] пароль для chuck: 
[init] Используя версию Kubernetes: v1.26.0
[preflight] Проведение проверок перед запуском
Ошибка выполнения этапа проверки перед запуском: [preflight] Произошли некоторые фатальные ошибки:
    [ERROR CRI]: время выполнения контейнера не запущено: вывод: time="2022-12-16T16:25:36Z" level=fatal msg="невозможно определить версию API времени выполнения: ошибка rpc: код = Unavailable desc = ошибка подключения: desc = \"transport: Ошибка при наборе номера набора unix /var/run/cri-dockerd.sock: подключение: нет такого файла или каталога\""
, ошибка: статус выхода 1
[preflight] Если вы знаете, что делаете, вы можете сделать проверку не фатальной с `--ignore-preflight-errors=...`
Чтобы увидеть стек вызовов этой ошибки, выполните с --v=5 или выше
chuck@k8smaster:~$ sudo kubeadm init --pod-network-cidr=192.168.2.0/16
Обнаружены несколько конечных точек CRI на хосте. Пожалуйста, укажите, какую из них вы хотите использовать, установив поле 'criSocket' в файле конфигурации kubeadm: unix:///var/run/containerd/containerd.sock, unix:///var/run/crio/crio.sock
Чтобы увидеть стек вызовов этой ошибки, выполните с --v=5 или выше

Эта ошибка указывает на то, что у вас установлены как containerd, так и CRI в качестве времени выполнения, но вы можете использовать только одно. Если вы хотите использовать CRI, удалите containerd.

 apt-get purge containerd

Ответ или решение

Решение проблемы с сообщением "Found multiple CRI endpoints on the host"

Ошибка "Found multiple CRI endpoints on the host" возникает, когда на хосте найдено несколько конечных точек (endpoints) для интерфейса контейнерного времени выполнения (Container Runtime Interface, CRI), что заставляет kubeadm не определять, какой из них использовать для развертывания кластера Kubernetes. В данной ситуации на вашем хосте одновременно установлены containerd и CRI-O, и Kubernetes не может выбрать, какое из этих решений использовать.

Шаги для решения проблемы

Чтобы исправить эту ошибку, вам нужно выбрать одно решение контейнерного времени выполнения и отключить второе. Вот несколько шагов, которые помогут вам сделать это:

  1. Проверка установленных контейнерных решений:
    Убедитесь, какие именно решения контейнерного времени выполнения установлены на вашем хосте. Вы можете использовать следующие команды:

    sudo systemctl status crio
    sudo systemctl status containerd
  2. Выбор контейнерного времени выполнения:
    Примите решение, какое контейнерное время выполнения вы хотите использовать:

    • Если вы хотите использовать CRI-O:
      В этом случае вам необходимо удалить containerd, который устанавливает конфликт.

      sudo apt-get purge containerd
    • Если вы хотите использовать containerd:
      Тогда вам нужно остановить и отключить CRI-O:

      sudo systemctl stop crio
      sudo systemctl disable crio
  3. Настройка kubeadm для использования выбранного решения:
    После того, как вы выбрали одно контейнерное время выполнения, вам необходимо указать это подключение в конфигурационном файле kubeadm. Это можно сделать следующим образом:

    • Создайте YAML-файл конфигурации. Например, kubeadm-config.yaml:
      apiVersion: kubeadm.k8s.io/v1beta2
      kind: InitConfiguration
      localAPIEndpoint:
      advertiseAddress: "YOUR_NODE_IP"
      bindPort: 6443
      ---
      apiVersion: kubeadm.k8s.io/v1beta2
      kind: ClusterConfiguration
      networking:
      podSubnet: "192.168.2.0/16"
      criSocket: "unix:///var/run/crio/crio.sock" # или "unix:///var/run/containerd/containerd.sock"
  4. Запуск инициализации Kubernetes:
    После настройки конфигурационного файла и выбора нужного контейнерного времени выполнения попробуйте снова инициализировать кластер с помощью:

    sudo kubeadm init --config=kubeadm-config.yaml
  5. Проверка status:
    После успешной инициализации проверьте статус (status) вашего кластера:

    kubectl get nodes

Заключение

Следуя этим шагам, вы сможете устранить конфликт между containerd и CRI-O, а также правильно настроить ваше решение контейнерного времени выполнения для работы с Kubernetes. Помните, что правильная конфигурация критична для успешного развертывания и управления кластером Kubernetes. При необходимости вы можете всегда обращаться к официальной документации Kubernetes для получения более детальной информации и поддержки.

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

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