Как стать автором
Обновить

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

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров1.4K

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

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

Статья больше подойдёт тем, кто хочет разобраться в тонкостях работы kubernetes. В ней мы с вами осуществим "низкоуровневую" настройку кластера с помощью утилиты kubeadm, не используя "высокоуровневые" minikube и kubespray.
Понимая нюансы настройки кубера на RedOS8, описанные в этой статье, вы без проблем сможете осуществить настройку в RedOS8 при помощи kubespray.

Системные требования

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

Подготовка сервера

Прежде чем начать установку кубера, необходимо подготовить сервера. При установке кубера при помощи kubespray всё это осуществляется автоматически, но мы с вами в познавательных целях сделаем всё это сами.

Отключаем 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

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

systemctl mask dev-zram0.swap
swapoff -a

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

tee /etc/sysctl.d/kubernetes.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF 
sysctl --system

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

tee /etc/modules-load.d/containerd.conf <<EOF
overlay
br_netfilter
EOF
modprobe overlay 
modprobe br_netfilter

Отключаем 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

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

tee /etc/yum.repos.d/kubernetes.repo <<EOF
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.28/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.28/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF

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

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

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

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

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

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

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

kubectl get pods --all-namespaces

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

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

Теги:
Хабы:
Всего голосов 10: ↑5 и ↓5+2
Комментарии1

Публикации

Истории

Работа

Ближайшие события

7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн
15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
28 ноября
Конференция «TechRec: ITHR CAMPUS»
МоскваОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань