6.20 Деплоймент Kubernetes на примере Ubuntu
Kubernetes – это инструмент для автоматизации развертывания, масштабирования и управления контейнеризированными приложениями. Он позволяет легко запускать приложения в контейнерах и управлять их жизненным циклом.
Для тестирования и развертывания приложений нам нужен настроенный кластер Kubernetes. В статье мы рассмотрим развертывание кластера на одном сервере (single-node cluster
) и на нескольких узлах (multi-node cluster
), объясним нюансы установки и настройки, а также покажем, как запустить тестовое приложение.
В этой инструкции наш сервер выступит мастер-узлом, к которому затем будут подключаться другие узлы.
Требования к серверу
Перед началом работы необходимо убедиться, что ваш сервер соответствует минимальным требованиям:
- ОС: Ubuntu 22.04 или CentOS 8 (Ubuntu предпочтительнее, т.к. у него лучше поддержка Kubernetes);
- Процессор: 4 ядра и выше;
- ОЗУ: минимум 8 ГБ (для многонодовых кластеров рекомендуется 16 ГБ и выше);
- Диск: минимум 50 ГБ свободного места;
- Сетевое подключение: статический IP и открытые порты (
6443
,10250
,10255
,30000
-32767
и другие). - Kubernetes требует, чтобы
swap
был отключен, иначе kubelet работать не будет. На наших VPS это реализовано по умолчанию.
Для стабильной работы мастер-узла Kubernetes мы рекомендуем сервера на тарифе не менее Cloud-8.
Что такое мастер-узел, нода, под? Ознакомьтесь со связанной терминологией
Вот несколько ключевых понятий, которые стоит знать перед началом:
-
Контейнер — изолированная среда с приложением и всеми его зависимостями. Работает одинаково на любом сервере.
-
Под (Pod) — минимальная единица в Kubernetes, содержащая один или несколько контейнеров.
-
Манифест — YAML-файл с описанием объекта Kubernetes (например, развертывания или сервиса).
-
Нода (узел) — физическая или виртуальная машина в кластере.
-
Мастер-узел — главный узел, управляющий кластером.
-
Рабочий узел — узел, на котором запускаются контейнеры (поды).
-
Кластер – система связанных между собой узлов.
Пошаговая инструкция
Kubernetes использует контейнерный движок Docker для запуска контейнеров.
Совет: у нас существует отдельный, более детальный материал по установке и использованию Docker. Ознакомиться с ним можно по ссылке.
Настройка имен хостов (все узлы)
Начните с обновления файлов /etc/hosts и указания IP-адресов и имен хостов для каждого узла в кластере. Это обеспечит бесперебойную связь между главными и рабочими узлами.
- Откройте файл
/etc/hosts
:
sudo nano /etc/hosts
- Добавьте следующие записи. Это позволит разрешить разрешение имен хостов. Замените IP-адреса и имена хостов на свои актуальные для Ваших узлов:
Сохраните изменения и выйдите.
- Далее измените имена хостов в каждом узле:
sudo hostnamectl set-hostname "kubernetes-master-node"
sudo hostnamectl set-hostname "kubernetes-worker-node-1"
sudo hostnamectl set-hostname "kubernetes-worker-node-1"
- Чтобы изменения имени хоста вступили в силу, выполните:
exec /usr/bin/bash
- Чтобы проверить имя хоста в каждом узле, выполните команду:
hostname
Настройка сети Kubernetes IPv4 (все узлы)
Важно настроить сеть Kubernetes, чтобы модули могли взаимодействовать друг с другом и внешними средами без сбоев.
- Создайте файл конфигурации Kubernetes в каталоге
/etc/sysctl.d/
.
sudo nano /etc/sysctl.d/kubernetes-master-node.conf
Добавьте следующие строки:
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
- Сохраните и выйдите. Затем примените настройки, выполнив следующую команду:
sudo sysctl --system
Установка Docker
На все наши машины необходимо будет поставить Docker.
- Обновляем пакеты и ставим Docker:
sudo apt update && sudo apt install -y docker.io
- Проверяем версию Docker:
docker --version
- Добавляем Docker в автозагрузку:
sudo systemctl enable --now docker
- Добавляем текущего пользователя в группу Docker (чтобы не использовать sudo при запуске контейнеров):
sudo usermod -aG docker $USER
newgrp docker
- Проверяем работу Docker:
docker run hello-world
Если выводит сообщение о корректной установке — значит работает:
Настройка containerd
Установка Docker включает в себя containerd — облегченную среду выполнения контейнеров, которая упрощает запуск и управление контейнерами. Таким образом, настройте containerd, чтобы обеспечить его надежную работу в кластере Kubernetes. Сначала создайте отдельный каталог, как показано:
sudo mkdir /etc/containerd
- Далее создайте файл конфигурации по умолчанию для containerd.
sudo sh -c "containerd config default > /etc/containerd/config.toml"
- Обновите директиву
SystemdCgroup
, установив ее в значениеtrue
, как показано:
sudo sed -i 's/ SystemdCgroup = false/ SystemdCgroup = true/' /etc/containerd/config.toml
- Далее перезапустите службу containerd, чтобы применить внесенные изменения:
sudo systemctl restart containerd.service
- Обязательно проверьте, что служба containerd работает должным образом:
sudo systemctl status containerd.service
Что должно выдавать следующий результат:
Установка Kubernetes
Следующий шаг — установка самого Kubernetes.
Учтите: в настоящее время Kubernetes v1.31 является текущей версией. Обязательно проверьте наличие более новых версий перед установкой и соответственно модифицируйте команды.
sudo apt-get install curl ca-certificates apt-transport-https -y
- Добавьте ключ подписи Kubernetes GPG.
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.31/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
- После этого добавьте официальный репозиторий Kubernetes в свою систему.
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.31/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list
- После добавления обновите список источников, чтобы система распознала недавно добавленный репозиторий:
sudo apt update
Чтобы установить Kubernetes, необходимо установить три пакета: kubeadm
, kubelet
и kubectl
. Чтобы установить эти компоненты Kubernetes, выполните следующую команду:
sudo apt install kubelet kubeadm kubectl -y
Какова задача каждого из этих компонентов?
-
kubeadm: это утилита командной строки для настройки кластеров Kubernetes. Она автоматизирует настройку кластера, оптимизирует развертывание контейнеров и абстрагирует любые сложности в кластере. С помощью kubeadm вы можете инициализировать плоскость управления, настроить сеть и присоединить удаленный узел к кластеру.
-
kubelet: это компонент, который активно работает на каждом узле в кластере для контроля управления контейнерами. Он принимает инструкции от главного узла и обеспечивает работу контейнеров, как и ожидалось.
-
kubectl: это инструмент CLI для управления различными компонентами кластера, включая модули, узлы и кластер. Вы можете использовать его для развертывания приложений, а также для проверки, мониторинга и просмотра журналов.
Настройка кластера
- Инициализация кластера (только для мастер-узла):
sudo kubeadm init --pod-network-cidr=10.10.0.0/16
Учтите: параметр --pod-network-cidr
указывает диапазон IP-адресов для будущих подов во внутренней сети. Разные сетевые плагины (Flannel
, Calico
и др.) могут требовать разные значения.
После успешной инициализации появится команда для подключения рабочих узлов (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
- Проверяем работоспособность:
kubectl get nodes
Должен появиться мастер-узел (Ready
появится после установки сетевого плагина):
Установка сетевого плагина
Чтобы поды могли обмениваться данными, устанавливаем сетевой плагин. Например, Flannel:
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
Через минуту проверяем узлы:
kubectl get nodes
Теперь мастер-узел должен быть в состоянии Ready
:
Добавление рабочих узлов
На каждом рабочем узле устанавливаем Docker и Kubernetes, затем выполняем команду kubeadm join
, полученную при инициализации мастер-узла:
sudo kubeadm join <master-ip>:6443 --token <token> --discovery-token-ca-cert-hash <hash>
Проверяем, что узлы подключились:
kubectl get nodes
Развертывание тестового приложения
Создаем файл deployment.yaml
:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
Применяем манифест:
kubectl apply -f deployment.yaml
Проверяем:
kubectl get pods
Если видим работающие поды, значит, все настроено правильно.
Заключение
Теперь у вас есть готовый сервер для тестирования и развертывания приложений на Kubernetes. Мы рассмотрели установку, настройку и запуск тестового приложения.
Дальнейшие шаги могут включать:
- Настроить балансировщик нагрузки (
ingress-nginx
). - Добавить мониторинг (
Prometheus
,Grafana
). - Изучить управление конфигурациями (
ConfigMaps
,Secrets
). - Настроить CI/CD для автоматического развертывания.
На этой странице
Похожие статьи
- Панель управления aaPanel. Как установить панель aaPanel на чистый виртуальный/выделенный сервер
- Woocommerce. Установка и начальная настройка
- Панель управления Hestia. Как установить панель Hestia на чистый виртуальный/выделенный сервер
- Панель управления FastPanel. Как установить панель FastPanel на чистый виртуальный/выделенный сервер