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

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)
- Подготовить OS и сеть, отключить swap.
- Установить runtime (containerd) на все узлы.
- Установить kubeadm/kubelet/kubectl.
- Инициализировать master (
kubeadm init), сохранить join-команду. - Присоединить worker’ы через
kubeadm join. - Установить CNI (Calico) и дождаться состояния Running.
- Развернуть тестовое приложение и выполнить приёмочные тесты.
Набор тестов для приёмки
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 и ключи в защищённом месте; при необходимости регенерируйте токен.
Похожие материалы
Herodotus: механизм и защита Android‑трояна
Включить новое меню «Пуск» в Windows 11
Панель полей сводной таблицы в Excel — руководство
Включить новое меню «Пуск» в Windows 11
Дубликаты Диспетчера задач в Windows 11 — как исправить