Поднимаем одно-нодовый kubernetes-кластер на RedOS

Нынешний век — век импортозамещения. Многие компании сейчас сталкиваются с возникшей необходимостью переходить на отечественное ПО. Приходится осваивать вновь появившиеся нюансы, связанные с новым программным обеспечением. В данной статье мы в подробности рассмотрим настройку и шаг-за шагом настроим single-node kubernetes-кластер в одной из популярных отечественных ОС — RedOS.

В качестве подопытного мы используем сервер с RedOS8.

Минимальные системные требования для нашей установки: 1CPU / RAM:2Gb / HDD:10GB

Для начала донастроим наш сервер для возможности использования в качестве ноды kubernetes-кластера.

Отключаем firewalld:

systemctl disable --now firewalld.service

В redos по умолчанию включен кэширующий dns-сервер systemd-resolved, он немного мешает полноценной работе kubernetes, поэтому отключаем:

systemctl mask systemd-resolved.service

echo -e "[global-dns-domain-*]\nservers = 8.8.8.8\n" > /etc/NetworkManager/conf.d/dns.conf

rm -f /etc/resolv.conf

systemctl restart NetworkManager

В качестве swap в redos используется zram-swap — этот тот же swap-раздел, но только в оперативной памяти, данные при помещение в него сжимаются, тем самым обеспечивается экономия памяти и бОльшая производительность, чем при старом добром swap-разделе на HDD. Для работы kubernetes swap приносит больше проблем, чем пользы, поэтому отключаем zram-swap:

systemctl mask dev-zram0.swap

swapoff -a

Настраиваем параметры ядра:

tee /etc/sysctl.d/kubernetes.conf <

net.bridge.bridge-nf-call-ip6tables = 1

net.bridge.bridge-nf-call-iptables = 1

net.ipv4.ip_forward = 1

EOF

Применяем сделанные изменения:

sysctl --system

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

modprobe overlay

modprobe br_netfilter

…и настраиваем их автоматически запуск при загрузке ОС:

tee /etc/modules-load.d/containerd.conf <

overlay

br_netfilter

EOF

Отключаем selinux:

setenforce 0

…и настраиваем его отключение при загрузке ОС:

sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config

В /etc/hosts добавляем соответствие имени нашего хоста с локальным айпи-адресом:

LOCAL_IP=$(ip a s eth0 | grep 'inet' | awk '{print($2)}' | awk -F '/' '{print($1)}')

echo "${LOCAL_IP} ${HOSTNAME}” >> /etc/hosts

Добавляем в систему репозиторий kubernetes:

tee /etc/yum.repos.d/kubernetes.repo <

Устанавливаем необходимые пакеты:

dnf install -y socat iproute-tc containerd kubelet kubeadm kubectl --disableexcludes=kubernetes

Создаём конфигурационый файл для containerd:

containerd config default | \sed 's/SystemdCgroup = false/SystemdCgroup = true/' | \sed 's/sandbox_image = \"registry\.k8s\.io\/pause:3\.8\"/sandbox_image = \"registry\.k8s.io\/pause:3\.9\"/'  \> /etc/containerd/config.toml

Включаем сервисы:

systemctl enable --now containerd kubelet

Инициализируем кластер:

kubeadm init

5334b7a2dd9950883978312836f0b12c.png

Немного ждём и проверяем работу кластера:

export KUBECONFIG=/etc/kubernetes/admin.conf

kubectl get pods --all-namespaces

Видим, что поды coredns не в статусе Pending.  Это нормально, их время ещё не пришло.

Видим, что поды coredns не в статусе Pending. Это нормально, их время ещё не пришло.

Устанавливаем NetworkPlugin Cilium:

CILIUM_CLI_VERSION=$(curl -s https://raw.githubusercontent.com/cilium/cilium-cli/main/stable.txt)

curl -L --fail --remote-name-all https://github.com/cilium/cilium-cli/releases/download/${CILIUM_CLI_VERSION}/cilium-linux-amd64.tar.gz

tar xzvfC cilium-linux-amd64.tar.gz /usr/local/bin

/usr/local/bin/cilium install

9b1b83f38eece1de59e1444b3b73d2ec.png

И самый последний штрих: делаем наш кластер одно-нодовым — чтобы обычные поды могли запускаться на нашем мастере:

kubectl taint node ${HOSTNAME} node-role.kubernetes.io/control-plane:NoSchedule-

Ещё немного ждём, чтобы все поды прогрузились и любуемся результатом:

kubectl get pods --all-namespaces

193fb0f448d9813d59338b7bdc556841.png

В итоге у нас появилась неплохая песочница для небольших экспериментов и изучения kubernetes.

При необходимости, можно присоединить к нашему мини-кластеру дополнительные ноды-воркеры, но это уже будет другая история…

© Habrahabr.ru