Установка k8s на кластер из Debian 11
Доброго времени суток.
Данный блог пишется неизвестно зачем, но может кому-то он пригодится.
Исходные данные: имеется несколько компьютеров со свежеустановленным Debian 11 и следующая статья
Тут сразу надо сказать что основная проблема таких установок это свежесть статей их описывающих. До этого была испробована статья 2020 года и ничего не получилось. Одна из причин - использование dockershim, от которого в k8s отказались начиная с версии 1.24. Подробнее можно узнать здесь:
Ну чтож, начнём пожалуй.
Первые шаги установки, в статье, описаны достаточно правильно. Сначала нужно установить containerd. Выполняем следующие команды на всех нодах, включая будущего мастера:
После установки настраиваем конфигурационный файл
Указываем cgroupdriver для systemd. Для этого открываем конфигурационный файл:
В файле находим строчку: [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
Сразу под ней нам нужно будет добавить строку
SystemdCgroup = true
То есть в итоге у нас должно получится так:
Далее нам нужно перезапустить containerd и проверить что он запустился:
Вывод должен выглядеть вот так:
Далее устанавливаем сам k8s. Эти действия надо воспроизвести на всех нодах.
Устанавливаем curl и добавляем ключ Kubernetes
Добавляем репозиторий
Устанавливаем модули Kubernetes
Далее на всех нодах нам нужно добавить одинаковые имена хостов, чтоб они могли видеть друг-друга по имени. В статье автор предлагает много танцев с бубном. Мой способ это скопировать в буфер информацию с IP и именами хостов и потом вручную по ssh добавить их в файл hosts на каждой ноде.
Добавляем в любое место в файле hosts что-то типа с вашими IP:
Дальше автор предлагает сконфигурировать файерволл, но в Debian, по умолчанию, не установлен ufw. Зато при установке модулей Kubernetes, все нужные правила прописываются в iptables и устанавливать ufw нужно только в случае если вам нужна высокая степень безопасности. Мой кластер был развёрнут в отдельном сегменте сети под защитой корпоративного файерволла, так что для меня и, возможно, для вас, шаг с настройкой ufw будет лишним. Проверить правила iptables можно следующим образом:
Выключаем swap
На всех нодах запускаем службу kubelet:
Далее автор статьи предлагает нам инициализировать кластер и тут нас поджидает засада.
Дело в том, что дальше по статье автор предлагает развёртывать сеть pods при помощи Flannel. НО. При дальнейшей инициализации нод выдаётся ошибка. Дело в том что Flannel рассчитан на подсеть 10.244.0.0/16, поэтому инициализировать кластер надо следующей командой:
Эта подсеть прописана в kube-flannel.yml и в сети есть много описаний как настроить другую подсеть. Но буду честен: меня 10.244.0.0/16 вполне устраивает, так что копать дальше у меня не было необходимости.
После инициализации кластера будет вывод типа этого:
Нас тут интересует 2 вещи. Первая это создание конфигурационного файла. Для этого копируем из вывода и выполняем следующие команды:
Прошу обратить внимание на ремарку если вы производите установку под пользователем root
И конечно же нас интересует команда для добавления pod в кластер:
Тут нужно добавить что добавление нодов у меня получилось только через sudo. То есть:
Если вы не успели или забыли сохранить команду добавления в кластер, то её можно получить следующим образом:
Начинаем разворачивать сеть наших pods. Для этого применяем kube-flannel.yml
Вывод должен быть типа такого:
Далее проверяем ноды. У автора данная команда выполняется с sudo, но у меня получилось только от имени пользователя:
Вывод должен быть типа такого:
Добавляем ноды в кластер. На каждой ноде выполняем:
Вывод команды должен быть типа такого:
Далее проверяем добавилась нода в кластер или нет и на мастере запускаем команду:
Вывод должен быть таким:
Как мы видим у worker-node нет роли. Роль worker можно присвоить следующей командой:
И тогда вывод команды kubectl get nodes будет следующим:
Повторяем действия по добавлению нодов на каждом из них. Также, состояние всех работающих нодов можно проверить командой:
Вывод будет примерно таким: