Давайте дружить в Телеграме: рассказываем про новые фичи, общаемся в комментах, прислушиваемся к вашим идеям Подписаться

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

Роман Андреев
Роман Андреев
Технический писатель
28 февраля 2023 г.
1297
8 минут чтения
Средний рейтинг статьи: 5

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

Kubernetes для DevOps: развертывание, запуск и масштабирование

Для начала немного важной терминологии. Под кластером мы понимаем объединение ресурсов, находящееся под управлением Kubernetes. В состав кластера входит как минимум один мастер-узел, он же master node, и как минимум один рабочий, он же worker node. Узлы в руководствах нередко называются нодами. На нодах производится запуск контейнеров, Kube же обеспечивает возможности для отслеживания состояния нод, а также позволяет автоматически управлять и масштабировать кластер. Проще всего развернуть кластер Kubernetes следующим способом.

Разворачиваем кластер на Ubuntu: пошаговая инструкция

Для развертывания нам потребуются внешние IP для каждой ноды, при этом каждый узел нужно будет обеспечить 2 Гб RAM и 2 ядрами CPU. Для Ubuntu желательно увеличить объем RAM до 4 Гб, а также предусмотреть 30-35 Гб дискового пространства. Такой конфигурации хватит для старта, но учтите, что при увеличении числа работающих контейнеров может потребоваться резервирование новых виртуальных мощностей. Это нетрудно сделать «на лету» через панель управления Timeweb Cloud. 

Далее будем предполагать, что ОС у вас уже установлена и есть два сервера (ноды), один из которых будет использоваться в качестве главного, master, а другой — рабочего, worker.

Шаг 1. Генерация ключей SSH

Для каждой ноды понадобится сгенерировать SSH-ключи, чтобы вы могли управлять кластером удаленно. Это делается при помощи следующей инструкции:

ssh-keygen

Вы можете использовать флаг -t, чтобы указать тип создаваемого ключа. Например, для создания ключа RSA выполните:

ssh-keygen -t rsa

Также вы можете использовать флаг -b для указания разрядности:

ssh-keygen -b 2048 -t rsa

Теперь укажите путь к файлу для хранения ключа. Путь по умолчанию и имя файла предлагаются обычно в таком формате: /home/user_name/ .ssh/id_rsa. Чтобы принять путь и имя файла по умолчанию, нажмите Enter сразу. В противном случае введите требуемые путь и имя файла, а затем нажмите Enter. Далее вам будет предложено ввести пароль. Это рекомендуется сделать для защиты ключа от несанкционированного использования.

После подтверждения пароля программа сгенерирует пару ключей SSH, открытого и закрытого, а также сохранит их по указанному пути. Имя файла открытого ключа создается автоматически путем добавления .pub к имени файла закрытого ключа. Например, если имя файла закрытого ключа SSH — id_rsa, имя файла открытого ключа будет id_rsa.pub.

Запишите путь и имена файлов закрытого и открытого ключей. Для использования на удаленном устройстве необходимо указать значение открытого ключа SSH. А при входе вы должны указать путь к соответствующему закрытому ключу SSH и ввести пароль при появлении запроса.

И еще один важный момент, касающийся безопасности. Ни в коем случае не делитесь закрытым ключом SSH, иначе доступ к серверу сможет получить кто угодно. Расшаривать можно только открытый ключ с «говорящим» расширением .pub.

Шаг 2. Установка пакетов

Теперь давайте установим соединение с worker node, чтобы обновить используемые приложения. Вводим:

apt-get update

Далее через sudo мы ставим требуемые пакеты при помощи инструкции install. Имена пакетов разделяем пробелом:

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

Не забудьте про -y в конце. Данный флаг нужен, чтобы автоматически отвечать «да» на все запросы системы.

Шаг 3. Получение ключа 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

Шаг 4. Устанавливаем Docker

Наконец, поставим и сам Docker. Получаем пакет:

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

Вместо your_URL_here укажите адрес реального репозитория, который определяется типом и версией установленной ОС. Далее обновляем пакеты:

sudo apt update

Теперь набираем инструкцию:

sudo apt install docker-ce -y

И проверяем корректность установки вот такой инструкцией:

sudo docker run hello-world

Тем же, у кого стоит Ubuntu, предлагаем воспользоваться расширенной инструкцией.

Шаг 5. Установка модулей Kubernetes

Теперь начинаем ставить модули Kube, из которых нам понадобятся следующие три:

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

Установка требуемых модулей выполняется простой инструкцией с их перечислением:

apt-get install -y kubelet kubeadm kubectl

После этого выполняем перезагрузку:

rm /etc/containerd/config.toml
systemctl restart containerd

Шаг 6. Создание кластера

После настройки одной worker node можно легко создать и развернуть ее копии в нужном количестве при помощи снапшотов. Для этого в панели управления Timeweb Cloud перейдите в раздел резервных копий и нажмите на создание точки восстановления. После этого резервная копия может быть легко скопирована на другой сервер.

Далее нам потребуется преобразовать одну из worker node в master node, с которой будем управлять созданным кластером. Чтобы сделать это, вводим инструкцию:

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

В ответ мы получим большое сообщение, начинающееся со строчки Your Kubernetes control-plane has initialized successfully! Это означает, что получилось создать кластер.

Теперь перейдите на последнюю строку, которая представляет собой код токена. Не забудьте скопировать его и сохранить, например, в текстовом редакторе, поскольку этот код пригодится для дальнейшей настройки.

Шаг 7. Запуск кластера

Делаем это инструкцией:

export KUBECONFIG=$HOME/admin.conf 

Далее разрешаем запускать контейнеры следующим кодом:

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

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

Шаг 8. Обеспечение внутрисетевого взаимодействия

Для этого рекомендуется поставить SDN Flannel, свежую версию которого можно найти здесь. Далее для проверки вводим:

kubectl -n kube-system get pods

Шаг 9. Получение и создание токена

Теперь осталось получить токен, чтобы авторизоваться. Добавьте заранее сохраненный токен или, если забыли про это, введите:

kubeadm token list

Токен создан, приступаем к развертыванию кластера. Учтите, что токен действует всего сутки, но вы всегда можете сгенерировать новый при помощи следующей инструкции:

kubeadm token create --print-join-command

Шаг 10. Подключение рабочих нод

Итак, наш кластер работает. Начинаем подключать к нему worker node, используя токен (значения IP и токена приведены просто в качестве примера):

kubeadm join 172.31.43.204:6443 --token fg691w.pu5qexz1n654vznt --discovery-token-ca-cert-hash [вставьте сгенерированный токен сюда и уберите квадратные скобки]

При возникновении ошибки (такое иногда случается) просто перезапускаем кластер и снова вводим приведенную выше инструкцию kubeadm join.

Шаг 11. Проверяем работоспособность

Вот и всё, осталось посмотреть, отвечают ли узлы. Это делают следующие инструкции:

kubectl get pods --all-namespaces
kubectl get nodes

Если в ответных сообщениях Kube будут выведены значения Running и Ready, значит всё сделано правильно, начинайте работать.

Теперь кратко рассмотрим другие способы развертывания кластера, в частности через приложения VMware и Azure.

Другие способы развертывания

Приведенный выше способ не единственный, это можно сделать и по-другому. Например, при помощи vCloud Director:

  • Чтобы развернуть кластер таким способом, вам потребуется установленный vCloud Director с CSE и, разумеется, сам Kube с подключенным модулем Kubectl, о котором мы уже рассказывали выше.

CSE или Container service extension представляет собой расширение для продуктов VMware, обеспечивая полную поддержку кластеров Kubernetes в виртуальной инфраструктуре. Системные требования к кластеру и его нодам такие же, как и в приведенном примере выше. Единственной проблемой здесь может быть доступность продуктов VMware, если вы работаете в России. Но если вы по-прежнему используете ПО от VMware, то процесс установки и развертывания кластера Kube через vCloud Director описан в документации разработчика.

  • Через Azure Kubernetes. Нам понадобится Azure CLI или PowerShell.

Кластер в Azure CLI создается через инструкцию az aks create со следующими параметрами (подставьте свои значения вместо myResourceGroup_name_here, myAKSCluster_name_here и acrName_here):

az aks create \
    --resource-group myResourceGroup_name_here \
    --name myAKSCluster_name_here \
    --node-count 2 \
    --generate-ssh-keys \
    --attach-acr <acrName_here>

Если же вы используете PowerShell, то та же инструкция будет такой (не забудьте указать свои корректные значения вместо myResourceGroup_name_here, myAKSCluster_name_here):

New-AzAksCluster -ResourceGroupName myResourceGroup_name_here -Name myAKSCluster_name_here -NodeCount 2 -GenerateSshKey -AcrNameToAttach <acrName_here>
  • Разумеется, Ubuntu является не единственной ОС, где можно развернуть кластер. Для этого подойдут почти все Linux-подобные системы, однако учитывайте, что вводимые инструкции могут немного различаться. Так, если в Ubuntu тот же Docker устанавливается так: apt-get install -y docker.io, то, например, в CentOS эта инструкция будет выглядеть немного по-другому: yum install -y docker.

А еще один вариант развертывания кластера — обратиться в Timeweb Cloud за готовым решением KaaS (Kubernetes as a Service). Вам не придется выполнять шаги по установке ОС и оркестратора, так как сервер уже настроен и готов к работе. Просто выберите подходящую конфигурацию и перенастройте отдельные параметры под свои задачи, используя нужные части данного руководства.

Зарегистрируйтесь и начните пользоваться
сервисами Timeweb Cloud прямо сейчас

15 лет опыта
Сосредоточьтесь на своей работе: об остальном позаботимся мы
165 000 клиентов
Нам доверяют частные лица и компании, от небольших фирм до корпораций
Поддержка 24/7
100+ специалистов поддержки, готовых помочь в чате, тикете и по телефону