Гид по технологиям

Kubernetes на CentOS 7 — установка и настройка

• 7 min read • DevOps • Обновлено 25 Nov 2025
Kubernetes на CentOS 7 — установка и настройка
Kubernetes на CentOS 7 — установка и настройка

Кратко: пошаговое руководство по установке кластера Kubernetes на CentOS 7 с использованием kubeadm, одного мастера и двух рабочих узлов. Включены подготовка серверов, настройка сети (flannel), добавление нод, тестовый развёртывание Nginx, чеклисты, критерии приёмки и рекомендации по безопасности.

Важно: заранее убедитесь, что у вас есть root-доступ к трем машинам и стабильная сеть между ними.

Обзор и цель руководства

Kubernetes — это платформа с открытым исходным кодом для оркестрации контейнеризованных приложений. Это руководство покажет, как подготовить три сервера CentOS 7, установить Docker и Kubernetes (kubeadm/kubelet/kubectl), и создать рабочий кластер с одной нодой master и двумя рабочими нодами. В конце вы развернёте тестовый Pod (nginx) и откроете доступ через NodePort.

Кому пригодится: системным администраторам, инженерам DevOps и разработчикам, которые хотят быстро поднять тестовый или небольшой продакшен-кластер на CentOS 7.

Ключевые понятия в одну строку

  • Pod: минимальная единица деплоя в Kubernetes, может содержать один или несколько контейнеров.
  • kubeadm: инструмент для инициализации и управления базовой конфигурацией кластера Kubernetes.
  • kubelet: агент, запускающий контейнеры на каждом узле.
  • kubectl: клиентская утилита для управления кластером.

Основные варианты использования

  • Быстрый тестовый кластер для CI/CD и отладки.
  • Лабораторная среда перед миграцией приложений в Kubernetes.
  • Учебный кейс для освоения kubeadm и сетевых плагинов (flannel).

Предварительные условия

  • 3 сервера с CentOS 7
    • 10.0.15.10 k8s-master
    • 10.0.15.21 node01
    • 10.0.15.22 node02
  • root или sudo-привилегии на всех серверах
  • Прямой сетевой доступ между серверами (порты ниже)
  • Наличие доступа в интернет для загрузки пакетов и образов

Советы по ресурсам: для базовой лаборатории достаточно 1 vCPU и 1–2 ГБ ОЗУ на узел, но для стабильной работы рекомендуется 2 vCPU и 4 ГБ RAM для мастера и 2–4 ГБ для рабочих узлов.

Что мы сделаем

  1. Подготовим сервера и установим Docker и Kubernetes
  2. Инициализируем мастер-кластер с помощью kubeadm
  3. Добавим node01 и node02 в кластер
  4. Проверим кластер, создав первый Pod (nginx)

Порты и протоколы (факты)

  • kube-apiserver: TCP 6443 — главный API сервер кластера.
  • etcd (если локально): TCP 2379-2380.
  • kubelet: TCP 10250 (доступ для kube-proxy/kubectl в некоторых сценариях).
  • NodePort: 30000–32767 (по умолчанию диапазон портов для сервисов типа NodePort).

Эти порты должны быть доступными внутри вашей сети между узлами.


Шаг 1 — Подготовка серверов и установка Kubernetes

Все команды ниже выполняйте на всех трёх серверах (мастер и ноды), если не указано иное.

Настройте /etc/hosts

Откройте файл hosts в редакторе:

vim /etc/hosts

Вставьте записи:

10.0.15.10      k8s-master
10.0.15.21      node01
10.0.15.22      node02

Сохраните и закройте.

Отключение SELinux

Чтобы избежать проблем с Docker и CSI-плагинами, временно отключим SELinux (для лабораторной среды). Выполните:

setenforce 0
sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux

Важно: в продакшене лучше настроить политику SELinux корректно, а не отключать.

Включение модуля br_netfilter

Модуль br_netfilter необходим, чтобы пакеты, проходящие через bridge, обрабатывались iptables:

modprobe br_netfilter
echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables

Отключите swap

Kubernetes требует отключённого swap:

swapoff -a

Отредактируйте /etc/fstab и закомментируйте строку со swap UUID.

Отключение swap на CentOS

Редактирование /etc/fstab для отключения swap

Установка Docker CE

Установите зависимости и репозиторий Docker, затем docker-ce:

yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install -y docker-ce

Запустите Docker и включите автозапуск:

systemctl start docker && systemctl enable docker

Добавление репозитория Kubernetes и установка пакетов

Создайте файл репозитория:

cat < /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg
        https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF

Установите kubelet, kubeadm и kubectl:

yum install -y kubelet kubeadm kubectl

Перезагрузите серверы после установки (рекомендуется):

sudo reboot

После перезагрузки снова запустите и включите сервисы Docker и kubelet:

systemctl start docker && systemctl enable docker
systemctl start kubelet && systemctl enable kubelet

Настройка cgroup-driver

Docker по умолчанию использует cgroupfs. Убедимся, что kubelet использует тот же драйвер. Проверьте драйвер Docker:

docker info | grep -i cgroup

Если Docker использует cgroupfs, выполните:

sed -i 's/cgroup-driver=systemd/cgroup-driver=cgroupfs/g' /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
systemctl daemon-reload
systemctl restart kubelet

Это гарантирует согласованность cgroup между Docker и kubelet.


Шаг 2 — Инициализация Kubernetes мастера

Выполните команды на сервере k8s-master (10.0.15.10).

Инициализация кластера через kubeadm. В примере используется flannel и CIDR 10.244.0.0/16:

kubeadm init --apiserver-advertise-address=10.0.15.10 --pod-network-cidr=10.244.0.0/16

Инициализация кластера Kubernetes

Параметры:

  • –apiserver-advertise-address: IP интерфейса мастера, по которому API будет доступен.
  • –pod-network-cidr: диапазон адресов для сети Pod; выбран для совместимости с flannel.

Сохраните и запишите команду kubeadm join, которую выведет init — она понадобится для добавления рабочих узлов.

Создайте директорию конфигурации kubectl и скопируйте admin.conf в домашний каталог:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

Деплой сетевого плагина flannel:

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

Проверьте статус узлов и подов:

kubectl get nodes
kubectl get pods --all-namespaces

Убедитесь, что все Pod в namespace kube-system имеют статус Running.

Проверка состояния узлов и подов


Шаг 3 — Добавление node01 и node02 в кластер

На каждом рабочем узле выполните команду kubeadm join, которую вы получили после инициализации мастера. Пример команды (ваша команда будет другой):

kubeadm join 10.0.15.10:6443 --token vzau5v.vjiqyxq26lzsf28e --discovery-token-ca-cert-hash sha256:e6d046ba34ee03e7d55e1f5ac6d2de09fd6d7e6959d16782ef0778794b94c61e

Добавление нод в кластер

После выполнения на обеих нодах вернитесь на мастер и проверьте:

kubectl get nodes
kubectl get pods --all-namespaces

Вы должны увидеть node01 и node02 в состоянии Ready.

Проверка добавленных нод


Шаг 4 — Тест: создание первого Pod (nginx)

На мастере создайте deployment nginx:

kubectl create deployment nginx --image=nginx

Посмотреть описание deployment:

kubectl describe deployment nginx

Создадим сервис NodePort для доступа к nginx извне:

kubectl create service nodeport nginx --tcp=80:80

Проверьте Pods и Services:

kubectl get pods
kubectl get svc

Список подов

В таблице svc вы увидите ClusterIP (внутренний IP) и внешний NodePort (например, 30691). Проверьте доступ через curl с мастер-узла или с другой машины в сети:

curl node01:30691
curl node02:30691

Тест curl

Тест на node02

В браузере откройте:

http://10.0.15.10:30691/

и убедитесь, что отображается стандартная страница Nginx.

Поздравляем — базовый кластер Kubernetes развернут и протестирован.


Критерии приёмки

  1. Узлы master, node01 и node02 видны в kubectl get nodes и находятся в состоянии Ready.
  2. Все Pod в kube-system находятся в состоянии Running (или Ready) после нескольких минут ожидания.
  3. Деплой nginx успешно создан и Pod имеющий статус Running.
  4. NodePort сервис возвращает корректную страницу Nginx при обращении к любому рабочему узлу.

Если хотя бы один пункт не выполняется, следуйте разделу «Устранение неполадок».


Чеклист команд (быстрый набор)

  • Настройка hosts: vim /etc/hosts
  • Выключить swap: swapoff -a
  • Включить br_netfilter: modprobe br_netfilter
  • Установка Docker: yum install -y docker-ce
  • Установка kubernetes: yum install -y kubelet kubeadm kubectl
  • Инициализация мастера: kubeadm init –apiserver-advertise-address=… –pod-network-cidr=…
  • Установка flannel: kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
  • Добавление нод: kubeadm join …
  • Создание nginx: kubectl create deployment nginx –image=nginx
  • Открыть NodePort: kubectl create service nodeport nginx –tcp=80:80

Роль-based чеклисты

Администратор инфраструктуры:

  • Подготовить и проверить сеть между нодами
  • Убедиться в наличии root-доступа
  • Настроить DNS/hosts
  • Проверить доступность портов

DevOps-инженер:

  • Установить Docker и Kubernetes-пакеты
  • Настроить cgroup-driver
  • Запустить kubeadm init и применить сетевой плагин
  • Написать манифесты/Helm-чарты для приложений

Разработчик:

  • Тестировать приложения в Pod и сервисах
  • Использовать kubectl для отладки
  • Предоставлять манифесты для деплоя

Устранение неполадок — частые ошибки и решения

  1. Pod в статусе CrashLoopBackOff

    • Просмотрите логи: kubectl logs [-c ]
    • Проверка описания Pod: kubectl describe pod
    • Убедитесь, что образ доступен и конфигурация переменных окружения верна.
  2. Узел в состоянии NotReady

    • Проверьте kubelet: systemctl status kubelet
    • Убедитесь, что swap отключён и br_netfilter включён
    • Проверьте сетевые плагины (flannel/Calico) — имеются ли Pod в kube-system
  3. kubeadm join не проходит

    • Проверьте токен (он действителен по времени)
    • Убедитесь, что мастер доступен по 10.0.15.10:6443
    • Проверить корректность discovery-token-ca-cert-hash
  4. Сервис NodePort не отвечает

    • Проверить, что Pod запущен: kubectl get pods
    • Проверить правила firewall/iptables на нодах
    • Проверить, что порт NodePort попадает в указанный диапазон

Безопасность и рекомендации

  • В продакшене не отключайте SELinux глобально; вместо этого настройте модули или используйте совместимые образы.
  • Регулярно обновляйте Docker и пакеты Kubernetes; придерживайтесь поддерживаемых версий.
  • Настройте аутентификацию и RBAC для доступа к кластеру.
  • Разделяйте роли: не давайте всем пользователям права cluster-admin.
  • Используйте сетевые политики (NetworkPolicy) для ограничения трафика между Pod.

Мини-методология: как тестировать и верифицировать кластер

  1. После деплоя мастера и сети дождитесь стабильности kube-system (3–5 минут).
  2. Добавьте одну ноду и проверьте её статус.
  3. Разверните простой Deployment (nginx) и Service.
  4. Выполните проверку доступности с каждой ноды (curl node:nodeport).
  5. Запланируйте короткую нагрузочную проверку (например, несколько параллельных curl).

Примеры, когда этот подход не подходит

  • Если вы строите крупный продакшен-кластер, этот метод (kubeadm + flannel) нужно дополнить HA-config для control-plane, управляемым etcd, мониторингом и бэкапами.
  • Для облачных сред часто предпочтительнее использовать managed Kubernetes (EKS/GKE/AKS) или провайдерские интеграции.

Полезные шаблоны и сниппеты

Команда для просмотра логов и ошибок kubelet:

journalctl -u kubelet -xe

Команды проверки сети flannel:

kubectl -n kube-system get pods | grep flannel
kubectl -n kube-system describe ds kube-flannel-ds

Снять вывод kubeadm init в файл для последующего копирования join-команды:

kubeadm init ... | tee ~/kubeadm-init.log

Краткий глоссарий (1 строка)

  • Pod: группа контейнеров с общими сетями и томами.
  • Node: физический или виртуальный хост, запускающий Pod.
  • Master (control plane): узел(ы), управляющие кластером.
  • kubeadm: инструмент для первичной настройки кластера.

Сводка

  • Подготовьте три сервера с CentOS 7 и root-доступом.
  • Установите Docker, kubeadm, kubelet, kubectl.
  • Инициализируйте мастер с нужным pod-network-cidr и примените flannel.
  • Добавьте рабочие ноды через kubeadm join.
  • Проверьте работоспособность, развернув nginx и открыв NodePort.

Переходите к автоматизации (Ansible/Terraform) и добавлению мониторинга/логирования для продакшен-готового кластера.

Ресурсы и ссылки

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро