Подготовка инфраструктуры#
Подготовка инфраструктуры, на которую выполняется миграция платформы, включает следующие шаги:
Подготовка установочного узла.
Подготовка кластера Kubernetes.
Подготовка секретов Kubernetes.
Подготовка манифеста для развертывания платформы.
Установочный узел#
В качестве установочного узла можно использовать любую виртуальную машину, в том числе ту, которая используется для текущей платформы. Узел должен соответствовать минимальным требованиям.
Примечание
Установочный узел не должен быть частью кластера Kubernetes.
Дальнейшие операции необходимо выполнять на установочном узле.
Кластер Kubernetes#
Миграцию необходимо производить в готовый кластер 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