Подготовка инфраструктуры#

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

  1. Подготовка установочного узла.

  2. Подготовка кластера Kubernetes.

  3. Подготовка секретов Kubernetes.

  4. Подготовка манифеста для развертывания платформы.

Установочный узел#

В качестве установочного узла можно использовать любую виртуальную машину, в том числе ту, которая используется для текущей платформы. Узел должен соответствовать минимальным требованиям.

Примечание

Установочный узел не должен быть частью кластера Kubernetes.

Дальнейшие операции необходимо выполнять на установочном узле.

Кластер Kubernetes#

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

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

Манифесты секретов Kubernetes#

На этом этапе подготавливаются все секреты Kubernetes, необходимые для развертывания платформы и последующего взаимодействия компонентов Astra Automation в кластере Kubernetes.

Секреты с ключами шифрования данных#

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

aa-demo-encryption-secrets.yaml
---
apiVersion: v1
kind: Secret
metadata:
  name: ac-encryption-secret
  namespace: astra-automation
data:
  secret_key: <base64_encoded_controller_secret_key> # echo -n '<controller_secret_key>' | base64
type: Opaque

---
apiVersion: v1
kind: Secret
metadata:
  name: eda-encryption-secret
  namespace: astra-automation
data:
  secret_key: <base64_encoded_eda_secret_key> # echo -n '<eda_secret_key>' | base64
type: Opaque

---
apiVersion: v1
kind: Secret
metadata:
  name: aa-encryption-secret
  namespace: astra-automation
data:
  secret_key: <base64_encoded_gateway_secret_key> # echo -n '<gateway_secret_key>' | base64
type: Opaque

---
apiVersion: v1
kind: Secret
metadata:
  name: pah-db-encryption-secret
  namespace: astra-automation
data:
  database_fields.symmetric.key: <base64_encoded_hub_db_encryption_key> # echo -n '<hub_db_fields_encryption_key>' | base64
type: Opaque

Значение в поле secret_key должно быть закодировано в формате base64. Пример кодирования значения:

echo -n '<secret_value>' | base64

Примечание

Для Private Automation Hub используются разные ключи, которые нельзя заменять друг другом:

  • hub_db_fields_encryption_key – ключ шифрования полей базы данных Private Automation Hub. Его значение берется из файла /etc/pulp/certs/database_fields.symmetric.key в исходном окружении ВМ и записывается в секрет pah-db-encryption-secret в поле database_fields.symmetric.key. Этот ключ обязателен для расшифровки полей базы данных Private Automation Hub после восстановления.

  • RESOURCE_SERVER["SECRET_KEY"] – ключ реестра ресурсов, который используется для подписи служебных токенов при взаимодействии сервисов с Platform Gateway. В Kubernetes этот ключ генерируется и управляется оператором через секрет aa-demo-resource-server. Задавать его вручную в секрете pah-demo-server не требуется.

Поле hub_secret_key в файле secrets.yml для миграции не используется.

Секреты с паролями администраторов#

Секреты содержат пароли учетных записей администраторов компонентов платформы. Значения должны точно соответствовать паролям из окружения ВМ. Создайте секреты паролей администраторов для всех компонентов платформы в одном файле:

aa-demo-password-secrets.yaml
---
apiVersion: v1
kind: Secret
metadata:
  name: aa-demo-admin-password
  namespace: astra-automation
data:
  password: <base64_encoded_password> # пароль из развертывания на ВМ
type: Opaque
---
apiVersion: v1
kind: Secret
metadata:
  name: ac-demo-admin-password
  namespace: astra-automation
data:
  password: <base64_encoded_password> # пароль из развертывания на ВМ
type: Opaque
---
apiVersion: v1
kind: Secret
metadata:
  name: pah-demo-admin-password
  namespace: astra-automation
data:
  password: <base64_encoded_password> # пароль из развертывания на ВМ
type: Opaque
---
apiVersion: v1
kind: Secret
metadata:
  name: eda-demo-admin-password
  namespace: astra-automation
data:
  password: <base64_encoded_password> # пароль из развертывания на ВМ
type: Opaque

Пример кодирования пароля, если пароль администратора шлюза – admin:

echo -n 'admin' | base64

Секреты с параметрами подключения к базам данных#

Секреты определяют параметры подключения компонентов платформы к PostgreSQL.

Важно

Значения database, username и password должны соответствовать данным, собранным на этапе анализа окружения ВМ.

Создайте секреты параметров подключения к базам данных в одном файле:

aa-demo-pg-secrets.yaml
---
apiVersion: v1
kind: Secret
metadata:
  name: aa-demo-gateway-postgres-configuration
  namespace: astra-automation
stringData:
  host: "aa-demo-postgres-15" # Используйте значение по умолчанию (aa-demo-postgres-15), если используется манифест "aa-demo-*"
  port: "5432"
  database: "automationgateway" # Из дампа ВМ
  username: "automationgateway" # Из дампа ВМ (не "gateway")
  password: "<gateway_db_password>" # Из созданного файла database-info.txt
  postgres_admin_password: "StrongPostgresPassword123!"
  type: "managed" # Только для Gateway БД
type: Opaque
---
apiVersion: v1
kind: Secret
metadata:
  name: aa-demo-controller-postgres-configuration
  namespace: astra-automation
stringData:
  host: "aa-demo-postgres-15"
  port: "5432"
  database: "awx" # Из дампа ВМ
  username: "awx" # Из дампа ВМ
  password: "<controller_db_password>" # Из созданного файла database-info.txt
  type: "unmanaged" # Для всех компонентов кроме Gateway
  managed_by_aa: "true"
type: Opaque
---
apiVersion: v1
kind: Secret
metadata:
  name: aa-demo-hub-postgres-configuration
  namespace: astra-automation
stringData:
  host: "aa-demo-postgres-15"
  port: "5432"
  database: "automationhub" # Из дампа ВМ
  username: "automationhub" # Из дампа ВМ
  password: "<hub_db_password>" # Из созданного файла database-info.txt
  type: "unmanaged" # Для всех компонентов кроме Gateway
  managed_by_aa: "true"
type: Opaque
---
apiVersion: v1
kind: Secret
metadata:
  name: aa-demo-eda-postgres-configuration
  namespace: astra-automation
stringData:
  host: "aa-demo-postgres-15"
  port: "5432"
  database: "automationedacontroller" # Из дампа ВМ
  username: "automationedacontroller" # Из дампа ВМ
  password: "<eda_db_password>" # Из созданного файла database-info.txt
  type: "unmanaged" # Для всех компонентов кроме Gateway
  managed_by_aa: "true"
type: Opaque
k8s-enterprise-aa-demo-pg-secrets.yaml
---
apiVersion: v1
kind: Secret
metadata:
  name: ac-external-pg-secret
  namespace: astra-automation
stringData:
  host: "X.X.X.X" # Адрес внешней БД
  port: "5432" # Порт внешней БД
  database: "awx"
  username: "awx" # Пользователь БД (с правами на создание/миграции)
  password: "awx" # Парол пользователя БД
  sslmode: "prefer" # Режим SSL (disable, require и т.д.)
  type: "unmanaged" # Указывает на внешнюю БД
type: Opaque
---
apiVersion: v1
kind: Secret
metadata:
  name: pah-external-pg-secret
  namespace: astra-automation
stringData:
  host: "X.X.X.X" # Адрес внешней БД
  port: "5432" # Порт внешней БД
  database: "automationhub"
  username: "automationhub" # Пользователь БД (с правами на создание/миграции)
  password: "automationhub" # Парол пользователя БД
  sslmode: "prefer" # Режим SSL (disable, require и т.д.)
  type: "unmanaged" # Указывает на внешнюю БД
type: Opaque
---
apiVersion: v1
kind: Secret
metadata:
  name: eda-external-pg-secret
  namespace: astra-automation
stringData:
  host: "X.X.X.X" # Адрес внешней БД
  port: "5432" # Порт внешней БД
  database: "automationedacontroller"
  username: "automationedacontroller" # <-- Вставьте пользователя БД (с правами на создание/миграции)
  password: "automationedacontroller" # <-- Вставьте пароль
  sslmode: "prefer" # Режим SSL (disable, require и т.д.)
  type: "unmanaged" # Указывает на внешнюю БД
type: Opaque
---
apiVersion: v1
kind: Secret
metadata:
  name: aa-external-pg-secret
  namespace: astra-automation
stringData:
  host: "X.X.X.X" # Адрес внешней БД
  port: "5432" # Порт внешней БД
  database: "automationgateway"
  username: "automationgateway" # <-- Вставьте пользователя БД (с правами на создание/миграции)
  password: "automationgateway" # <-- Вставьте пароль
  sslmode: "prefer" # Режим SSL (disable, require и т.д.)
  type: "unmanaged" # Указывает на внешнюю БД
type: Opaque

Здесь database-info.txt – файл с информацией о базах данных, созданный на этапе экспорта данных.

Важно

Если БД развертывается средствами Astra Automation, укажите следующие параметры:

  • Для шлюза: type: "managed".

  • Для остальных компонентов: type: "unmanaged", managed_by_aa: "true".

Если БД является внешней, для всех компонентов выполните следующие действия:

  • укажите параметр type: "unmanaged";

  • удалите параметр managed_by_aa:.

Манифест развертывания платформы#

Для развертывания центральной части платформы как приложения Kubernetes необходимо подготовить отдельный манифест. В установочном пакете есть примеры развертывания платформы для различных топологий. Следует использовать пример, соответствующий используемой топологии – base или enterprise.

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

Приведенный манифест расширяет пример для базовой топологии:

k8s-base-aa-demo.yaml
---
apiVersion: aa.astra-automation.ru/v1alpha1
kind: AstraAutomation
metadata:
  name: aa-demo
  namespace: astra-automation
spec:
  controller:
    disabled: false
    name: ac-demo
    ee_pull_credentials_secret: "ac-ee-pull-secret"
    image_pull_secrets: ["aa-operators-pull-secret"]
    database_secret: aa-demo-controller-postgres-configuration
    secret_key_secret: ac-encryption-secret
    admin_password_secret: ac-demo-admin-password
  hub:
    disabled: false
    name: pah-demo
    storage_type: S3
    object_storage_s3_secret: pah-s3-credentials-secret
    image_pull_secrets: ["aa-operators-pull-secret"]
    database_secret: aa-demo-hub-postgres-configuration
    db_fields_encryption_secret: pah-db-encryption-secret
    admin_password_secret: pah-demo-admin-password
  eda:
    disabled: false
    name: eda-demo
    image_pull_secrets: ["aa-operators-pull-secret"]
    database_secret: aa-demo-eda-postgres-configuration
    db_fields_encryption_secret: eda-encryption-secret
    admin_password_secret: eda-demo-admin-password
  database:
    database_secret: aa-demo-gateway-postgres-configuration
  ingress_type: Ingress
  ingress_class_name: nginx
  db_fields_encryption_secret: aa-encryption-secret
  admin_password_secret: aa-demo-admin-password
k8s-enterprise-aa-demo.yaml
---
apiVersion: aa.astra-automation.ru/v1alpha1
kind: AstraAutomation
metadata:
  name: aa-demo
  namespace: astra-automation
spec:
  controller:
    disabled: false
    name: ac-demo
    database_secret: ac-external-pg-secret
    secret_key_secret: ac-encryption-secret
    ee_pull_credentials_secret: "ac-ee-pull-secret"
    image_pull_secrets: ["aa-operators-pull-secret"]
    replicas: 3
  hub:
    disabled: false
    name: pah-demo
    storage_type: S3
    object_storage_s3_secret: pah-s3-credentials-secret
    database_secret: pah-external-pg-secret
    db_fields_encryption_secret: pah-encryption-secret
    image_pull_secrets: ["aa-operators-pull-secret"]
    api:
      replicas: 3
    web:
      replicas: 3
    content:
      replicas: 3
    worker:
      replicas: 3
    resource_manager:
      replicas: 3
  eda:
    disabled: false
    name: eda-demo
    database_secret: eda-external-pg-secret
    db_fields_encryption_secret: eda-encryption-secret
    image_pull_secrets: ["aa-operators-pull-secret"]
    api:
      replicas: 3
    event_stream:
      replicas: 3
    ui:
      replicas: 3
    default_worker:
      replicas: 3
    activation_worker:
      replicas: 3
    worker:
      replicas: 3
    scheduler:
      replicas: 3
  database:
    database_secret: aa-external-pg-secret
  api:
    replicas: 3
  redis_mode: cluster
  image_pull_secrets: ["aa-operators-pull-secret"]
  ingress_type: Ingress
  ingress_class_name: nginx
  ingress_tls_secret: aa-tls-secret
  db_fields_encryption_secret: aa-encryption-secret
  public_base_url: https://aa.demo.example.com
  hostname: aa.demo.example.com
  admin_password_secret: aa-demo-admin-password