Kubernetes – открытое программное обеспечение для оркестровки контейнеризированных приложений, автоматизации их развертывания, масштабирования и координации в условиях кластера. Чем этот хорош этот инструмент и почему стоит тратить время на его изучение? Перечислим основные преимущества Kubernetes:
● Быстрый deploy приложений;
● Удобное масштабирование развернутых приложений;
● Внутренние self-health;
● Нулевой простой при обновлениях приложений.
В первой статьи цикла мы займемся практическими вопросами и поднимем кластер k8s, а более подробно про оркестраторы расскажем в следующих частях цикла.
Варианты установки
Если вам интересно погрузиться в тему поглубже и буквально собрать k8s в ручном режиме, эта статья поможет. Поехали :)
Подготовка
В дальнейшем мы будем использовать созданный кластер для публикации различных сервисов и поэтому установку будет производить на VPS. Для кластера потребуется несколько виртуальных машин:
● Master node (CentOS 7, 1vCPU, RAM 2 ГБ, HDD 10 ГБ);
● Worker node (CentOS 7, 1vCPU, RAM 2 ГБ, HDD 10 ГБ);
● Worker node (CentOS 7, 1vCPU, RAM 2 ГБ, HDD 10 ГБ);
● Ingress node (CentOS 7, 2vCPU, RAM 8 ГБ, HDD 10 ГБ).
На всех узлах нашего кластера k8s установлена хост-система CentOS 7. Если вы хотите использовать другую хост-систему, ищите информацию на официальном сайте Kubernetes. Рассмотрим вариант развертывания с помощью Kubespray – набора ролей Ansible для установки и конфигурирования k8s.
Развертывание k8s
Для начала мы отключим файл/раздел подкачки и межсетевой экран на всех узлах кластера, а также сгенерируем и скопируем ключи SSH, чтобы Ansible мог ходить по хостам и творить свою магию:
Отключаем SWAP:
Отключаем firewall (на учебном стенде это допустимо, но на проде не стоит так делать не стоит):
Наша следующая задача – сгенерировать ключ SSH и скопировать его на все узлы будущего кластера, включая master (где ключ был изначально сгенерирован):
Теперь копируем ключ на оставшиеся хосты (команды выполняются на мастер-хосте):
Далее на master устанавливаем pip и git:
Если у вас используется старая версия Python, pip можно поставить следующим способом:
Подготовка платформы завершена. Мы по-прежнему находимся на мастер-хосте и до конца развертывания кластера с него не уйдем. За нас будет ходить Ansible :)
Для дальнейших действий потребуется репозиторий Kubespray. Клонируем его:
Устанавливаем зависимости для Kubespray, описанные в файле requirements.txt:
Подведем итог наших действий:
● На ноде master установлен Ansible;
● Сгенерирован и скопирован ssh ключ на все узлы кластера;
● Установлены необходимые зависимости из файла requirements.txt.
Конфигурация Kubespray
Чтобы Kubespray понимал, на какие узлы нужно устанавливать k8s, придется создать директорию с описанием конфигурации будущего кластера. Тему inventory в первой статье мы подробно разбирать не будем, поскольку она слишком обширная (рабочий inventory доступен по ссылке – скопируйте его).
Потребуется изменить IP-адреса. Ниже приведет пример inventory.ini c нашими адресами (у вас они будут другими):
Наш кластер состоит из 4 узлов:
- один master с компонентами Control Plane;
- один Ingress для маршрутизации трафика;
- два Workers, на которых будут запускаться сервисы.
Control Plane (API
server, etcd, Sheduler, Controle manager) собран на одной ноде. Это очень нехорошо: обычно в секции [kube-master]
больше одного узла, а в секции [etcd]
– более трех. Это связано с тем, что quorum собирается не меньше
чем на 3 узлах при нечетным общем количестве узлов в etcd. Поскольку речь идет об учебной площадке, наш вариант тоже имеет право на существование.
Отредактируем k8s-cluster/k8s-cluster.yml. Нужно поменять network plugin на
flannel
и имя нашего кластера на root.local
:
Теперь поправим
k8s-cluster/k8s-net-flannel.yml. Тут обычный regexp на сеть провайдера VPS (в нашем случае это 192.168.0.0/24
, но у вас подсеть может отличаться).
Исправляем:
Сборка кластера
Поскольку inventory у нас уже подготовлен, остается только запустить playbook на исполнение и минут 15 – 20 подождать, пока соберется кластер. Если у вас отвалится соединение SSH, и сборка прервется, ее можно будет запустить повторно – это не вызовет ошибок:
Кластер собран. Проверяем:
Последний штрих – добавляем роль нашей ноде с ingress:
Если повторно посмотреть на ingress, роль должна появиться:
Поздравляем! Вы практически вручную развернули кластер k8s, и теперь можно запустить в нем простенькое приложение. Это только начало большого пути в современное системное администрирование (или даже в DevOps). Более сложные шаги мы сделаем с вами вместе: в следующей статье разберемся с системой оркестрации, а затем перейдем к базовым конструкциям кластера k8s и развертыванию приложений. Удачи в обучении!
Комментарии