Как развернуть Kubernetes
Kubernetes (K8S) — это система управления контейнеризированными приложениями. Kubernetes позволяет взаимодействовать с кластером, осуществляя автоматизацию развёртывания, масштабирования и управления приложениями в контейнерах.
Кластер — это единица объединённых вычислительных ресурсов, которой оперирует Kubernetes. Кластер состоит из мастер-узла (master node) и одного или нескольких рабочих узлов (worker node). На этих узлах запускаются контейнеризированные приложения. Kubernetes отслеживает состояние и работоспособность узлов, обеспечивая автоматическое управление и масштабирование.
На данный момент Kubernetes ещё не предоставляется сервисом CLO в качестве штатной услуги. Можете установить Kubernetes на серверах CLO самостоятельно по инструкции ниже.
Технические требования для создания кластера
- Минимум один мастер-узел (master node) и один рабочий узел (worker node)
- Наличие внешнего IP-адреса у каждого сервера (узла)
- Серверы (узлы) должны быть расположены в одной локальной сети
- Минимальная конфигурация каждого узла: 2 vCPU и 2 Гб памяти
Примечание. Указанная конфигурация является минимальной для простой взаимосвязи между узлами кластера и при небольшом количестве запущенных контейнеров. С ростом нагрузки кластеру могут потребоваться дополнительные ресурсы. Добавить ресурсы можно на странице Серверы → кнопка Изменить ресурсы (при этом потребуется перезагрузка сервера).
- Наличие SSH-ключей для доступа к каждому серверу (узлу)
Создание рабочего узла для ОС Ubuntu
- Создайте виртуальный сервер под ОС Ubuntu со следующими ресурсами:
- 2 — минимальное количество процессоров (vCPU)
- 4 ГБ — минимальный объём оперативной памяти
- 30 Гб — минимальный объём сетевого системного диска
Присвойте серверу внешний IP-адрес. Сгенерируйте SSH-ключи для сервера.
- Подключитесь к серверу через консоль (например, Putty), авторизуйтесь и обновите источники приложений Ubuntu:
apt-get update
- Установите необходимые пакеты, выполнив команды:
sudo apt-get install \ ca-certificates \ curl \ gnupg \ lsb-release
- Добавьте 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
- Используйте следующую команду для настройки репозитория:
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
- Установите Docker:
sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
- Запустите hello-world и убедитесь, что Docker корректно установлен:
sudo docker run hello-world
- Установите необходимые пакеты, выполнив команды:
Если получен ответ «Hello from Docker!», установка выполнена успешно.
- Установите компоненты 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
- На предыдущих шагах выполняется настройка рабочего узла. Сделайте снапшот его состояния, чтобы развернуть на его основе необходимое количество рабочих узлов.
- На странице Серверы выберите созданный ранее сервер узла и остановите его работу.
- В правом меню выберите вкладку Снапшоты → нажмите кнопку Создать снапшот.
- После того, как снапшот будет создан, в левом меню выберите страницу Снапшоты.
- Выберите созданный снапшот и нажмите кнопку Восстановить сервер. Задайте уникальное имя для нового рабочего узла и дождитесь развёртывания нового сервера. Таким образом автоматически создаются рабочие ноды для будущего кластера.
Внимание! Снапшоты недоступны для серверов с локальным системным диском.
Внимание! Не производите никаких действий, кроме создания и восстановления снапшотов, с первым созданным узлом! Этот узел будет «шаблоном» для развёртывания новых узлов кластера.
Преобразование рабочего узла в мастер-узел
- Создайте из снапшота новый рабочий узел и преобразуйте его в мастер-узел, установив на него контрольную панель с помощью команды:
kubeadm init --pod-network-cidr=10.244.0.0/16
После завершения команды вы увидите следующее сообщение:

Kubernetes сообщает, что кластер создан. Вы можете заранее скопировать последнюю строчку выводимых данных (цифровой токен) из вашей консоли, чтобы использовать её на шаге 10.
- Чтобы начать использовать кластер, выполните следующие команды:
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, но при этом после выхода из сеанса узел будет остановлен, и придётся всякий раз перезапускать его вручную.
- По умолчанию на мастер-ноде не запускаются контейнеры, только осуществляется мониторинг состояния кластера. Если хотите задействовать ресурсы мастера и разрешить запуск контейнеров, выполните команду:
kubectl taint nodes --all node-role.kubernetes.io/master-
- Чтобы настроить сетевое взаимодействие между контейнерами, установите SDN Flannel командой:
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
- Проверьте, что кластер запускается и работает, с помощью команды
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.
- Получите токен авторизации, введя в консоль мастер-узла команду:
kubeadm token list
Примечание. Вы можете использовать также токен, полученный на шаге 5 при выполнении команды
kubeadm init.
Полученный токен действует 24 часа, в течение которых вы можете присоединять с его помощью рабочие узлы к кластеру. Если вы захотите добавить новые узлы позже, создайте новый токен командой:
kubeadm token create --print-join-command
Развёртывание кластера Kubernetes
- Для подключения нового рабочего узла к кластеру необходимо выполнить команду 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.
- Проверить корректность работы всех подключенных узлов частей кластера можно из терминала мастер-узла при помощи команд:
kubectl get pods --all-namespaces
Значения всех позиций в выводе команды должно быть “Running”.
Эта команда выдаст список из мастер-узла и всех подключенных к нему рабочих узлов кластера. Значения всех позиций в выводе команды должно быть “Ready”.
kubectl get nodes