Пришла пора заняться установкой и настройкой собственного 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
Установка 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
Обратите внимание: отступы должны соблюдаться обязательно!
Инициализация кластера
Итак, теперь, когда всё готово, клонируйте настроенную ВМ 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-адрес мастера.
Об успешной инициализации сообщит соответствующий вывод:
Теперь нам необходимо запустить рекомендуемые команды:
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
Запуск приложений
Чтобы развернуть приложение в кластере, достаточно использовать команду:
kubectl run <приложение>
Удаление приложений
Для удаления необходимо указать pod:
kubectl delete pod nginx
Вместо заключения
Для желающих "пощупать" кубер и не вдаваться в тонкости его администрирования (например, для разработчиков) поможет Minikube. Он позволяет достаточно легко и быстро развернуть кластер на одной машине. Разумеется, этот инструмент не для продакшена, поэтому рассматривать его установку я не буду.
---
Спасибо, что дочитали материал до конца, надеюсь, он оказался для вас полезным. Поставьте лайк и подпишитесь на канал, чтобы видеть в ленте выход новых статей по K8s и DevOps. Всем добра!)
Все статьи цикла по kubernetes:
Поддержать материально:
- Сбербанк: 2202 2013 5155 5152
- Тинькофф: 2200 7008 1567 2323