Развертывание в кластере Kubernetes#

На этой стадии происходит развертывание платформы в кластере Kubernetes.

../../../_images/day1-lb-green.svg ../../../_images/day1-deploy-blue.svg ../../../_images/day1-subscription-white.svg ../../../_images/day1-test-white.svg ../../../_images/day1-lb-green.svg ../../../_images/day1-deploy-blue.svg ../../../_images/day1-subscription-dark.svg ../../../_images/day1-test-dark.svg

Перед началом развертывания платформы убедитесь, что вы выбрали вариант топологии и подготовили необходимые для этого ресурсы, минимальные требования к которым представлены в следующей таблице.

Установка контроллера Ingress#

Если отсутствует контроллер Ingress, установите его с помощью менеджер пакетов Helm:

  1. Добавьте пакет Ingress в индексную базу Helm:

    helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
    

    Информационное сообщение от команды:

    "ingress-nginx" has been added to your repositories
    
  2. Обновите репозиторий Helm:

    helm repo update
    

    Информационное сообщение от команды:

    ...Successfully got an update from the "ingress-nginx" chart repository
    Update Complete. ⎈Happy Helming!⎈
    

    Примечание

    Обе предыдущие команды выполняют настройку на вашей рабочей станции, где вы используете утилиту helm. Поэтому, если по какой-либо причине вам надо повторить развертывание, можно эти шаги пропустить.

  3. Установите сервис 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
    
  4. Настройте сервис 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.

Добавление исполняющего узла#

Согласно схеме необходимо добавить внешний исполняющий узел плоскости исполнения. Описание процесса добавления см. в разделе Операционные задачи.

Развертывание топологии уровня предприятия#

Процесс состоит из следующих стадий.

Развертывание центральной части#

Выполните следующие шаги для развертывания отказоустойчивой платформы:

  1. Задайте количество реплик, например 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
    
  2. Убедитесь, что на стадии подготовки вы настроили файлы с манифестами секретов в соответствии с рекомендациями, и примените каждый из них с помощью команды вида:

    kubectl apply -f <path/to/secret.yml>
    

    где <path/to/secret.yaml> – путь к файлу, содержащему манифест соответствующих секретов в формате YAML.

    У вас должны быть файлы с манифестами для следующих секретов:

    • доступ к хранилищу S3 для Private Automation Hub;

    • доступы к базам данных PosgreSQL для всех компонентов платформы;

    • секреты для шифрования чувствительных данных в базах данных;

    • пароль администратора платформы;

    • параметры TLS для защиты данных, передаваемых по сети;

  3. Запустите процесс развертывания платформы:

    kubectl apply -f <path/to/application-manifest.yml>
    

    где <path/to/application-manifest.yml> – путь к файлу, содержащему манифест приложения.

  4. Если необходимо обеспечить возможность установления соединений от исполнительных узлов к 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.

  1. Узнайте полное название пода aa-operator-aa-manager:

    kubectl get pods -n astra-automation | grep aa-operator
    

    Выходные данные имеют следующий вид:

    aa-operator-aa-manager-76d84985d9-hmswf     2/2     Running   0          6m33s
    
  2. Используйте полное название пода 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/. Активируйте лицензию подписки.

Добавление плоскости исполнения#

Согласно рекомендуемой топологии необходимо добавить два исполнительных узла, один из которых должен быть связан с плоскостью управления через промежуточный узел.

Добавление может быть выполнено одним из способов, приведенных в описании операционных задач.