Для управления кластерами в PKS используется интерфейс командной строки PKS CLI; другая возможность управления: зарегистрировать PKS в VMware Admiral, например, встроенном в vRealize Automation и управлять кластерами из него. Однако, автоматизировать работу с кластерами Admiral не позволит, это всего лишь GUI. Что если нужна возможность сделать единый процесс, объединив создание кластера, регистрацию его в DNS, постановку на мониторинг в vROps, создание проекта в Harbor и добавление прав пользователям?
В качестве одного из решений можно использовать пакет интеграции vRA-PKS из следующей статьи: Provision and Manage Kubernetes Clusters as-a-Service using vRealize Automation and Pivotal Container Service. Автор предлагает комплект базовых процессов для управления кластерами kubernetes на PKS. Что реализовано:
- Для работы с кластерами kubernetes вызываются команды PKS CLI с удаленной Linux-машины через SSH;
- Создан тип данных DynamicTypes:PKS.PKSCluster и разработаны два процесса для него: поиск всех кластеров и поиск кластера по ID;
- Данные о кластерах хранятся в конфигурационных элементах vRO (для сокращения количества обращений к серверу);
- Добавлены процессы вызова команд PKS на создание, изменение и удаление кластера;
- Тип PKSCluster зарегистрирован в vRA (Custom Resources), добавлены XaaS-блюпринт создания кластера и два действия (Resources Actions): изменение количества рабочих нод и удаление кластера.
Однако, использовать в работе данный пакет “как есть” у нас не получилось из-за недостаточного функционала, поэтому пришлось взять его идеи за основу и написать расширенную версию…
Пакет интеграции vRA-PKS
v1.0.0
Запуск команд
Изменения в процессах вызова PKS-команд:
- Отдельный процесс: “Run PKS command”. Выполнение каждой команды – это регистрация на сервере PKS, а затем – вызов команды. Для удобства данная последовательность реализована как отдельный процесс;
- Запуск команд PKS CLI на локальном сервере vRO. Вы можете выбрать где выполнять команду, на локальном или удаленном сервере, способ запуска задаётся флагом runLocal в конфигурационном элементе сервера. Разрешение запуска команд операционной системы из процессов оркестратора;
- Защита пароля учетной записи. В случае сбоя в работе процесса, в логи пишутся значения переменных, включая команду pks login вместе с паролем. После выполнения регистрации на сервере добавлена очистка переменной cmdlogin. Также можно использовать отдельный скрипт для регистрации, расположив его на сервере с PKS CLI, но тогда Вы теряете гибкость настройки учетной записи PKS (см. “Run PKS command” -> “Local command”);
- Ожидание выполнения команд. К вызовам create-cluster, delete-cluster, resize добавлен ключ “–wait” для ожидания выполнения команды в интерфейсе VRA;
- “Улучшенное” ожидание. Разработан альтернативный процесс запуска PKS-команд с ожиданием выполнения через improve sleep: “Run PKS command and wait”. Его можно использовать вместо вызова “Run PKS command” в длительных по времени процессах (для ценителей процессорного времени).
Основные процессы
Изменения в реализации и параметрах основных процессов работы с кластерами K8S:
- Выбор плана развертывания при создании кластера. Список планов развертываний сохранен в конфигурации сервера (атрибут pksplans) и может быть получен при вызове процесса “Get PKS server info”;
- Проверка ввода количества рабочих нод в процессе “Scale a K8S cluster”. Для PKS CLI версий 1.1.x и 1.2.x доступно только увеличение количества нод, начиная с версии 1.3.0 имеется возможность уменьшения количества нод;
- Дополнительное подтверждение при вызове удаления кластера;
- Регистрация кластера на DNS-сервере. Вызовы процессов создания и удаления DNS-записей для кластеров. (Поскольку процессы работы с DNS могут отличаться, с пакетом поставляются процессы-заглушки для операций с DNS, не забудьте заменить их на свои процессы).
Доработка DynamicTypes
Расширения работы с DynamicTypes и доработка необходимых процессов:
- Дополнительные атрибуты PKSCluster. Предоставляется расширенная информация о кластере. Значения параметров сохраняются в конфигурационном элементе кластера.
- Добавлен новый тип данных PKSServer, в свойства объекта подгружаются основные характеристики сервера;
- Связь типов данных. Создана связь объектов PKSServer-PKSCluster и реализованы необходимые процессы “Find PKSObject by ID”, “Find relation PKSObjects” и “Has PKSObject children”.
Дополнительные процессы
Реализация дополнительных процессов для разработчиков и администраторов:
- Информация о сервере PKS. Получение списока планов развертывания и текущей версии PKS CLI, результат сохраняется в конфигурационном элементе для использования в работе процессов;
- Информация о кластере. Добавлен процесс получения информации о K8S кластере в формате JSON;
- Дополнительный процесс для регистрации на vRA ранее созданных кластеров kubernetes – “Register K8S cluster”;
- Получение kubeconfig. Создание конфигурационного файла kubernetes, производит рассылку архива с конфигурационным файлом на указанные электронные адреса пользователей (на vRA данный процесс зарегистрирован как Resource Action).
План развития
Кандидаты в версию 1.1:
- Параметры кластера хранить в конфигурационном элементе в формате json-строки;
- Добавить поле description (описание кластера) в свойства объекта PKSCluster и на форму создания кластера;
- Вынести путь директории со скриптами (/opt/vco/tmp/) в атрибут конфигурационного элемента pksconfig;
- Доработка процесса “Get PKS server info” для инициализации всех необходимых данных в pksconfig перед началом работы;
- Разбить процесс “Get K8S credentials” на два отдельных процесса: получения и отправки kubeconfig.
Кандидаты в следующую версию:
- Добавление промежуточного объекта PKSManager между PKSServer-PKSCluster для возможности работы нескольких пользователей с ролями pks.clusters.manage на одном PKS-сервере.
Установка и подготовка пакета к работе
Установка пакета в vRealize Orchestrator:
- ВНИМАНИЕ! НЕ нужно импортировать пакет vRO-PKS.package через инструментарий вкладки Packages. Пакет содержит настройки DynamicTypes, которые не будут применены при импорте;
- Перейдите во вкладку ‘Workflows’ откройте Library->Dynamic Types->Configuration и запустите “Import Configuration From Package” и выберите ‘vRO-PKS.package’ из архива ‘vRA-PKS-Integration.zip’;
- Проверьте, что все элементы успешно импортированы: процессы, действия, конфигурационные элементы, новые DynamicTypes.
Импорт пакета в vRealize Automation:
- Подключение к vRA из vRealize CloudClient:
$ vra login userpass --user user@zabedu.ru --tenant zabedu --server https://vra.zabedu.ru
- Импорт пакета в vRA:
$ vra content import --path /home/as/vRA-PKS.zip --resolution OVERWRITE --verbose
- Настройте доступ к блюпринтам, разрешите действия “Delete K8S cluster”, “Scale a K8S cluster” и “Get K8S credentials”.
Настройка компонентов в vRO:
- Определитесь со способом регистрации на PKS в процессе “Run PKS command” компонент “Login command”: напрямую передавать команду pks login или использовать дополнительный скрипт на стороне сервера;
- Выберите способ запуска PKS-команд: локально с сервера vRO или с SSH-сервера (флаг runLocal в конфигурационном элементе pksconfig), задайте параметры для запуска команд через SSH: ipaddr, port, sshUser, sshPassword (конфигурационный элемент pksconfig);
- Укажите свой сервер PKS и учетные данные: pksapi, apiuser, apipassword (конфигурационный элемент pksconfig);
- Задайте атрибут dnszone, он используется при формирования значения ключа “–external-hostname” команды pks create-cluster (конфигурационный элемент pksconfig);
- Установите PKS CLI на выбранном сервере и проверьте его работу;
- Скопируйте скрипты из архива на сервер с PKS CLI, скорректируйте используемые пути и права доступа к скриптам, процессы вызывают скрипты из /opt/vco/tmp/;
- Введите названия используемых планов развертываний и версию PKS CLI: pksplans, pkscliversion или запустите процесс “Get PKS server info” (конфигурационный элемент pksconfig);
- Замените пустые процессы регистрации и удаления DNS-записей в процессах создания и удаления кластеров (можно выполнить позднее);
- Настройте параметры почтового сервера для работы процесса “Get K8S credentials” или замените в нём вызов процесса “E-mail notification with attachment” на свой аналогичный процесс (можно выполнить позднее);
- Удалите демо-данные (атрибуты) из конфигурационного элемента PKS->Clusters->pksconfig.clusters (можно выполнить позднее).
Файлы к статье
vRA-PKS-Integration.zip – пакет интеграции;
PKS.pdf – документация к процессам пакета.