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

в 12:15, , рубрики: 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.8n" > /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 <<EOF

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 <<EOF

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 <<EOF[kubernetes]name=Kubernetesbaseurl=https://pkgs.k8s.io/core:/stable:/v1.28/rpm/enabled=1gpgcheck=1gpgkey=https://pkgs.k8s.io/core:/stable:/v1.28/rpm/repodata/repomd.xml.keyexclude=kubelet kubeadm kubectl cri-tools kubernetes-cniEOF

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

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

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

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

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

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

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

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

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

kubectl get pods --all-namespaces

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

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

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

Автор: zamal

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js