Вопрос или проблема
(Извините, если это глупый вопрос…)
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 не может выбрать, какое из этих решений использовать.
Шаги для решения проблемы
Чтобы исправить эту ошибку, вам нужно выбрать одно решение контейнерного времени выполнения и отключить второе. Вот несколько шагов, которые помогут вам сделать это:
-
Проверка установленных контейнерных решений:
Убедитесь, какие именно решения контейнерного времени выполнения установлены на вашем хосте. Вы можете использовать следующие команды:sudo systemctl status crio sudo systemctl status containerd
-
Выбор контейнерного времени выполнения:
Примите решение, какое контейнерное время выполнения вы хотите использовать:-
Если вы хотите использовать
CRI-O
:
В этом случае вам необходимо удалитьcontainerd
, который устанавливает конфликт.sudo apt-get purge containerd
-
Если вы хотите использовать
containerd
:
Тогда вам нужно остановить и отключитьCRI-O
:sudo systemctl stop crio sudo systemctl disable crio
-
-
Настройка 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"
- Создайте YAML-файл конфигурации. Например,
-
Запуск инициализации Kubernetes:
После настройки конфигурационного файла и выбора нужного контейнерного времени выполнения попробуйте снова инициализировать кластер с помощью:sudo kubeadm init --config=kubeadm-config.yaml
-
Проверка status:
После успешной инициализации проверьте статус (status) вашего кластера:kubectl get nodes
Заключение
Следуя этим шагам, вы сможете устранить конфликт между containerd
и CRI-O
, а также правильно настроить ваше решение контейнерного времени выполнения для работы с Kubernetes. Помните, что правильная конфигурация критична для успешного развертывания и управления кластером Kubernetes. При необходимости вы можете всегда обращаться к официальной документации Kubernetes для получения более детальной информации и поддержки.