Развертывание в кластере Kubernetes#
На этой стадии происходит развертывание платформы в кластере Kubernetes.
Перед началом развертывания платформы убедитесь, что вы выбрали вариант топологии и подготовили необходимые для этого ресурсы, минимальные требования к которым представлены в следующей таблице.
Ресурс |
||
|---|---|---|
Утилиты |
Утилиты |
|
Кластер Kubernetes |
С одним рабочим узлом |
С тремя рабочими узлами |
Сетевое хранилище для Private Automation Hub |
||
Настройка сетевых фильтров |
||
Плоскость исполнения |
||
СУБД |
Будет создана при развертывании Astra Automation |
|
Манифесты секретов |
||
Манифест приложения |
Установка контроллера Ingress#
Если отсутствует контроллер Ingress, установите его с помощью менеджер пакетов Helm:
Добавьте пакет Ingress в индексную базу Helm:
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
Информационное сообщение от команды:
"ingress-nginx" has been added to your repositories
Обновите репозиторий Helm:
helm repo update
Информационное сообщение от команды:
...Successfully got an update from the "ingress-nginx" chart repository Update Complete. ⎈Happy Helming!⎈
Примечание
Обе предыдущие команды выполняют настройку на вашей рабочей станции, где вы используете утилиту
helm. Поэтому, если по какой-либо причине вам надо повторить развертывание, можно эти шаги пропустить.Установите сервис Ingress в Kubernetes:
helm install ingress-nginx ingress-nginx/ingress-nginx
Информационное сообщение от команды:
Installation output
NAME: ingress-nginx LAST DEPLOYED: Tue Oct 14 11:33:56 2025 NAMESPACE: default STATUS: deployed REVISION: 1 TEST SUITE: None NOTES: The ingress-nginx controller has been installed. It may take a few minutes for the load balancer IP to be available. You can watch the status by running 'kubectl get service --namespace default ingress-nginx-controller --output wide --watch' An example Ingress that makes use of the controller: apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: example namespace: foo spec: ingressClassName: nginx rules: - host: www.example.com http: paths: - pathType: Prefix backend: service: name: exampleService port: number: 80 path: / # This section is only required if TLS is to be enabled for the Ingress tls: - hosts: - www.example.com secretName: example-tls If TLS is enabled for the Ingress, a Secret containing the certificate and key must also be provided: apiVersion: v1 kind: Secret metadata: name: example-tls namespace: foo data: tls.crt: <base64 encoded cert> tls.key: <base64 encoded key> type: kubernetes.io/tls
Настройте сервис Ingress на возможность установления соединения через WebSocket между сервисами receptor на внешних исполняющих узлах (execution nodes) и внутреннем переходном узле (hop node), не терминируя соединения, использующие TLS/SSL:
helm upgrade ingress-nginx ingress-nginx/ingress-nginx --set controller.extraArgs.enable-ssl-passthrough=true
Установка операторов#
Установите все операторы Astra Automation:
kubectl apply -f operators/
Информационное сообщение от команды:
Installation output
namespace/astra-automation created
customresourcedefinition.apiextensions.k8s.io/aabackups.aa.astra-automation.ru created
customresourcedefinition.apiextensions.k8s.io/aarestores.aa.astra-automation.ru created
customresourcedefinition.apiextensions.k8s.io/aas.aa.astra-automation.ru created
serviceaccount/aa-operator-aa-manager created
role.rbac.authorization.k8s.io/aa-operator-leader-election-role created
role.rbac.authorization.k8s.io/aa-operator-manager-role created
clusterrole.rbac.authorization.k8s.io/aa-operator-metrics-reader created
clusterrole.rbac.authorization.k8s.io/aa-operator-proxy-role created
rolebinding.rbac.authorization.k8s.io/aa-operator-leader-election-rolebinding created
rolebinding.rbac.authorization.k8s.io/aa-operator-manager-rolebinding created
clusterrolebinding.rbac.authorization.k8s.io/aa-operator-proxy-rolebinding created
service/aa-operator-aa-manager-metrics-service created
deployment.apps/aa-operator-aa-manager created
namespace/astra-automation configured
customresourcedefinition.apiextensions.k8s.io/acbackups.ac.astra-automation.ru created
customresourcedefinition.apiextensions.k8s.io/acmeshingresses.ac.astra-automation.ru created
customresourcedefinition.apiextensions.k8s.io/acrestores.ac.astra-automation.ru created
customresourcedefinition.apiextensions.k8s.io/acs.ac.astra-automation.ru created
serviceaccount/ac-operator-ac-manager created
role.rbac.authorization.k8s.io/ac-operator-ac-manager-role created
role.rbac.authorization.k8s.io/ac-operator-leader-election-role created
clusterrole.rbac.authorization.k8s.io/ac-operator-metrics-reader created
clusterrole.rbac.authorization.k8s.io/ac-operator-proxy-role created
rolebinding.rbac.authorization.k8s.io/ac-operator-ac-manager-rolebinding created
rolebinding.rbac.authorization.k8s.io/ac-operator-leader-election-rolebinding created
clusterrolebinding.rbac.authorization.k8s.io/ac-operator-proxy-rolebinding created
configmap/ac-operator-ac-manager-config created
service/ac-operator-automationcontroller-manager-metrics-service created
deployment.apps/ac-operator-ac-manager created
namespace/astra-automation configured
customresourcedefinition.apiextensions.k8s.io/pahbackups.pah.astra-automation.ru created
customresourcedefinition.apiextensions.k8s.io/pahrestores.pah.astra-automation.ru created
customresourcedefinition.apiextensions.k8s.io/pahs.pah.astra-automation.ru created
serviceaccount/pah-operator-sa created
role.rbac.authorization.k8s.io/pah-operator-leader-election-role created
role.rbac.authorization.k8s.io/pah-operator-pah-operator-role created
role.rbac.authorization.k8s.io/pah-operator-proxy-role created
clusterrole.rbac.authorization.k8s.io/pah-operator-metrics-reader created
clusterrole.rbac.authorization.k8s.io/pah-operator-pah-operator-cluster-role created
rolebinding.rbac.authorization.k8s.io/pah-operator-leader-election-rolebinding created
rolebinding.rbac.authorization.k8s.io/pah-operator-pah-operator-rolebinding created
rolebinding.rbac.authorization.k8s.io/pah-operator-proxy-rolebinding created
clusterrolebinding.rbac.authorization.k8s.io/pah-operator-pah-operator-cluster-rolebinding created
configmap/pah-operator-pah-operator-config created
service/pah-operator-pah-manager-metrics-service created
deployment.apps/pah-operator-pah-manager created
namespace/astra-automation configured
customresourcedefinition.apiextensions.k8s.io/edabackups.eda.astra-automation.ru created
customresourcedefinition.apiextensions.k8s.io/edarestores.eda.astra-automation.ru created
customresourcedefinition.apiextensions.k8s.io/edas.eda.astra-automation.ru created
serviceaccount/eda-operator-eda-manager created
role.rbac.authorization.k8s.io/eda-operator-eda-manager-role created
role.rbac.authorization.k8s.io/eda-operator-leader-election-role created
clusterrole.rbac.authorization.k8s.io/eda-operator-metrics-reader created
clusterrole.rbac.authorization.k8s.io/eda-operator-proxy-role created
rolebinding.rbac.authorization.k8s.io/eda-operator-eda-manager-rolebinding created
rolebinding.rbac.authorization.k8s.io/eda-operator-leader-election-rolebinding created
clusterrolebinding.rbac.authorization.k8s.io/eda-operator-proxy-rolebinding created
service/eda-operator-eda-manager-metrics-service created
deployment.apps/eda-operator-eda-manager created
Команда создает новое пространство имен – astra-automation – с операторами внутри нее.
В этом пространстве будут создаваться все объекты центральной части платформы.
Проверьте готовность подов:
kubectl -n astra-automation get pods
Они должны быть в состоянии Running:
NAME READY STATUS RESTARTS AGE
aa-operator-aa-manager-76d84985d9-bpll6 2/2 Running 0 2m19s
ac-operator-ac-manager-748f66f8b8-jnf4x 2/2 Running 0 2m16s
eda-operator-eda-manager-644b75748d-7dlzr 2/2 Running 0 2m11s
pah-operator-pah-manager-68c859659b-6jsv4 2/2 Running 0 2m14s
Создание секретов#
Для каждой группы секретов или одиночных секретов у вас есть файл с манифестом. Создайте необходимые секреты с помощью этих файлов, используя команду вида:
kubectl apply -f <path/to/file.yml>
Здесь <path/to/file.yml> – путь к файлу с манифестом.
Развертывание базовой топологии Astra Automation#
Развертывание полной платформы состоит из следующих этапов.
Развертывание центральных компонентов#
Для развертывания центральной части необходимо применить ранее подготовленный манифест:
kubectl apply -f <path/to/manifest.yml>
Процесс может занять около 20 минут. Окончание развертывания проверяйте по журналу:
kubectl logs -n astra-automation aa-operator-aa-manager-76d84985d9-bpll6 -c manager
Завершение обозначено заключительной секцией как при обычном выполнении набора сценариев Ansible.
Первичная настройка#
Проверьте с помощью браузера, что вы можете подключиться к шлюзу, используя URL https://<ip or domain.name>, по его IP-адресу или доменному имени и пройти аутентификацию с учетной записью администратора.
После этого активируйте подписку, чтобы перейти в панель управления Astra Automation.
Добавление исполняющего узла#
Согласно схеме необходимо добавить внешний исполняющий узел, связанный с управляющим узлом через рецепторы:
На панели навигации выберите Automation Execution > Infrastructure > Instances и начните добавлять узел, нажав на кнопку Create instance.
В окне Create instance настройте следующие поля:
Host name: <IP address>;
Listener port: 27199;
Instance type: Execution;
Options: выберите все опции: Enable instance, Managed by policy и Peers from control panel.
После применения этих настроек открывается окно с кнопкой Download bundle для выгрузки установочного пакета. Выгрузите этот пакет на вашу станцию и распакуйте этот пакет. Для использования загруженного пакета на станции должен быть установлен пакет Ansible Core. Перейдите в распакованный каталог.
Убедитесь, что в файле описания инвентаря
inventory.ymlправильно настроены следующие параметров (согласно настройкам в добавляемом узле):ansible_user– название учетной записи с административными привилегиями, например admin;ansible_ssh_private_key_file– путь к приватному ключу SSH для этой учетной записи, например~/.ssh/id_ed25519.
Выполните сценарий настройки узла:
ansible-navigator run --eei hub.astra-automation.ru/aa-2.0/aa-full-ee:latest \ install_receptor.yml -i inventory.yml -m stdout
По завершении выполнения сценария выводится строка вида:
PLAY RECAP ********************************************************************************************** remote-execution : ok=71 changed=40 unreachable=0 failed=0 skipped=10 rescued=0 ignored=0
В графической консоли платформы убедитесь, что состояние добавленного узла стало
Ready.
Развертывание топологии уровня предприятия#
Процесс состоит из следующих стадий.
Развертывание центральной части#
Выполните следующие шаги для развертывания отказоустойчивой платформы:
Задайте количество реплик, например 3, для каждого установленного оператора:
kubectl scale deployment aa-operator-aa-manager --namespace astra-automation --replicas=3 kubectl scale deployment ac-operator-ac-manager --namespace astra-automation --replicas=3 kubectl scale deployment eda-operator-eda-manager --namespace astra-automation --replicas=3 kubectl scale deployment pah-operator-pah-manager --namespace astra-automation --replicas=3
После выполнения команд, каждый объект deployment должен содержать три реплики:
kubectl -n astra-automation get deployments
Убедитесь, что на стадии подготовки вы настроили файлы с манифестами секретов в соответствии с рекомендациями, и примените каждый из них с помощью команды вида:
kubectl apply -f <path/to/secret.yml>
где <path/to/secret.yaml> – путь к файлу, содержащему манифест соответствующих секретов в формате YAML.
У вас должны быть файлы с манифестами для следующих секретов:
доступ к хранилищу S3 для Private Automation Hub;
доступы к базам данных PosgreSQL для всех компонентов платформы;
секреты для шифрования чувствительных данных в базах данных;
пароль администратора платформы;
параметры TLS для защиты данных, передаваемых по сети;
Запустите процесс развертывания платформы:
kubectl apply -f <path/to/application-manifest.yml>
где <path/to/application-manifest.yml> – путь к файлу, содержащему манифест приложения.
Если необходимо обеспечить возможность установления соединений от исполнительных узлов к Automation Controller, добавьте Mesh Ingress:
kubectl apply -f <path/to/mesh-ingress.yml>
где <path/to/mesh-ingress.yml> – путь к файлу, содержащему манифест Mesh Ingress.
Контроль процесса развертывания#
После выполнения команды развертывания платформы потребуется некоторое время на запуск и настройку всех подов. Состояние развертывания можно проверить с помощью команды:
watch -n 5 "kubectl get aas aa-demo -n astra-automation -o jsonpath='{.status.conditions}'"
где aa-demo – название приложения, которое вы указали в манифесте приложения.
Выход из команды производится с помощью комбинации клавиш Ctrl+C.
При установленной утилите jq можно получить более удобный формат вывода:
watch -n 5 "kubectl get aas aa-demo -n astra-automation -o jsonpath='{.status.conditions}' | jq "
По завершении развертывания платформы вывод имеет следующий вид:
[
{
"lastTransitionTime": "2025-10-27T14:45:52Z",
"message": "",
"reason": "",
"status": "False",
"type": "Failure"
},
{
"lastTransitionTime": "2025-10-27T14:45:52Z",
"message": "Last reconciliation succeeded",
"reason": "Successful",
"status": "True",
"type": "Successful"
},
{
"lastTransitionTime": "2025-10-27T14:45:52Z",
"message": "Awaiting next reconciliation",
"reason": "Successful",
"status": "True",
"type": "Running"
}
]
Ключевые моменты:
В секции, где
"type": "Failure", полеmessageпустое.В секции, где
"type": "Successful", полеmessageсодержит сообщениеLast reconciliation succeeded.В секции, где
"type": "Running", полеmessageсодержит сообщениеAwaiting next reconciliation.
Для более подробной информации следует изучить журнал выполнения сценария развертывания, предварительно узнав полное название пода aa-operator-aa-manager.
Узнайте полное название пода
aa-operator-aa-manager:kubectl get pods -n astra-automation | grep aa-operator
Выходные данные имеют следующий вид:
aa-operator-aa-manager-76d84985d9-hmswf 2/2 Running 0 6m33s
Используйте полное название пода
aa-operator-aa-managerдля просмотра журнала выполнения сценария развертывания:kubectl logs -n astra-automation -f <aa-operator-aa-manager full name> -c manager
Аргумент
-fтребует постоянного обновления данных, полученных из журнала.
Журнал показывает ход выполнения сценария и возникающие ошибки. Итоговый вывод PLAY RECAP сообщает об успешном или неудачном завершении сценария. Продукт полностью развернут при успешном выполнении сценария и PLAY RECAP с полем failed=0 вида:
{"level":"info","ts":"2025-10-21T11:10:20Z","logger":"runner","msg":"Ansible-runner exited successfully","job":"182878699511911518","name":"aa-demo","namespace":"astra-automation"}
----- Ansible Task Status Event StdOut (aa.astra-automation.ru/v1alpha1, Kind=AstraAutomation, aa-demo/astra-automation) -----
PLAY RECAP *********************************************************************
localhost : ok=195 changed=2 unreachable=0 failed=0 skipped=103 rescued=0 ignored=0
Активация лицензии#
С помощью браузера обратитесь по URL, настроенному в манифесте приложения, например https://aa.demo.example.com/.
Активируйте лицензию подписки.
Добавление плоскости исполнения#
Согласно рекомендуемой топологии необходимо добавить два исполнительных узла, один из которых должен быть связан с плоскостью управления через промежуточный узел. Здесь можно применить один из подходов:
Добавить каждый из узлов последовательно, как описано в базовой топологии. Для подключения узла типа execution через узел hop, надо сначала добавить узел hop, а затем execution.
Добавить все узлы сразу с помощью утилиты
ansible-navigator.
Рассмотрим второй вариант, поскольку предыдущий был уже описан ранее.
Подготовьте приватный ключ SSH, который предоставляет пользователю доступ к добавляемым узлам с привилегиями администратора.
Убедитесь, что у вас подготовлены узлы для плоскости исполнения в соответствии с рекомендациями.
Создайте токен доступа для пользователя admin:
В панели навигации веб-интерфейса перейдите к Access Management > Users.
В списке пользователей выберите admin.
Переключитесь на вкладку Tokens и нажмите кнопку Create token. В поле Scope выберите Write. Нажмите внизу кнопку Create token и сохраните токен в надежном месте, поскольку после закрытия окна он не будет более доступен.
Подготовьте файл описания инвентаря, например
inventory.yml, следующего вида:--- all: vars: ac_host: "https://aa.demo.example.com" ac_token: "6JShbAmkz9k5QyMKGX6ZUGTCjfZzJs" ansible_ssh_common_args: "-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" children: hop_nodes: hosts: hop-node-01: ansible_host: 10.177.93.56 ansible_user: admin ansible_ssh_private_key_file: keys/id_ed25519 execution_nodes: hosts: exec-node-01: ansible_host: 10.177.93.13 ansible_user: admin ansible_ssh_private_key_file: keys/id_ed25519 hop_node_related: "hop-node-01" peers_from_control_nodes: false
Файл содержит настройки общих переменных и настройки параметров доступа для переходных узлов (группа
hop_nodes) и исполняющих узлов (группаexecution_nodes). В файле необходимо задать следующие переменные в соответствии с параметрами добавляемых узлов:ac_host: URL к шлюзу платформы;ac_token: подготовленный токен для пользователя admin;ansible_host: IP-адрес соответствующего узла;ansible_user: название учетной записи с привилегиями администратора на соответствующем узле;ansible_ssh_private_key_file: относительный путь к приватному ключу SSH для этой учетной записи;hop_node_related(требуется, если подключение идет через hop node): параметр подключения к узлу hop в виде значенияinventory_hostnameилиreceptor_addressID, если узел hop уже существует;peers_from_control_nodes: true, если подключение будет напрямую к плоскости управления (предыдущий параметр игнорируется), или false, если через hop.
Выполните сценарии настройки и подключения узлов:
ansible-navigator run --eei hub.astra-automation.ru/aa-2.0/aa-full-ee:latest \ <playbook.yml> -i inventory.yml -m stdout
По завершении выполнения сценария Ansible выводит типовую секция PLAY RECAP.
В графической консоли платформы убедитесь, что появились новые узлы плоскости исполнения и их состояние
Ready. Для этого на панели выберите следующие окна: