Разворачиваем кластер 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

Источник


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

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

Ваш адрес email не будет опубликован.

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

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

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