
Kubernetes для начинающих: полное руководство по установке и настройке
Введение в Kubernetes
Kubernetes (часто сокращенно K8s) — это мощная система оркестрации контейнеров с открытым исходным кодом, разработанная Google, а теперь поддерживаемая Cloud Native Computing Foundation. Она позволяет автоматизировать развертывание, масштабирование и управление контейнеризированными приложениями. Kubernetes стал отраслевым стандартом для управления контейнерами в производственных средах, и его изучение является важным навыком для современных DevOps-инженеров и разработчиков.
Основная ценность Kubernetes заключается в его способности управлять сложными распределенными системами, обеспечивая высокую доступность, отказоустойчивость и автоматическое масштабирование приложений. Система абстрагирует инфраструктуру, позволяя разработчикам сосредоточиться на коде приложения, а не на деталях развертывания и управления инфраструктурой.
Основные концепции Kubernetes
Перед началом установки важно понять ключевые концепции Kubernetes. Pod — это наименьшая и самая простая единица в объектной модели Kubernetes. Pod представляет собой группу из одного или нескольких контейнеров с общими ресурсами, такими как хранилище и сеть. Node (узел) — это рабочая машина в Kubernetes, которая может быть виртуальной или физической. Каждый узел содержит службы, необходимые для запуска подов, и управляется главным узлом (master node).
Deployment — это объект Kubernetes, который описывает желаемое состояние для ваших подов и реплик. Он обеспечивает декларативные обновления для подов и наборов реплик. Service — это абстракция, которая определяет логический набор подов и политику доступа к ним. Сервисы позволяют приложениям получать доступ к другим приложениям внутри кластера. Namespace обеспечивает механизм изоляции групп ресурсов в одном кластере. Имена ресурсов должны быть уникальными в пределах пространства имен, но не между разными пространствами имен.
Подготовка к установке Kubernetes
Перед установкой Kubernetes необходимо подготовить инфраструктуру. Минимальные требования включают как минимум две машины: одну для главного узла (master) и одну или несколько для рабочих узлов (worker nodes). Каждая машина должна иметь как минимум 2 ГБ ОЗУ, 2 процессорных ядра и 20 ГБ дискового пространства. Операционные системы, поддерживаемые Kubernetes, включают Ubuntu 16.04+, Debian 9+, CentOS 7+, RHEL 7+, Fedora и Container Linux.
Важным шагом подготовки является отключение swap-памяти, так как Kubernetes требует, чтобы swap был отключен на всех узлах. Это можно сделать командой sudo swapoff -a и удалением соответствующей записи из файла /etc/fstab. Также необходимо настроить корректную работу сетевого моста, установив параметры sysctl: net.bridge.bridge-nf-call-iptables = 1 и net.bridge.bridge-nf-call-ip6tables = 1.
Установка Docker
Kubernetes использует Docker в качестве среды выполнения контейнеров по умолчанию, поэтому первым шагом является установка Docker на все узлы кластера. Для Ubuntu/Debian установка выполняется следующими командами:
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io
После установки необходимо убедиться, что Docker запущен и настроен на автоматический запуск при загрузке системы: sudo systemctl enable docker && sudo systemctl start docker. Также рекомендуется добавить текущего пользователя в группу docker для выполнения команд без sudo: sudo usermod -aG docker $USER.
Установка kubeadm, kubelet и kubectl
Kubeadm — это инструмент, который предоставляет команду kubeadm init и kubeadm join для создания кластера Kubernetes лучшими практиками. Kubelet — это агент, который запускается на каждом узле в кластере и обеспечивает, чтобы контейнеры работали в подах. Kubectl — это инструмент командной строки для взаимодействия с кластером Kubernetes.
Для установки этих компонентов необходимо добавить репозиторий Kubernetes и установить пакеты:
sudo apt-get update && sudo apt-get install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
Команда apt-mark hold предотвращает автоматическое обновление этих пакетов, что важно для стабильности кластера. После установки необходимо убедиться, что kubelet запущен: sudo systemctl enable kubelet && sudo systemctl start kubelet.
Инициализация главного узла
Инициализация главного узла выполняется командой sudo kubeadm init. Однако перед этим рекомендуется настроить некоторые параметры. Для кластера с одним сетевым интерфейсом можно использовать команду:
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
Параметр --pod-network-cidr указывает диапазон IP-адресов для подов. Значение 10.244.0.0/16 используется сетевой подсистемой Flannel, которая является популярным выбором для сетевых плагинов Kubernetes. Процесс инициализации может занять несколько минут, так как kubeadm загружает необходимые образы контейнеров и настраивает компоненты управления.
После успешной инициализации вы увидите сообщение с командой для присоединения рабочих узлов и инструкциями по настройке kubectl для обычного пользователя. Важно сохранить эту информацию, особенно токен присоединения, который понадобится для добавления рабочих узлов. Также будет показана команда вида kubeadm join с параметрами, которую нужно выполнить на рабочих узлах.
Настройка kubectl для обычного пользователя
Для использования kubectl без sudo необходимо выполнить следующие команды:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
После этого можно проверить состояние кластера командой kubectl get nodes. Главный узел будет отображаться со статусом NotReady, так как сетевая подсистема еще не установлена. Это нормально на данном этапе.
Установка сетевого плагина
Сетевой плагин необходим для обеспечения сетевого взаимодействия между подами на разных узлах. Flannel — это простой и легкий сетевой плагин, хорошо подходящий для начинающих. Установка выполняется одной командой:
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
После применения манифеста необходимо подождать несколько минут, пока все компоненты Flannel не будут развернуты. Проверить статус можно командой kubectl get pods -n kube-system. Когда все поды в пространстве имен kube-system перейдут в состояние Running, сетевой плагин будет готов к работе.
Альтернативными сетевыми плагинами являются Calico, Weave Net и Cilium. Calico предлагает более продвинутые функции сетевой политики, Weave Net прост в установке, а Cilium работает на основе eBPF и предоставляет расширенные возможности безопасности и наблюдения.
Присоединение рабочих узлов
Для присоединения рабочих узлов к кластеру необходимо выполнить на каждом из них команду, которая была показана при инициализации главного узла. Обычно она выглядит так:
sudo kubeadm join :6443 --token <токен> --discovery-token-ca-cert-hash sha256:<хэш>
Если токен утерян или истек его срок действия (по умолчанию 24 часа), можно создать новый токен на главном узле командой kubeadm token create --print-join-command. После выполнения команды присоединения на рабочем узле можно вернуться на главный узел и проверить статус узлов командой kubectl get nodes. Через несколько минут рабочие узлы должны перейти в состояние Ready.
Развертывание первого приложения
После настройки кластера можно развернуть тестовое приложение. Простейший пример — развертывание nginx:
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
Первая команда создает развертывание (deployment) nginx, вторая — создает сервис для доступа к нему. Чтобы получить порт, на котором доступен сервис, выполните kubectl get svc nginx. В выводе будет указан порт в формате 80:3XXXX/TCP, где 3XXXX — это порт на узле. Открыв в браузере http://
Основные команды kubectl для начинающих
Освоение kubectl — ключевой аспект работы с Kubernetes. Вот основные команды, которые нужно знать:
kubectl get <ресурс>— получение списка ресурсов (pods, nodes, deployments, services)kubectl describe <ресурс> <имя>— подробная информация о конкретном ресурсеkubectl logs— просмотр логов подаkubectl exec -it— выполнение команд в контейнере-- /bin/bash kubectl apply -f <файл.yaml>— применение конфигурации из файлаkubectl delete <ресурс> <имя>— удаление ресурсаkubectl scale deployment <имя> --replicas=<число>— масштабирование развертывания
Управление конфигурацией с помощью YAML-файлов
Хотя многие операции можно выполнять с помощью команд kubectl, лучшей практикой является использование YAML-файлов для описания желаемого состояния. Пример простого развертывания в YAML:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 3
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
Для применения этой конфигурации сохраните ее в файл deployment.yaml и выполните kubectl apply -f deployment.yaml. YAML-файлы позволяют версионировать конфигурацию, совместно работать над ней и применять принципы инфраструктуры как кода (Infrastructure as Code).
Мониторинг и отладка кластера
Для мониторинга состояния кластера Kubernetes предоставляет несколько встроенных инструментов. Команда kubectl get events --watch показывает события в кластере в реальном времени. Для получения подробной информации о проблемах можно использовать kubectl describe pod <имя-пода>, которая покажет события, связанные с конкретным подом, включая ошибки планирования, проблемы с образами и сбои контейнеров.
Для визуального мониторинга можно установить Kubernetes Dashboard — веб-интерфейс для управления кластером. Установка выполняется командами:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
kubectl proxy
После этого дашборд будет доступен по адресу http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/.
Резервное копирование и восстановление
Регулярное резервное копирование конфигурации кластера — важная практика. Для резервного копирования объектов Kubernetes можно использовать инструмент Velero (ранее Heptio Ark). Однако для начала можно выполнять простые резервные копии с помощью kubectl:
kubectl get all --all-namespaces -o yaml > backup.yaml
Эта команда сохранит все ресурсы во всех пространствах имен в YAML-формате. Для восстановления достаточно выполнить kubectl apply -f backup.yaml. Важно отметить, что этот метод не сохраняет состояние приложений (данные в томах), только их конфигурацию.
Безопасность базового кластера
Базовые меры безопасности для кластера Kubernetes включают:
- Использование пространств имен для изоляции ресурсов
- Настройка RBAC (Role-Based Access Control) для управления доступом
- Регулярное обновление Kubernetes и компонентов кластера
- Использование Network Policies для ограничения сетевого трафика между подами
- Сканирование образов контейнеров на наличие уязвимостей
Для начала можно создать отдельное пространство имен для приложения: kubectl create namespace my-app и развертывать приложение в нем, указав --namespace=my-app в командах kubectl или добавив namespace: my-app в YAML-файлы.
Распространенные проблемы и их решение
При работе с Kubernetes новички часто сталкиваются с определенными проблемами. Если поды не запускаются, проверьте статус командой kubectl describe pod — часто проблема в недоступности образа или недостатке ресурсов. Если узел показывает статус NotReady, проверьте, запущены ли компоненты kubelet и docker: systemctl status kubelet docker.
Проблемы с сетью могут проявляться в невозможности соединения между подами на разных узлах. Убедитесь, что сетевой плагин установлен и все его поды работают: kubectl get pods -n kube-system | grep flannel (или calico/weave в зависимости от установленного плагина). Также проверьте, что брандмауэр не блокирует необходимые порты (6443 для API, 2379-2380 для etcd, 10250 для kubelet).
Дальнейшие шаги в изучении Kubernetes
После освоения базовой установки и настройки рекомендуется углубиться в следующие темы:
- Использование Helm — менеджера пакетов для Kubernetes
- Настройка Ingress-контроллеров для управления входящим трафиком
- Работа с Persistent Volumes для хранения данных
- Изучение StatefulSets для управления stateful-приложениями
- Настройка автоматического масштабирования (Horizontal Pod Autoscaler)
- Использование ConfigMaps и Secrets для управления конфигурацией
- Внедрение CI/CD-пайплайнов с Kubernetes
Kubernetes имеет обширную экосистему и постоянно развивается. Регулярное изучение документации, участие в сообществе и практика на реальных проектах — лучший способ стать компетентным администратором или разработчиком Kubernetes.
Заключение
Установка и настройка Kubernetes для начинающих может показаться сложной задачей, но, следуя пошаговым инструкциям, можно создать рабочий кластер за относительно короткое время. Ключевые моменты — правильная подготовка инфраструктуры, последовательная установка компонентов и понимание основных концепций системы. Kubernetes открывает возможности для построения отказоустойчивых, масштабируемых приложений и является ценным навыком в современной ИТ-индустрии. Начинайте с простого кластера, экспериментируйте с развертыванием приложений и постепенно углубляйте свои знания, осваивая более продвинутые функции этой мощной системы оркестрации контейнеров.
Добавлено: 09.04.2026
