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

Установка Kubernetes на Ubuntu 22.04

5 min read Kubernetes Обновлено 06 Nov 2025
Kubernetes на Ubuntu 22.04 — пошагово
Kubernetes на Ubuntu 22.04 — пошагово

Схема: логотип Kubernetes и архитектура кластера

Kubernetes обеспечивает оркестрацию контейнеров: автоматический деплой, масштабирование и управление. В этом руководстве пошагово показано, как подготовить Ubuntu 22.04, установить containerd, компоненты Kubernetes, и развернуть кластер с сетевым плагином Calico и тестовым приложением nginx. В конце есть чек-лист, варианты замены runtime, рекомендации по безопасности и действия при ошибках.

О чём статья

  • Цель: быстро и корректно развернуть кластер Kubernetes на Ubuntu 22.04.
  • Кто заинтересован: администраторы Linux, инженеры DevOps и студенты, изучающие облачные среды.

Краткие определения

  • Kubernetes: система оркестрации контейнеров для автоматизации деплоя, масштабирования и управления приложениями.
  • Master (control-plane): узел, управляющий состоянием кластера.
  • Worker: узел, на котором запускаются Pod’ы с приложениями.

Чеклист перед началом

  • Сервер с Ubuntu 22.04 (master и один или несколько worker). 64‑битная архитектура.
  • Пользователь с правами root или sudo. Пароль root настроен.
  • Доступ по сети между узлами (порт 6443 и порты NodePort, если нужен внешний доступ).
  • Время и зона сервера корректны.

Подготовка системы

Обновите пакеты и примените обновления безопасности:

apt update -y
apt upgrade -y

Отключите swap — Kubernetes требует выключенного swap:

swapoff -a

Загрузите необходимые модули ядра на всех узлах. Откройте файл:

nano /etc/modules-load.d/containerd.conf

Добавьте строки:

overlay
br_netfilter

Сохраните файл и загрузите модули:

modprobe overlay
modprobe br_netfilter

Определите параметры sysctl для сетевой подсистемы:

nano /etc/sysctl.d/kubernetes.conf

Вставьте:

net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1

Примените настройки:

sysctl --system

Важно: все изменения должны быть внесены на каждом узле кластера.

Установка containerd

Установите зависимости:

apt install curl gnupg2 software-properties-common apt-transport-https ca-certificates -y

Добавьте репозиторий Docker и его ключ:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmour -o /etc/apt/trusted.gpg.d/docker.gpg
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

Обновите индекс пакетов и установите containerd:

apt update -y
apt install containerd.io -y

Сгенерируйте конфигурацию и включите systemd cgroup:

containerd config default | tee /etc/containerd/config.toml >/dev/null 2>&1
sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml

Перезапустите сервис:

systemctl restart containerd

Установка компонентов Kubernetes (kubeadm, kubelet, kubectl)

Добавьте репозиторий Kubernetes:

curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"

Установите пакеты:

apt update -y
apt install kubelet kubeadm kubectl -y

Остановите автоматическое обновление версий, если нужно зафиксировать версии (опционально):

apt-mark hold kubelet kubeadm kubectl

Инициализация кластера (control-plane)

На master-узле выполните команду инициализации. В примере замените kubernetes-master-ip на IP или DNS вашего master:

kubeadm init --control-plane-endpoint=kubernetes-master-ip

Вы получите вывод с инструкциями по созданию конфигурации kubectl и командой kubeadm join. Скопируйте команду join — она понадобится для worker-узлов.

Выполните (для обычного пользователя):

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

Или, если вы root:

export KUBECONFIG=/etc/kubernetes/admin.conf

Важно: kubeadm выдаёт токен join с временем жизни. Если он истёк, сгенерируйте новый токен с помощью kubeadm token create --print-join-command.

Присоединение worker-узла

На каждом worker выполните команду join (из вывода init). Пример:

kubeadm join kubernetes-master-ip:6443 --token  --discovery-token-ca-cert-hash sha256:

Проверка на master:

kubectl get nodes

Ожидаемый статус — Ready.

Установка сетевого плагина: Calico

На master загрузите и примените манифест Calico:

curl https://projectcalico.docs.tigera.io/manifests/calico.yaml -O calico.yaml
kubectl apply -f calico.yaml

Проверяйте статусы pod’ов в пространстве имён kube-system:

kubectl get pods -n kube-system

Дождитесь статуса Running для компонентов calico и coredns.

Тестовое приложение: Nginx

Создайте деплоймент и сервис NodePort:

kubectl create deployment nginx-app --image=nginx --replicas=2
kubectl get deployment nginx-app
kubectl expose deployment nginx-app --type=NodePort --port=80
kubectl get svc nginx-app
kubectl describe svc nginx-app

Получите CLUSTER-IP или используйте NodePort и IP узла, чтобы проверить ответ через curl:

curl http://:

Вы должны увидеть стандартную страницу приветствия nginx.

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

  • Все узлы в выводе kubectl get nodes в состоянии Ready.
  • Сетевые pod’ы Calico и CoreDNS в состоянии Running без CrashLoopBackOff.
  • Тестовый nginx доступен через NodePort или Ingress.
  • kubelet и containerd запущены и работают.

Частые проблемы и устранение неполадок

  • kubeadm join не работает (таймаут/сетевая недоступность): проверьте доступность порта 6443 с worker на master (telnet/ss/netcat).
  • Pod в CrashLoopBackOff: смотрите kubectl logs -n и kubectl describe pod для событий.
  • DNS внутри кластера не работает: убедитесь, что CoreDNS запускается и в ConfigMap правильные записи.
  • Swap включён: kubelet может не стартовать — проверьте swapon --show.
  • Проблемы c cgroups: для некоторых дистрибутивов и ядер требуется установить правильные параметры systemd cgroup.

Советы диагностики:

  • journalctl -u kubelet для логов kubelet.
  • docker/containerd лог для проблем runtime.
  • kubectl get events -A для событий кластера.

Альтернативные подходы и выбор runtime

  • CRI-O — более «легковесный» runtime, ориентирован на Kubernetes. Подходит для production, где нужен минимальный стек.
  • Docker Engine + dockershim больше не поддерживается в Kubernetes; используйте containerd или CRI-O.
  • Управляемые Kubernetes (EKS/GKE/AKS) — если вы не хотите управлять control-plane и сетевыми плагинами.

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

  • Ограничьте доступ к API-серверу (порт 6443) с помощью брандмауэра.
  • Используйте RBAC и минимальные привилегии для сервис-аккаунтов.
  • Включите network policies (Calico поддерживает их) для сегментации трафика между приложениями.
  • Регулярно обновляйте kubelet, kubeadm и kubectl согласованно по версиям.

Роли и чек-лист для развёртывания (кратко)

  • Инфраструктура (операции): подготовить машины, сеть, DNS, время и правило брандмауэра.
  • DevOps: установить containerd и Kubernetes пакеты, настроить sysctl и модули.
  • Сетевой инженер: установить и проверить Calico/иную CNI.
  • Разработчик: развернуть тест-приложение и проверить доступность.

Краткая методология развёртывания (SOP)

  1. Подготовить OS и сеть, отключить swap.
  2. Установить runtime (containerd) на все узлы.
  3. Установить kubeadm/kubelet/kubectl.
  4. Инициализировать master (kubeadm init), сохранить join-команду.
  5. Присоединить worker’ы через kubeadm join.
  6. Установить CNI (Calico) и дождаться состояния Running.
  7. Развернуть тестовое приложение и выполнить приёмочные тесты.

Набор тестов для приёмки

  • kubectl get nodes — все узлы Ready.
  • kubectl get pods -n kube-system — нет CrashLoopBackOff.
  • kubectl get svc nginx-app — сервис создан и отвечает на curl.
  • kubectl exec -it -- ping — проверка сетевой связности.

Однострочные глоссарные определения

  • kubeadm — инструмент для упрощённой инициализации кластера.
  • kubelet — агент на каждом узле, поддерживает Pod’ы.
  • kubectl — CLI для управления Kubernetes.
  • CNI — интерфейс для подключения сетевых плагинов (например, Calico).

Резюме

Вы установили Kubernetes на Ubuntu 22.04: подготовили систему, установили containerd, kubeadm/kubelet/kubectl, инициировали control-plane, присоединили worker, установили Calico и развернули тестовый nginx. Следуйте чек-листу и рекомендациям по безопасности перед вводом в production.

Важно: храните команду join и ключи в защищённом месте; при необходимости регенерируйте токен.

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

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

Herodotus: механизм и защита Android‑трояна
Кибербезопасность

Herodotus: механизм и защита Android‑трояна

Включить новое меню «Пуск» в Windows 11
Windows руководство

Включить новое меню «Пуск» в Windows 11

Панель полей сводной таблицы в Excel — руководство
Excel

Панель полей сводной таблицы в Excel — руководство

Включить новое меню «Пуск» в Windows 11
Windows 11

Включить новое меню «Пуск» в Windows 11

Дубликаты Диспетчера задач в Windows 11 — как исправить
Windows

Дубликаты Диспетчера задач в Windows 11 — как исправить

История просмотров Reels в Instagram — как найти
Instagram

История просмотров Reels в Instagram — как найти