База знаний

Как развернуть Kubernetes (K8S)

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

Кластер — это единица объединённых вычислительных ресурсов, которой оперирует Kubernetes. Кластер состоит из мастер-узла (master node) и одного или нескольких рабочих узлов (worker node). На этих узлах запускаются контейнеризированные приложения. Kubernetes отслеживает состояние и работоспособность узлов, обеспечивая автоматическое управление и масштабирование.

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

Технические требования для создания кластера

  • Минимум один мастер-узел (master node) и один рабочий узел (worker node)
  • Наличие внешнего IP-адреса у каждого сервера (узла)
  • Серверы (узлы) должны быть расположены в одной локальной сети
  • Минимальная конфигурация каждого узла: 2 vCPU и 2 Гб памяти

Примечание. Указанная конфигурация является минимальной для простой взаимосвязи между узлами кластера и при небольшом количестве запущенных контейнеров. С ростом нагрузки кластеру могут потребоваться дополнительные ресурсы. Добавить ресурсы можно на странице Серверы → кнопка Изменить ресурсы (при этом потребуется перезагрузка сервера).

  • Наличие SSH-ключей для доступа к каждому серверу (узлу)

Создание рабочего узла для ОС Ubuntu

Шаг 1. Создайте виртуальный сервер под ОС Ubuntu со следующими ресурсами:

  • минимальное количество процессоров (vCPU) — 2
  • минимальный объём оперативной памяти — 4 Гб
  • минимальный объём сетевого системного диска — 30 Гб

Присвойте серверу внешний IP-адрес. Сгенерируйте SSH-ключи для сервера.

Шаг 2. Подключитесь к серверу через консоль (например, Putty), авторизуйтесь и обновите источники приложений Ubuntu:

apt-get update

Далее выполните следующую последовательность команд:

  1. Установите необходимые пакеты, выполнив команды:

sudo apt-get install \ ca-certificates \ curl \ gnupg \ lsb-release

  1. Добавьте GPG ключ Docker:

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. Используйте следующую команду для настройки репозитория:

echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

  1. Установите Docker:

sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

  1. Запустите hello-world и убедитесь, что Docker корректно установлен:

sudo docker run hello-world

Если получен ответ «Hello from Docker!», установка выполнена успешно.

Шаг 3. Установите компоненты Kubernetes:

  • Kubelet — агент, который требуется установить на каждом узле кластера, отвечает за исправность контейнеров.
  • Kubeadm — инструмент для автоматизации установки и настройки компонентов Kubernetes, также устанавливается на каждом узле.
  • Kubectl — позволяет запускать команды для кластеров.
apt-get update && apt-get install -y apt-transport-https
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add - 
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb http://apt.kubernetes.io/ kubernetes-xenial main
 
EOF

apt-get update
apt-get install -y kubelet kubeadm kubectl

Далее введите следующие команды:

rm /etc/containerd/config.toml

systemctl restart containerd

Шаг 4. На предыдущих шагах выполняется настройка рабочего узла. Сделайте снапшот его состояния, чтобы развернуть на его основе необходимое количество рабочих узлов.

  1. На странице Серверы выберите созданный ранее сервер узла и остановите его работу.
  2. В правом меню выберите вкладку Снапшоты → нажмите кнопку Создать снапшот.
  3. После того, как снапшот будет создан, в левом меню выберите страницу Снапшоты.
  4. Выберите созданный снапшот и нажмите кнопку Восстановить сервер. Задайте уникальное имя для нового рабочего узла и дождитесь развёртывания нового сервера. Таким образом автоматически создаются рабочие ноды для будущего кластера.

Примечание. Снапшоты недоступны для серверов с локальным системным диском.

Внимание! Не производите никаких действий, кроме создания и восстановления снапшотов, с первым созданным узлом! Этот узел будет «шаблоном» для развёртывания новых узлов кластера.

Преобразование рабочего узла в мастер-узел

Шаг 5. Создайте из снапшота новый рабочий узел и преобразуйте его в мастер-узел, установив на него контрольную панель с помощью команды:

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

После завершения команды вы увидите следующее сообщение:

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

Шаг 6. Чтобы начать использовать кластер, выполните следующие команды:

cp /etc/kubernetes/admin.conf $HOME/

chown $(id -u):$(id -g) $HOME/admin.conf

export KUBECONFIG=$HOME/admin.conf

echo 'export KUBECONFIG=$HOME/admin.conf' >> $HOME/.bashrc

Примечание. Можете запустить мастер-узел из-под аккаунта root одной командой export KUBECONFIG=$HOME/admin.conf, но при этом после выхода из сеанса узел будет остановлен, и придётся всякий раз перезапускать его вручную.

Шаг 7. По умолчанию на мастер-ноде не запускаются контейнеры, только осуществляется мониторинг состояния кластера. Если хотите задействовать ресурсы мастера и разрешить запуск контейнеров, выполните команду:

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

Шаг 8. Чтобы настроить сетевое взаимодействие между контейнерами, установите SDN Flannel командой:

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

Шаг 9. Проверьте, что кластер запускается и работает, с помощью команды

kubectl -n kube-system get pods

Внимание! При выполнении команды kubeadm init существует вероятность, что CIDR не будет создан. В этом случае поды kube-flannel будут иметь статус CrashLoopbackOff. Проверить корректность создания CIDR можно командой:

sudo cat /etc/kubernetes/manifests/kube-controller-manager.yaml | grep -i cluster-cidr

Если команда возвращает пустое значение, CIDR создался с ошибкой. В этом случае необходимо выполнить сброс kubeadm при помощи команд:

kubeadm reset

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

Далее выполните все последующие действия, начиная с пункта 5.

Шаг 10. Получите токен авторизации, введя в консоль мастер-узла команду:

kubeadm token list

Примечание. Вы можете использовать также токен, полученный на шаге 5 при выполнении команды kubeadm init. Полученный токен действует 24 часа, в течение которых вы можете присоединять с его помощью рабочие узлы к кластеру. Если вы захотите добавить новые узлы позже, создайте новый токен командой:

kubeadm token create --print-join-command

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

Шаг 11. Для подключения нового рабочего узла к кластеру необходимо выполнить команду kubeadm join, используя полученный на предыдущем шаге токен:

kubeadm join 195.140.147.65:6443 --token ed580v.ot4pdxx0m555uzms --discovery-token-ca-cert-hash [ваш_токен]

Внимание! При выполнении команды kubeadm join может возникнуть следующая ошибка:

[ERROR CRI]: container runtime is not running

В этом случае введите в терминале:

rm /etc/containerd/config.toml

systemctl restart containerd

Затем повторно выполните команду kubeadm join.

Шаг 12. Проверить корректность работы всех подключенных узлов частей кластера можно из терминала мастер-узла при помощи команд:

kubectl get pods --all-namespaces

Значения всех позиций в выводе команды должно быть “Running”.

Следующая команда выдаст список из мастер-узла и всех подключенных к нему рабочих узлов кластера. Значения всех позиций в выводе команды должно быть “Ready”.

kubectl get nodes