Разворачиваем кластер Kubernetes на Debian

Разворачиваем кластер Kubernetes на Debian

В этой записи мы рассмотрим как быстро поднять кластер Kubernetes на Debian 11. Кластер будет включать в себя 3 хоста: 1 мастер (control plane) и 2 воркера (workers). Хосты развернуты в гипервизоре, установлена минимальная версия Debian 11 с SSH.
Предупреждение: эта инструкция не включает в себя все рекомендации по безопасности и лучшим практикам (best practices).

Полезные материалы:
https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/

Имена хостов:
c1-control-plane
c1-worker-1
c1-worker-2

Отредактируем на каждом хосте файл hosts и добавим строки, которые указаны ниже

vim /etc/hosts

192.168.254.10 c1-control-plane
192.168.254.11 c1-worker-1
192.168.254.12 c1-worker-2

Нам необходимо загрузить два модуля в ядро:
overlay необходимо для overlayfs, https://www.kernel.org/doc/html/latest/filesystems/overlayfs.html
br_netfilter чтобы iptables корректно работал с трафиков бриджей (bridges), http://ebtables.netfilter.org/documentation/bridge-nf.html

cat << EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF
cat << EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF

Отключаем swap, так как kubelet требует этого
sed -i '/swap/d' /etc/fstab
Применим настройки выше, чтобы не перезагружать хосты:

modprobe overlay
modprobe br_netfilter
sysctl --system
swapoff -a

Установим NTP server взамен etcd
apt install -y chrony

Установим containerd

apt install -y curl gpg lsb-release apparmor apparmor-utils
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64
signed-by=/usr/share/keyrings/docker-archive-keyring.gpg]
https://download.docker.com/linux/debian $(lsb_release -cs) stable" |
tee /etc/apt/sources.list.d/docker.list > /dev/null

apt update
apt-get install -y containerd.io
mkdir -p /etc/containerd
containerd config default | tee /etc/containerd/config.toml

Отредактируем конфигурацию containerd и перезапустим службу
vim /etc/containerd/config.toml

Было:

[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]

Стало:

[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
  SystemdCgroup = true

Параметр SystemdCgroup уже может быть, но со значением false, поэтому надо будет просто изменить на true.
systemctl restart containerd

Установим kubernetes инструменты, в моем случае это версия 1.21.0.

apt-get install -y apt-transport-https ca-certificates curl
curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
echo "deb
[signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg]
https://apt.kubernetes.io/ kubernetes-xenial main" | tee
/etc/apt/sources.list.d/kubernetes.list

apt-get update
apt install iptables libiptc0/stable libxtables12/stable
apt-get install -y kubelet=1.21.0-00 kubeadm=1.21.0-00 kubectl=1.21.0-00
apt-mark hold kubelet kubeadm kubectl

Осталось запустить кластер. Следующие команды выполняем только на мастере (control plane)!
kubeadm init --pod-network-cidr 172.20.0.0/16 --kubernetes-version 1.21.0
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

С мастера вы можете проверить статус кластера и нод. Наша нода c1-control-plane в статусе NotReady потому что мы еще не донастроили сеть.
kubectl get nodes

NAME               STATUS     ROLES                  AGE     VERSION
c1-control-plane   NotReady   control-plane,master   3m49s   v1.21.0

Установим сеть с помощью calico
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
После окончания разворачивания статус ноды должен измениться на Ready.

Добавим остальные ноды (воркеры) в кластер. Следующие команды выполняем только на воркерах (workers)!
По окончанию выполнения команды “kubeadmin init …” мы видимо подобную строку, она необходима для ввода нод в кластер:

kubeadm join 192.168.254.10:6443 --token oxaul0.24g50wlwsp4ktiqs --discovery-token-ca-cert-hash sha256:74746c748be5fef131d9c91a591c053591b6ce1e274396bcb7c48b6e6664bded

Если вы ее потеряли, то можно ее получить с помощью команды:
kubeadm token create --print-join-command
Выполняем команды “kubeadm join…” на воркерах, ждем окончания выполнения и смотрим на главной ноде статус.

kubectl get nodes

NAME               STATUS   ROLES                  AGE     VERSION
c1-control-plane   Ready    control-plane,master   5m52s   v1.21.0
c1-worker-1        Ready                     2m10s   v1.21.0
c1-worker-2        Ready                     66s     v1.21.0

kubectl get pods -A

kube-system   calico-kube-controllers-78d6f96c7b-9q4lq   1/1     Running   0          9h
kube-system   calico-node-4mq7p                          1/1     Running   0          9h
kube-system   calico-node-8km7w                          1/1     Running   0          9h
kube-system   calico-node-sjzs4                          1/1     Running   0          9h
kube-system   coredns-558bd4d5db-7pbjx                   1/1     Running   0          9h
kube-system   coredns-558bd4d5db-ptn59                   1/1     Running   0          9h
kube-system   etcd-c1-control-plane                      1/1     Running   1          9h
kube-system   kube-apiserver-c1-control-plane            1/1     Running   0          9h
kube-system   kube-controller-manager-c1-control-plane   1/1     Running   0          9h
kube-system   kube-proxy-ls768                           1/1     Running   0          9h
kube-system   kube-proxy-mk98k                           1/1     Running   0          9h
kube-system   kube-proxy-qbxwb                           1/1     Running   0          9h
kube-system   kube-scheduler-c1-control-plane            1/1     Running   0          9h

Источник


3 thoughts on “Разворачиваем кластер Kubernetes на Debian”

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Unlix © Все права защищены 2023

Копирование материалов с сайта Unlix.ru без указания полной ссылки на источник ЗАПРЕЩЕНО!