Вопрос или проблема
kubectl version --client
`Client Version: v1.28.1 Customize Version: v5.0.4-0.20230601165947-6ce0bf390ce3`
kubeadm version
`kubeadm version: &version.Info{Major:”1″, Minor:”28″, GitVersion:”v1.28.1″, GitCommit:”8dc49c4b984b897d423aab4971090e1879eb4f23″, GitTreeState:”clean”, BuildDate:”2023-08-24T11 :21:51Z”, GoVersion:”go1.20.7″, Compiler:”gc”, Platform:”linux/amd64″}`
Версии устраняют проблему, описанную в этом блоке:
kubeadm не будет устанавливать или управлять kubelet или kubectl для вас, поэтому вам нужно будет убедиться, что они соответствуют версии контрольной плоскости Kubernetes, которую вы хотите установить с помощью kubeadm. Если вы этого не сделаете, существует риск появления расхождений в версиях, что может привести к неожиданному, багам поведению. Однако допускается одно незначительное расхождение в версии между kubelet и контрольной плоскостью, но версия kubelet никогда не должна превышать версию API-сервера. Например, kubelet с версией 1.7.0 должен быть полностью совместим с API-сервером версии 1.8.0, но не наоборот.
Это было установлено на виртуальной машине proxmox с системой ubuntu server 22.04.3 с минимальной установкой.
К сожалению, k8s не работает без VPN, поэтому на хосте включен VPN, WireGuard. Настроен masquerade в NAT.
Я установил все согласно документации, установил cri-docker, как там написано, запускаю с командой: kubeadm init --v=5 --cri-socket=unix:///var/run/cri-dockerd.sock
При запуске без явно указанного сокета я получаю ошибку, у меня их 2 (containerd и cri-docker), как я понял из инструкций cri-docker, он должен выбираться по умолчанию.
Вывод при использовании cri-dockerd:
[kubelet-check] HTTP запрос равный 'curl -sSL http://localhost:10248/healthz' завершился с ошибкой: Get "http:// localhost:10248/healthz": dial tcp 127.0.0.1:10248: connect: connection refused.
Вывод после kubeadm reset –v=5 –cri-socker=unix:///var/run/cri-dockerd.sock и kubeadm init –v=5 –cri-socket=unix:///var/run/containerd/containerd.sock:
[preflight] Возникли некоторые критические ошибки: [ERROR CRI]: контейнерный runtime не работает: вывод: time="2023-09-07T15:56:59Z" level=fatal msg="validate service connection: validate CRI v1 runtime API for endpoint \"unix:/// var/run/containerd/containerd.sock\": rpc error: code = Unimplemented desc = unknown service runtime.v1.RuntimeService" , error: exit status 1
В чем ошибка и как ее исправить?
В гугле такие же проблемы, но нет ответов
У меня была такая же проблема, и я решил ее, сделав то, что написано в этом руководстве: https://www.jjworld.fr/kubernetes-installation/
Я знаю, что это давняя проблема, но я столкнулся с той же проблемой. Как я ее исправил, я установил Cilium после настройки continerd таким образом:
Настройка runtime containerd.
sudo apt install containerd -y
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
sudo systemctl restart containerd
sudo systemctl enable containerd
установите Cilium (CNI)
CILIUM_CLI_VERSION=$(curl -s https://raw.githubusercontent.com/cilium/cilium-cli/main/stable.txt)
CLI_ARCH=amd64
if [ "$(uname -m)" = "aarch64" ]; then CLI_ARCH=arm64; fi
curl -L --fail --remote-name-all https://github.com/cilium/cilium-cli/releases/download/${CILIUM_CLI_VERSION}/cilium-linux-${CLI_ARCH}.tar.gz{,.sha256sum}
sha256sum --check cilium-linux-${CLI_ARCH}.tar.gz.sha256sum
sudo tar xzvfC cilium-linux-${CLI_ARCH}.tar.gz /usr/local/bin
rm cilium-linux-${CLI_ARCH}.tar.gz{,.sha256sum}
cilium install --version 1.17.1
надеюсь, это поможет вам, это сработало для меня после долгой борьбы! 🙂
Ответ или решение
Проблема, с которой вы столкнулись при инициализации kubeadm
с использованием cri-dockerd
или containerd
, является распространенной в экосистеме Kubernetes. Понимание причин и решений для этих проблем требует тщательного анализа и применения некоторых настроек. В этом ответе мы подробно рассмотрим, как правильно настроить kubeadm
с cri-dockerd
и containerd
на Ubuntu Server 22.04.3.
Теория
Объяснение проблемы начинается с понимания архитектуры Kubernetes и того, как работают его компоненты. Kubernetes использует абстракцию контейнерного движка (Container Runtime Interface, CRI), чтобы взаимодействовать с различными движками контейнеров, такими как containerd
и cri-dockerd
.
-
Containerd: Это современный и широко используемый контейнерный движок, создающий и управляемый Docker инфраструктурой. Однако, сам Docker использует контейнерный движок
containerd
в качестве своей составляющей, поэтомуcontainerd
является вполне самостоятельным решением. -
CRI-DockerD: Это плагин CRI от Kubernetes, позволяющий использовать Docker в качестве контейнерного движка с помощью интерфейса CRI. Несмотря на его нативную поддержку, есть некоторые тонкости в настройке, поскольку прямое использование Docker в Kubernetes больше не считается лучшей практикой из-за его архитектурных особенностей.
Пример
Рассмотрим ваши результаты и проблемы.
-
Ошибка при использовании
cri-dockerd
:[kubelet-check] The HTTP call equal to 'curl -sSL http://localhost:10248/healthz' failed with error: Get "http://localhost:10248/healthz": dial tcp 127.0.0.1:10248: connect: connection refused.
Эта ошибка часто связана с тем, что
kubelet
не может установить соединение с локальным серверомhttp
, из-за чего он не может проверить состояния. Это может быть связано с проблемами в настройках системы или доступе к сети. -
Ошибка с
containerd
:[ERROR CRI]: container runtime is not running: output: time="2023-09-07T15:56:59Z" level=fatal msg="validate service connection...
Эта ошибка указывает на то, что сервис
containerd
не работает должным образом или не может выполнить все необходимые функции CRI.
Применение
Чтобы решить эти проблемы, давайте их разберем и применим необходимые шаги:
Установка и Конфигурация Containerd
-
Установка
containerd
:sudo apt install containerd -y sudo mkdir -p /etc/containerd containerd config default | sudo tee /etc/containerd/config.toml
-
Изменение конфигурации:
Найдите и заменитеSystemdCgroup = false
наSystemdCgroup = true
в файле/etc/containerd/config.toml
. Это гарантирует, что containerd использует cgroups системы, что критично для корректной работы сkubeadm
.sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
-
Запуск и активация
containerd
:sudo systemctl restart containerd sudo systemctl enable containerd
Установка и Настройка CRI-DockerD
-
Доступность CRI-DockerD:
Убедитесь, что cri-dockerd установлен и правильно настроен. Для этого следуйте официальной документации, чтобы убедиться в корректной установке и работоспособностиcri-dockerd
. -
Проверка сокетов:
Проверьте наличие файловых сокетовcri-docker
:ls /var/run/cri-dockerd.sock
-
Проверка правильности установки
kubeadm
:
Запуститеkubeadm init
с указанием CRI-сокета:kubeadm init --v=5 --cri-socket=unix:///var/run/cri-dockerd.sock
Если
cri-docker
корректно работает, то команда должна выполниться успешно.
Настройка CNI (например, Cilium)
Установка Cilium может помочь устранить некоторые сетевые проблемы из-за его гибкости и возможностей:
-
Установка Cilium CLI:
CILIUM_CLI_VERSION=$(curl -s https://raw.githubusercontent.com/cilium/cilium-cli/main/stable.txt) CLI_ARCH=amd64 if [ "$(uname -m)" = "aarch64" ]; then CLI_ARCH=arm64; fi curl -L --fail --remote-name-all https://github.com/cilium/cilium-cli/releases/download/${CILIUM_CLI_VERSION}/cilium-linux-${CLI_ARCH}.tar.gz{,.sha256sum} sha256sum --check cilium-linux-${CLI_ARCH}.tar.gz.sha256sum sudo tar xzvfC cilium-linux-${CLI_ARCH}.tar.gz /usr/local/bin rm cilium-linux-${CLI_ARCH}.tar.gz{,.sha256sum}
-
Установка Cilium:
cilium install --version 1.17.1
Для решений ваших проблем критически важно следовать корректным инструкциям установки и настройки контейнерных двигателей и сетевых интерфейсов CNI. В процессе устранения проблем убедитесь, что все ваши серверы и сервисы запущены, корректно настроены и проверены. Используйте журналирование системных процессов (например, journalctl
) для диагностики возникающих ошибок.