Как мне инициализировать kubeadm на containerd или cri-docker?

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

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.

  1. Containerd: Это современный и широко используемый контейнерный движок, создающий и управляемый Docker инфраструктурой. Однако, сам Docker использует контейнерный движок containerd в качестве своей составляющей, поэтому containerd является вполне самостоятельным решением.

  2. CRI-DockerD: Это плагин CRI от Kubernetes, позволяющий использовать Docker в качестве контейнерного движка с помощью интерфейса CRI. Несмотря на его нативную поддержку, есть некоторые тонкости в настройке, поскольку прямое использование Docker в Kubernetes больше не считается лучшей практикой из-за его архитектурных особенностей.

Пример

Рассмотрим ваши результаты и проблемы.

  1. Ошибка при использовании 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, из-за чего он не может проверить состояния. Это может быть связано с проблемами в настройках системы или доступе к сети.

  2. Ошибка с containerd:

    [ERROR CRI]: container runtime is not running: output: time="2023-09-07T15:56:59Z" level=fatal msg="validate service connection...

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

Применение

Чтобы решить эти проблемы, давайте их разберем и применим необходимые шаги:

Установка и Конфигурация Containerd

  1. Установка containerd:

    sudo apt install containerd -y
    sudo mkdir -p /etc/containerd
    containerd config default | sudo tee /etc/containerd/config.toml
  2. Изменение конфигурации:
    Найдите и замените SystemdCgroup = false на SystemdCgroup = true в файле /etc/containerd/config.toml. Это гарантирует, что containerd использует cgroups системы, что критично для корректной работы с kubeadm.

    sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
  3. Запуск и активация containerd:

    sudo systemctl restart containerd
    sudo systemctl enable containerd

Установка и Настройка CRI-DockerD

  1. Доступность CRI-DockerD:
    Убедитесь, что cri-dockerd установлен и правильно настроен. Для этого следуйте официальной документации, чтобы убедиться в корректной установке и работоспособности cri-dockerd.

  2. Проверка сокетов:
    Проверьте наличие файловых сокетов cri-docker:

    ls /var/run/cri-dockerd.sock
  3. Проверка правильности установки kubeadm:
    Запустите kubeadm init с указанием CRI-сокета:

    kubeadm init --v=5 --cri-socket=unix:///var/run/cri-dockerd.sock

    Если cri-docker корректно работает, то команда должна выполниться успешно.

Настройка CNI (например, Cilium)

Установка Cilium может помочь устранить некоторые сетевые проблемы из-за его гибкости и возможностей:

  1. Установка 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}
  2. Установка Cilium:

    cilium install --version 1.17.1

Для решений ваших проблем критически важно следовать корректным инструкциям установки и настройки контейнерных двигателей и сетевых интерфейсов CNI. В процессе устранения проблем убедитесь, что все ваши серверы и сервисы запущены, корректно настроены и проверены. Используйте журналирование системных процессов (например, journalctl) для диагностики возникающих ошибок.

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

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