Как провести развёртывание Kubernetes-кластеров: пошаговая инструкция

Для управления и запуска контейнеров Docker используется кластер Kubernetes, поэтому начинающим специалистам нужно уметь выполнять его развёртывание. В данной статье мы рассмотрим этот процесс на серверах с поддержкой ОС Ubuntu.

Что такое Kubernetes-кластер

Kubernetes — мощная и популярная платформа оркестровки контейнеров с открытым исходным кодом, ставшая неотъемлемым инструментом современной разработки программного обеспечения. Она позволяет пользователям легко развертывать, управлять и масштабировать приложения на кластере компьютеров.

Kubernetes состоит из нескольких нод (физических или виртуальных серверов), которые объединяются в единую систему управления. Каждая нода выполняет определенные функции, такие как хранение и запуск контейнеров.

Кластеры Kubernetes представляют собой самоуправляемые группы контейнеров, которые могут использоваться для надежного развертывания приложений в нескольких центрах обработки данных или облачных средах. Это набор физических или виртуальных компьютеров (узлов), на которых работает программное обеспечение Kubernetes.

Узлом может быть любой компьютер или сервер, на котором установлено программное обеспечение операционной системы Kubernetes. Для использования возможностей Kubernetes необходим как минимум один главный узел, который будет выступать в качестве точки управления и координировать работу всех компонентов кластера, а также один или несколько рабочих узлов, на которых будут запускаться контейнеры приложений. В зависимости от организационных потребностей и размера инфраструктуры могут потребоваться и другие компоненты, такие как прокси-серверы, узлы обслуживания хранилищ и т. д., но они не всегда необходимы для базового развертывания и масштабирования.

Преимущества Kubernetes для DevOps

Основным преимуществом использования кластера Kubernetes является его способность обеспечить автоматизированное развертывание, управление и масштабирование контейнерных приложений на нескольких узлах при минимальных усилиях со стороны разработчиков и администраторов. Автоматизация этих процессов позволяет создать эластичную инфраструктуру, в которой разработчики могут сосредоточиться на кодировании, а не на ручном управлении серверами, что ускоряет развертывание и делает его гораздо более экономичным по сравнению с традиционными системами (которые предполагают ручное управление).

Кроме того, это позволяет быстро наращивать мощности в случае необходимости, не прибегая к покупке нового оборудования или серверов — вместо этого они используют то, что уже настроено автоматически в существующей инфраструктуре с помощью API-интерфейсов Kubernetes.

Преимущества использования кластера Kubernetes весьма значительны.

  • Снижение затрат за счет автоматизации.
  • Повышение гибкости за счет увеличения масштабируемости.
  • Более эффективное использование ресурсов, поскольку объединение нужно для достижения оптимальной эффективности.
  • Повышение надежности, так как персоналу не нужно вручную вмешиваться в процесс добавления или удаления серверов.
  • Упрощение обслуживания за счет автоматического исправления и обновления.
  • Повышение безопасности за счет улучшения возможностей мониторинга и анализа журналов и т. д.

Все эти факторы делают ее идеальной для распределенных сред, где требуется быстрое выделение ресурсов в ответ на изменение рабочей нагрузки.

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

Развёртывание представляет собой процесс создания и настройки кластера, состоящего из нескольких узлов (нод), которые работают вместе для обеспечения надежности, масштабируемости и отказоустойчивости вашего приложения.

Рассмотрим основные способы.

Развёртывание кластера на Ubuntu

Для развёртывания кластера на серверах с поддержкой ОС Ubuntu нужно выполнить несколько шагов. Ниже представлены команды и объяснение, что они делают.

  1. Создаём для каждой ноды.

Создаём ключ.

ssh-keygen

Указываем флаг -t, чтобы уточнить тип ключа. В нашем примере это RSA.

ssh-keygen -t rsa

Используем флаг -b для разрядности.

ssh-keygen -b 2048 -t rsa

Дополнительно нужно указать ключ к файлу с ключами, обычно он имеет такой вид:

/home/user_name/ .ssh/id_rsa.

После введения актуального пути нажмите Enter и введите пароль.

Программа автоматически создаст пару открытого и закрытого ключа. Открытый будет иметь аналогичное название с закрытым с добавлением в конце .pub.

  1. Устанавливаем пакеты.

Устанавливаем соединение с с worker node для обновления.

apt-get update

Ставим пакеты. В данном случае -y задаёт автоматические ответы «да» на системные запросы.

sudo apt-get install apt-transport-https ca-certificates curl -y

  1. Получаем ключ GPG.

sudo mkdir \

-p /etc/apt/keyrings

curl -fsSL https://download.docker.com/linux/ubuntu/gpg \

| sudo gpg – dearmor -o /etc/apt/keyrings/docker.gpg

  1. Ставим Docker.

Вводим команду, где your_URL' – это адрес нужного репозитория.

sudo add-apt-repository 'deb [arch=amd64] your_URL'

Обновляем пакеты.

sudo apt update

Набираем инструкцию.

sudo apt install docker-ce -y

Делаем проверку.

sudo docker run hello-world

  1. Ставим модули.

Рассмотрим 3 модуля Kube, которые нам понадобятся.

  • Kubelet —контролирует состояние контейнеров и нужен для каждой ноды.
  • Kubeadm — помогает автоматизировать установку и настройку других модулей и тоже нужен для всех нод.
  • Kubectl —запускает инструкции.

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

apt-get install -y kubelet kubeadm kubectl

Перезагружаем.

rm /etc/containerd/config.toml

systemctl restart containerd

  1. Создаём кластер

Открываем раздел резервных копий, создаём точку восстановления.

Преобразуем одну из worker node в master node.

kubeadm init --pod-network-cidr=10.244.0.0/16

Система выдаст сообщение о выполнении действия.

Смотрим на последнюю строчку и сохраняем код токена.

  1. Запускаем кластер.

export KUBECONFIG=$HOME/admin.conf

Разрешаем запуск контейнеров.

kubectl taint nodes --all node-role.kubernetes.io/master-

  1. Настраиваем внутрисетевое взаимодействие.

Ставим SDN Flannel и тестируем.

kubectl -n kube-system get pods

  1. Получаем токен.

Если потеряли его, введите команду.

kubeadm token list

Приступаем к развертыванию кластера, это нужно успеть сделать за 24 часа, пока действует токен.

kubeadm token create --print-join-command

  1. Подключаем рабочие ноды.

Укажите актуальный IP, а в конце добавьте токен.

kubeadm join 172.31.43.204:6443 --token fg691w.pu5qexz1n654vznt

--discovery-token-ca-cert-hash

  1. Тестируем.

kubectl get pods --all-namespaces

kubectl get nodes

В ответ система должна выдать значения Running и Ready.

Как создать и развернуть кластер при помощи vCloud Directo

Для развёртывания Kubernetes-кластера можно использовать также vCloud Director — инфраструктурный сервис, предоставляемый VMware, который позволяет автоматически управлять виртуальными машинами и ресурсами.

С помощью vCloud Director можно создать несколько виртуальных машин для каждой ноды кластера и настроить необходимые параметры, такие как количество ресурсов и сетевые настройки. Затем можно развернуть Kubernetes на каждой виртуальной машине с использованием инструкций, предоставляемых официальным сайтом Kubernetes.

Как развернуть кластер Kubernetes через Azure Kubernetes

Создаём кластер Azure CLI или PowerShell, выставив подходящие параметры во второй, третьей и последней строчках.

az aks create \

  --resource-group myResourceGroup_name_here \

  --name myAKSCluster_name_here \

  --node-count 2 \

  --generate-ssh-keys \

  --attach-acr <acrName_here>

Готовое решение

Если не хотите самостоятельно заниматься развёртыванием кластера, можно приобрести готовое решение с подходящей конфигурацией. Вам останется только изменить параметры под собственные цели.

Здесь можно выбрать Сервер с поддержкой ОС Ubuntu

Подведём итоги

Развёртывание Kubernetes-кластера — это сложный процесс, который требует знаний и опыта в области DevOps. В данной статье мы рассмотрели несколько способов развертывания кластера на серверах с поддержкой ОС Ubuntu.

Независимо от выбранного способа, развёртывание кластера Kubernetes позволяет создать мощную платформу для управления контейнеризированными приложениями и обеспечить их горизонтальное масштабирование и отказоустойчивость.

Всё ещё остались вопросы?