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

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

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

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

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

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

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

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

Примечание

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

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

Кластер Kubernetes#

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

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

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

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

Внимание

Секрет PostgreSQL должен быть создан первым.

Секрет PostgreSQL#

Пароль администратора PostgreSQL используется оператором шлюза при инициализации управляемой базы данных. Значение postgres_admin_password обязательно должно совпадать с паролем, указанным в этом секрете.

  1. Создайте секрет PostgreSQL:

    kubectl create secret generic aa-demo-postgres-15 \
      -n astra-automation \
      --from-literal=username='postgres' \
      --from-literal=password='StrongPostgresPassword123!' \
      --from-literal=database='postgres'
    
  2. Убедитесь, что секрет создан:

    kubectl get secret aa-demo-postgres-15 -n astra-automation
    

Запомните пароль PostgreSQL администратора. Этот пароль должен быть использован далее при создании секрета aa-demo-gateway-postgres-configuration.

При необходимости проверьте значение пароля:

kubectl get secret aa-demo-postgres-15 -n astra-automation \
  -o jsonpath='{.data.password}' | base64 -d
echo ""

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

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

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

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

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

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 должны соответствовать данным, собранным на этапе анализа окружения ВМ.

  • Для шлюза пароль postgres_admin_password должен совпадать с паролем из секрета aa-demo-postgres-15.

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

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
  port: "5432"
  database: "automationgateway" # Из дампа ВМ
  username: "automationgateway" # Из дампа ВМ (не "gateway")
  password: "<gateway_db_password>" # Из secrets.yml
  postgres_admin_password: "StrongPostgresPassword123!" # Такой же, как в секрете aa-demo-postgres-15
  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>" # Из secrets.yml
  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>" # Из secrets.yml
  type: "unmanaged"
  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>" # Из secrets.yml
  type: "unmanaged"
  managed_by_aa: "true"
type: Opaque

Внимание

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

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

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

Для развертывания центральной части платформы как приложения 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