Как установить кластер Kubernetes в Debian 12
Пошаговое руководство на этой странице объяснит вам, как установить кластер Kubernetes в Debian 12/11 с помощью утилиты Kubeadm.
Предварительные условия
- Минимальная установка Debian 12
- 2 ЦП/виртуальных ЦП
- 2 ГБ ОЗУ
- 20 ГБ свободного места на диске
- Пользователь Sudo с правами администратора
- Стабильное подключение к Интернету
- Убедитесь, что каждый узел может обмениваться данными с другими через надежное сетевое соединение.
Настройка лаборатории
Для демонстрации я использую три системы Debian 12.
- Мастер-нода (k8s-master) – 192.168.3.10
- Рабочий узел 1 (k8s-worker01) — 192.168.3.11
- Рабочий узел 2 (k8s-worker02) — 192.168.3.12
Без дальнейших задержек давайте перейдем к этапам установки Kubernetes Cluster.
1) Установите имя хоста и обновите файл хостов.
Войдите на каждую ноду (master нода и worker ноды) и установите имя хоста с помощью команды hostnamectl.
$ sudo hostnamectl set-hostname "k8s-master.linuxhint.ru" // Run on master node
$ sudo hostnamectl set-hostname "k8s-worker01.linuxhint.ru" // Run on 1st worker node
$ sudo hostnamectl set-hostname "k8s-worker02.linuxhint.ru" // Run on 2nd worker node
Также добавьте следующие записи в файл /etc/hosts на всех нодах:
192.168.3.10 k8s-master.linuxhint.ru k8s-master
192.168.3.11 k8s-worker01.linuxhint.ru k8s-worker01
192.168.3.12 k8s-worker02.linuxhint.ru k8s-worker02
2) Отключить своп на всех узлах
Для бесперебойной работы kubelet рекомендуется отключить swap. Выполните следующие команды на главном и рабочих нодах.
$ sudo swapoff -a $ sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
3) Установите пакеты curl и gpg.
$ apt install curl gpg -y
4) Установите Containerd Runtime на все узлы.
Containerd — это стандартная среда выполнения контейнеров, поддерживаемая Kubernetes. Итак, установите Containerd на все главные и рабочие ноды.
Перед установкой контейнера установите следующие параметры ядра на всех нодах.
$ cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF
$ sudo modprobe overlay
$ sudo modprobe br_netfilter
$ cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF
Чтобы изменения вступили в силу, запустите
$ sudo sysctl --system
Теперь установите conatinerd, выполнив следующую команду apt на всех нодах.
$ sudo apt update
$ sudo apt -y install containerd
Затем настройте контейнер, чтобы он работал с Kubernetes, запустите команду на всех нодах.
$ containerd config default | sudo tee /etc/containerd/config.toml >/dev/null 2>&1
Установите для cgroup driver значение systemd на все ноды.
Отредактируйте файл « /etc/containerd/config.toml » и найдите раздел « [plugins».io.containerd.grpc.v1.cri».containerd.runtimes.runc.options] и измените « SystemdCgroup = false» на ‘SystemdCgroup = true ‘
$ sudo vi /etc/containerd/config.toml

Сохраните и выйдите из файла.
Перезапустите и включите службу Containerd на всех узлах
$ sudo systemctl restart containerd
$ sudo systemctl enable containerd
5) Добавьте репозиторий Kubernetes Apt.
В Debian 12 пакеты, связанные с Kubernetes, недоступны в репозиториях пакетов по умолчанию. Нам нужно добавить дополнительный репозиторий Kubernetes apt на всех узлах, запустите
$ 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
$ curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
6) Установите инструменты Kubernetes.
Затем установите на все ноды инструменты Kubernetes, включая kubeadm, kubelet и kubectl.
$ sudo apt update
$ sudo apt install kubelet kubeadm kubectl -y
$ sudo apt-mark hold kubelet kubeadm kubectl
7) Установите кластер Kubernetes с помощью Kubeadm.
kubelet больше не поддерживает параметры командной строки (они устарели). Вместо этого я предлагаю создать файл конфигурации, скажем, «kubelet.yaml» со следующим содержимым.
$ nano kubelet.yaml
apiVersion: kubeadm.k8s.io/v1beta3
kind: InitConfiguration
---
apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
kubernetesVersion: "1.28.0" # Replace with your desired version
controlPlaneEndpoint: "k8s-master"
---
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
Теперь у нас все готово для инициализации кластера Kubernetes, выполните следующую команду только на master ноде:
$ sudo kubeadm init --config kubelet.yaml
Вывод:

Чтобы начать взаимодействовать с кластером, выполните следующие команды на master ноде:
$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
Запустите следующую команду kubectl, чтобы получить информацию о нодах и кластере:
$ kubectl get nodes
$ kubectl cluster-info
Вывод вышеуказанных команд

На своих рабочих worker нодах присоедините их к кластеру, выполнив команду, которая отображалась при инициализации главного узла. Это будет выглядеть примерно так: «Присоединение к Kubeadm».
$ sudo kubeadm join k8s-master:6443 --token 21nm87.x1lgd4jf0lqiiiau \
--discovery-token-ca-cert-hash sha256:28b503f1f2a2592678724c482776f04b445c5f99d76915552f14e68a24b78009
Проверьте состояние нод, выполнив следующую команду с master ноды:
$ kubectl get nodes

Чтобы подготовить статус нод, мы должны установить сетевые дополнения POD, такие как Calico или Flannel.
8) Настройка сети Pod с помощью Calico
На master ноде выполните команду ниже, чтобы установить Calico:
$ kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calico.yaml
Вывод:

Проверьте статус модулей Calico, запустите
$ kubectl get pods -n kube-system

Отлично, теперь еще раз проверьте статус нод

Отлично, приведенное выше подтверждает, что главные и рабочие ноды находятся в состоянии готовности. Теперь мы можем сказать, что наш кластер готов обрабатывать рабочую нагрузку.