Развертывание в кластере Kubernetes#
На этой стадии происходит развертывание платформы в кластере Kubernetes.
Перед началом развертывания платформы убедитесь, что вы выбрали вариант топологии и подготовили необходимые для этого ресурсы, минимальные требования к которым представлены в следующей таблице.
Ресурс |
||
|---|---|---|
Утилиты |
Утилиты |
|
Кластер Kubernetes |
С одним рабочим узлом |
С тремя рабочими узлами |
Сетевое хранилище для Private Automation Hub |
||
Настройка сетевых фильтров |
||
Плоскость исполнения |
||
СУБД |
Будет создана при развертывании Astra Automation |
|
Манифесты секретов |
||
Манифест приложения |
Также перед началом развертывания без доступа в интернет убедитесь, что все контейнерные образы доступны локально на рабочих узлах Kubernetes.
Предупреждение
Если процесс Reconciliation операторов начнется до завершения загрузки образов, Kubernetes не сможет создать поды компонентов платформы, что приведет к ошибкам вида ImagePullBackOff или ErrImageNeverPull.
Установка контроллера 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 nodes), не терминируя соединения, использующие TLS:
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.
Добавление исполняющего узла#
Согласно схеме необходимо добавить внешний исполняющий узел плоскости исполнения. Описание процесса добавления см. в разделе «Операционные задачи».
Развертывание топологии уровня предприятия#
Процесс состоит из следующих стадий.
Развертывание центральной части#
Выполните следующие шаги для развертывания отказоустойчивой платформы:
Задайте количество реплик, например 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, каждый из которых представляет переходный узел (hop node). В зависимости от того, собрали вы манифесты в одном файле или подготовили несколько файлов, выполните одну или несколько команд вида:
kubectl apply -f <path/to/mesh-ingress.yml>
где <path/to/mesh-ingress.yml> – путь к файлу, содержащему манифест ресурса AutomationControllerMeshIngress.
Контроль процесса развертывания#
После выполнения команды развертывания платформы потребуется некоторое время на запуск и настройку всех подов. Состояние развертывания можно проверить с помощью команды:
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/.
Активируйте лицензию подписки.
Добавление плоскости исполнения#
Согласно рекомендуемой топологии необходимо добавить исполняющие узлы, часть из которых связана с плоскостью управления через переходные узлы.
Добавление может быть выполнено одним из способов, приведенных в разделе «Операционные задачи».