Установка Kubernetes на RHEL 9.4#
Подготовить 3 виртуальные машины#
Нужны 3+ ВМ с RHEL 9.4, соответствующие минимальным требованиям (2 CPU, 2 GB RAM). Все команды выполняются от имени пользователя с правами sudo.
Обновите индекс пакетов и задайте уникальные имена хостов для каждой машины согласно вашему плану (например, master1, worker1, worker2).
sudo dnf update -y
# Пример для мастер-ноды. Повторите на воркерах с своими именами.
sudo hostnamectl set-hostname master1.localНастройка файла /etc/hosts (либо насроить на DNS).
На каждой ноде пропишите соответствие IP-адресов и имен хостов, чтобы обеспечить сетевую доступность по именам:
sudo tee -a /etc/hosts > /dev/null <<EOF
192.168.1.150 master1.local master1
192.168.1.151 worker1.local worker1
192.168.1.152 worker2.local worker2
EOF(Заменить IP-адреса на актуальные для конкретного стенда)
Отключить Swap#
Для Kubernetes рекомендуется отключение swap в системе:
sudo swapoff -a
# Удалите или закомментируйте строку с swap в файле /etc/fstab
sudo sed -i '/swap/d' /etc/fstabПодготовить сетевые модули ядра#
Проверим модуль br_netfilter:
lsmod | grep br_netfilter
ls -la /proc/sys/net/bridge/Если строк с модулем нет, то грузим модуль в ядро немеделенно:
sudo modprobe br_netfilter
sudo modprobe overlay
# и снова проверить:
lsmod | grep br_netfilterДалее, создать конфигурацию под Kubernetes и проверить, что модуль указан там:
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOFПроверяем параметры ядра: параметр ядра ip_forward. Проверить, что действительно выключен:
sysctl net.ipv4.ip_forward
# или
cat /proc/sys/net/ipv4/ip_forwardЕсли нет, то включить параметр ядра немедленно:
sudo sysctl -w net.ipv4.ip_forward=1Убедиться что файл конфигурации существует и содержит правильную настройку:
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
sudo sysctl --systemПодготовить Firewalld#
ВАРИАНТ 1 - Отключить Firewalld#
sudo systemctl stop firewalld
sudo systemctl disable firewalld
sudo systemctl status firewalldВАРИАНТ 2 - Настроить Firewalld - добавить порты#
Откройте порты для Control Plane:
# Kubernetes API server
sudo firewall-cmd --permanent --add-port=6443/tcp
# etcd server client API
sudo firewall-cmd --permanent --add-port=2379-2380/tcp
# Kubelet API
sudo firewall-cmd --permanent --add-port=10250/tcp
# kube-scheduler
sudo firewall-cmd --permanent --add-port=10259/tcp
# kube-controller-manager
sudo firewall-cmd --permanent --add-port=10257/tcp
sudo firewall-cmd --reload
sudo firewall-cmd --list-portsПримените изменения:
sudo firewall-cmd --reload
# проверить добавленные правила
sudo firewall-cmd --list-portsУстановка Container Runtime#
Для установки containerd надо добавить репозиторий Docker:
# Устанавливаем утилиту dnf-plugins-core (если еще не установлена)
sudo dnf install -y dnf-plugins-core
# Добавляем репозиторий Docker
sudo dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo
# Устанавливаем containerd
sudo dnf install -y containerd.ioСоздаем директорию для конфигурации:
sudo mkdir -p /etc/containerdГенерируем конфигурацию по умолчанию:
containerd config default | sudo tee /etc/containerd/config.tomlРедактируем конфиг для использования systemd cgroup:
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml(Убедитесь, что параметр SystemdCgroup = true установлен в секции [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options])
Это позволит нам включить containerd со стороны systemctl:
sudo systemctl enable containerd --now
sudo systemctl status containerdУстановка Kubernetes (kubeadm, kubelet, kubectl)#
Добавить репозиторий kubernetes (1.35):
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.35/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.35/rpm/repodata/repomd.xml.key
EOFТеперь можно становить все пакеты:
sudo dnf install -y kubelet kubeadm kubectlЗафиксировать версию Kubernetes в RHEL (чтобы избежать случайных обновлений), запустить и проверить статус запуска:
sudo dnf install -y dnf-plugins-core python3-dnf-plugin-versionlock
sudo dnf versionlock add kubelet kubeadm kubectl
# проверить:
sudo dnf versionlock listЗапуск Kubernetes:
sudo systemctl enable --now kubelet
sudo systemctl status kubeletНастройка МАСТЕР-узла (master node)#
Инициализация кластера и сети:
sudo kubeadm init --pod-network-cidr=10.244.0.0/16После успешного завершения Вы увидите сообщение Your Kubernetes control-plane has initialized successfully! и команду kubeadm join для подключения воркеров. ВАЖНО сохранить эту команду.
Настройка доступа к кластеру#
Выполните команды, чтобы настроить kubectl для обычного пользователя:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/configУстановка CNI (Flannel)#
kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.ymlНеобходимо подождать несколько минут, пока компоненты загрузятся, и далее проверьте статус узлов и подов:
kubectl get nodes
kubectl get pods -n kube-flannel # или -n kube-system, в зависимости от версии FlannelМастер-нода должна перейти в состояние Ready.
Проверка Flannel#
На всех нодах должен быть файл настроек:
ls -la /run/flannel/subnet.envФайл имеет вид:
FLANNEL_NETWORK=10.244.0.0/16
FLANNEL_SUBNET=10.244.0.1/24
FLANNEL_MTU=1450
FLANNEL_IPMASQ=trueНа мастер-узле проверить:
kubectl get pods -n kube-flannel -o wideПодключение рабочих узлов (worker node)#
На каждой рабочей ноде (worker) выполнить все шаги вплоть до “Запуск Kubernetes”, а далее команду kubeadm join, которую вы сохранили после инициализации кластера и сети. Она выглядит примерно так:
sudo kubeadm join 192.168.1.150:6443 --token <your-token> --discovery-token-ca-cert-hash sha256:<your-hash>Если забыли сохранить команду, то сгенерировать новый токен можно на мастер-ноде с помощью команды kubeadm token create --print-join-command.
Проверка после подключения#
Вернитесь на мастер-ноду и убедитесь, что все узлы кластера находятся в статусе Ready:
kubectl get nodesУстановка Helm#
Самый простой способ установки Helm на RHEL — использовать официальный скрипт:
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.shПроверка установки:
helm versionВы должны увидеть вывод с информацией о версии Helm.