Найти тему
Эникей на передержке

Кубер для самых маленьких, ч. 4 | Установка и настройка кластера

Оглавление

Пришла пора заняться установкой и настройкой собственного k8s кластера, учитывая, что это не так сложно, как может показаться. Всё что нам понадобится - ЦП с поддержкой виртуализации, Windows, Linux или MacOS.

Некоторые термины, используемые в этой части, могут быть для вас незнакомы. Пожалуйста, не пугайтесь, их значения будут разобраны в следующих частях.

Если вы не знаете что такое кластер и чем отличается мастер-нода от рабочей ноды, настоятельно рекомендую ознакомиться с предыдущей частью цикла:

Настройка гипервизора

Если у вас нет своего сервера, рекомендую установить и настроить гипервизор на собственном ПК.

Windows

Для Windows 10/11 Pro будет проще всего воспользоваться Hyper-V. Для его установки запустите PowerShell от имени Администратора и выполните следующую команду:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All

После завершения процесса установки, перезагрузите ваш ПК.

Для создания виртуальной машины используйте инструкции из раздела "Создание первой виртуальной машины" в следующей статье:

Linux

Если вы используете Linux, скорее всего, вы продвинутый пользователь и сможете самостоятельно установить и разобраться с такими инструментами как Boxes или VirtualBox.

MacOS

Пользователям MacOS будет проще воспользоваться VirtualBox.

VirtualBox очень популярный инструмент с интуитивно понятным интерфейсом. Я не буду рассматривать его установку и настройку, т.к. интернет уже переполнен подобными инструкциями.
Если у вас что-то не получится при установке или настройке - сообщите об этом в комментариях, приложив скриншот, я постараюсь помочь.

Рекомендуемые требования к ВМ

  • ОС: Debian (мой выбор), RHEL и др.
  • 2 ГБ ОЗУ (или больше).
  • ЦП с 2 вычислительными ядрами (или больше).
  • Должен быть отключен swap.
  • ВМ должны "видеть" друг друга в сети и иметь открытый порт 6443.
  • Полный список требований доступен здесь.

Настройка виртуальных машин

Для тестовой среды нам достаточно 3 машины: одна будет master, две оставшихся - worker. Для удобства я настрою сначала одну виртуальную машину, а затем просто клонирую её.

Внимание! При установке ОС не создавайте раздел подкачки. Если вы уже развернули ВМ, отключите подкачку, следуя инструкциям ниже:

Отключение подкачки

Для отключения swap выполните команду:

sudo swapoff -a

Затем закомментируйте раздел подкачки в файле /etc/fstab:

Строка с разделом подкачки закомментирована
Строка с разделом подкачки закомментирована

Настройка сети

Активируем IPv4 forwarding и загрузим необходимые модули ядра согласно требованиям официальной документации:

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
sudo sysctl --system

Убедимся, что параметры применены:

lsmod | grep br_netfilter
lsmod | grep overlay
sysctl net.bridge.bridge-nf-call-iptables net.bridge.bridge-nf-call-ip6tables net.ipv4.ip_forward
Вывод должен соответствовать изображению
Вывод должен соответствовать изображению

Установка containerd

СontainerD представляет собой среду выполнения контейнера в составе Docker. Более подробно я расскажу об этом инструменте в следующих публикациях, а пока что подключим репозиторий Docker и установим containerd:

sudo apt update
sudo apt install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install containerd.io

Для проверки корректной установки и запуска containerd используйте команду:

systemctl status containerd
Служба containerd активна
Служба containerd активна

Установка kubeadm, kubelet и kubectl

Kubeadm поможет нам в установке и настройке kubernetes а kubectl обеспечит взаимодействие с кластером.

Подключаем репозиторий k8s:

sudo apt update
sudo apt install -y apt-transport-https ca-certificates curl gpg
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt update
sudo apt install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

*в дистрибутивах старше Debian12 и Ubuntu 22.04 может появляться ошибка, связанная с отсутствием файла '/etc/apt/keyrings'. Для её исправления создайте файл вручную:

sudo mkdir -m 755 /etc/apt/keyrings

Приведите конфигурационный файл /etc/containerd/config.toml к следующему виду:

version = 2

[grpc]
address = "/run/containerd/containerd.sock"
uid = 0
gid = 0

[plugins]
[plugins."io.containerd.grpc.v1.cri"]
sandbox_image = "registry.k8s.io/pause:3.9"
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
runtime_type = "io.containerd.runc.v2"
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true

Обратите внимание: отступы должны соблюдаться обязательно!

Содержимое /etc/containerd/config.toml
Содержимое /etc/containerd/config.toml

Инициализация кластера

Итак, теперь, когда всё готово, клонируйте настроенную ВМ 2 раза, чтобы получить в общем счёте три виртуальные машины.

Настройка Master node

Запустите команду ниже только на узле управления:

kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.122.142
  • pod-network-cidr - подсеть, используемая внутри кластера
  • apiserver-advertise-address - ip-адрес мастера.

Об успешной инициализации сообщит соответствующий вывод:

Your Kubernetes control-plane has initialized successfully!
Your Kubernetes control-plane has initialized successfully!

Теперь нам необходимо запустить рекомендуемые команды:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

*выполняйте эти команды от имени вашего пользователя (не root)

Настройка сети кластера

Прежде чем объединить узлы в кластер, настроим сеть. Для этого нам понадобится установить дополнение Weave Net:

kubectl apply -f https://github.com/weaveworks/weave/releases/download/v2.8.1/weave-daemonset-k8s.yaml

Чтобы проверить правильность установки, используйте команду 'kubectl get pods -A':

Краткая информация о подах
Краткая информация о подах

Зададим явно используемую подсеть с помощью переменной IPALLOC_RANG в контейнере weave:

export KUBE_EDITOR="nano"
kubectl edit ds weave-net -n kube-system
При редактировании соблюдайте отступы
При редактировании соблюдайте отступы

Настройка Worker node

Пришла пора добавить воркеры в кластер. Для этого необходимо скопировать команду, сгенерированную на этапе настройки мастера:

Команда состоит из двух строк
Команда состоит из двух строк

Выполните скопированную команду на воркерах, чтобы добавить их в кластер:

Нода присоединилась к кластеру
Нода присоединилась к кластеру

Чтобы проверить статус добавленных узлов, выведите список нод на мастере:

Список узлов
Список узлов

Новым узлам пока ещё не задана роль. Давайте исправим это:

kubectl label node k8s-worker1 node-role.kubernetes.io/worker=worker
kubectl label node k8s-worker2 node-role.kubernetes.io/worker=worker
Рабочим нодам задана соответствующая роль
Рабочим нодам задана соответствующая роль

Kubectl

Kubectl (kube control) представляет собой утилиту командной строки, которая используется для получения информации о кластере и управления им. Ниже я кратко рассмотрю несколько вариантов её использования, чтобы у вас сформировалось некоторое представление об этом инструменте.

Список нод

Команда для вывода списка узлов, входящих в состав кластера, уже использовалась нами:

kubectl get nodes

Информация о кластере

Получить информацию о кластере поможет команда:

kubectl cluster-info
Вывод информации о кластере k8s
Вывод информации о кластере k8s

Запуск приложений

Чтобы развернуть приложение в кластере, достаточно использовать команду:

kubectl run <приложение>
Запуск nginx из образа nginx
Запуск nginx из образа nginx

Удаление приложений

Для удаления необходимо указать pod:

kubectl delete pod nginx
Удаление nginx
Удаление nginx

Вместо заключения

Для желающих "пощупать" кубер и не вдаваться в тонкости его администрирования (например, для разработчиков) поможет Minikube. Он позволяет достаточно легко и быстро развернуть кластер на одной машине. Разумеется, этот инструмент не для продакшена, поэтому рассматривать его установку я не буду.

---

Спасибо, что дочитали материал до конца, надеюсь, он оказался для вас полезным. Поставьте лайк и подпишитесь на канал, чтобы видеть в ленте выход новых статей по K8s и DevOps. Всем добра!)

Все статьи цикла по kubernetes:

Kubernetes для самых маленьких | Эникей на передержке | Дзен

Поддержать материально:

-16