Подготовка инфраструктуры#
Подготовка инфраструктуры, на которую вы будете мигрировать платформу, включает следующие шаги:
Подготовка установочного узла.
Подготовка кластера Kubernetes.
Подготовка секретов Kubernetes.
Подготовка манифеста для развертывания платформы.
Установочный узел#
В качестве установочного узла можно использовать любую виртуальную машину, в том числе, ту, который вы используете для текущей платформы. Узел должен соответствовать минимальным требованиям.
Примечание
Установочный узел не должен быть частью кластера Kubernetes.
Дальнейшие операции необходимо выполнять на установочном узле.
Кластер Kubernetes#
Миграцию необходимо производить в готовый кластер Kubernetes. Развертывание и настройка кластера Kubernetes зависит от рабочего окружения и требуемых параметров. Особенности развертывания представлены в примерах.
При оценке возможностей готового кластера или при планировании создания нового кластера Kubernetes, необходимо учитывать следующие особенности:
Исходную топологию платформы не следует изменять:
Если вы используете базовую топологию на ВМ, то мигрируйте ее на базовую топологию в кластере Kubernetes. Если необходимо расширить топологию до уровня предприятия, то это можно сделать после миграции.
Если вы используете топологию уровня предприятия, то мигрируйте ее на топологию уровня предприятия в кластере Kubernetes.
Обеспечьте кластер необходимыми вычислительными ресурсами в зависимости от топологии.
Настройте сетевые экраны и внутренние сетевые фильтры узлов в зависимости от топологии, базовой или уровня предприятия.
Манифесты секретов Kubernetes#
На этом этапе подготавливаются все секреты Kubernetes, необходимые для развертывания платформы и последующего взаимодействия компонентов Astra Automation в кластере Kubernetes.
Внимание
Секрет PostgreSQL должен быть создан первым.
Секрет PostgreSQL#
Пароль администратора PostgreSQL используется оператором шлюза при инициализации управляемой базы данных.
Значение postgres_admin_password обязательно должно совпадать с паролем, указанным в этом секрете.
Создайте секрет PostgreSQL:
kubectl create secret generic aa-demo-postgres-15 \ -n astra-automation \ --from-literal=username='postgres' \ --from-literal=password='StrongPostgresPassword123!' \ --from-literal=database='postgres'
Убедитесь, что секрет создан:
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