Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье описано, как создать необходимые ресурсы инфраструктуры для запуска кластера MongoDB в службе Azure Kubernetes (AKS).
Prerequisites
- Обзор развертывания кластера MongoDB в AKS.
- Подписка Azure. Если ее нет, создайте бесплатную учетную запись.
- Azure CLI версии 2.61.0. Чтобы выполнить установку или обновление Azure CLI, ознакомьтесь с этой статьей.
- версия Helm 3 или выше Сведения об установке см. в разделе "Установка Helm".
-
kubectl, который Azure Cloud Shell устанавливает по умолчанию. - Docker, установленный на локальном компьютере. Сведения об установке см. в разделе Get Docker.
Настройка переменных среды
Задайте необходимые переменные среды для использования в этом руководстве:
random=$(echo $RANDOM | tr '[0-9]' '[a-z]')
export MY_LOCATION=australiaeast
export MY_RESOURCE_GROUP_NAME=myResourceGroup-rg-$(echo $MY_LOCATION)
export MY_ACR_REGISTRY=mydnsrandomname$(echo $random)
export MY_IDENTITY_NAME=ua-identity-123
export MY_KEYVAULT_NAME=vault-$(echo $random)-kv
export MY_CLUSTER_NAME=cluster-aks
export SERVICE_ACCOUNT_NAME=mongodb
export SERVICE_ACCOUNT_NAMESPACE=mongodb
export AKS_MONGODB_NAMESPACE=mongodb
export AKS_MONGODB_SECRETS_NAME=cluster-aks-mongodb-secrets
export AKS_MONGODB_CLUSTER_NAME=cluster-aks-mongodb
export AKS_MONGODB_SECRETS_ENCRYPTION_KEY=cluster-aks-mongodb-secrets-mongodb-encryption-key
export AKS_AZURE_SECRETS_NAME=cluster-aks-azure-secrets
export AKS_MONGODB_BACKUP_STORAGE_ACCOUNT_NAME=mongodbsa$(echo $random)
export AKS_MONGODB_BACKUP_STORAGE_CONTAINER_NAME=backups
Создайте группу ресурсов
Создайте группу ресурсов с помощью команды
az group create.az group create --name $MY_RESOURCE_GROUP_NAME --location $MY_LOCATION --output tableПример выходных данных:
Location Name ------------- -------------------------------- australiaeast myResourceGroup-rg-australiaeast
Создание удостоверения для доступа к секретам в Azure Key Vault
На этом шаге вы создадите управляемое удостоверение, назначаемое пользователем, которое оператор внешних секретов использует для доступа к паролям MongoDB, хранящимся в Azure Key Vault.
Создайте пользовательское управляемое удостоверение с помощью команды
az identity create.az identity create --name $MY_IDENTITY_NAME --resource-group $MY_RESOURCE_GROUP_NAME --output none export MY_IDENTITY_NAME_ID=$(az identity show --name $MY_IDENTITY_NAME -g $MY_RESOURCE_GROUP_NAME --query id -o tsv) export MY_IDENTITY_NAME_PRINCIPAL_ID=$(az identity show --name $MY_IDENTITY_NAME -g $MY_RESOURCE_GROUP_NAME --query principalId -o tsv) export MY_IDENTITY_NAME_CLIENT_ID=$(az identity show --name $MY_IDENTITY_NAME -g $MY_RESOURCE_GROUP_NAME --query clientId -o tsv)
Создайте экземпляр Azure Key Vault
Создайте экземпляр Azure Key Vault с помощью
az keyvault createкоманды.az keyvault create --name $MY_KEYVAULT_NAME --resource-group $MY_RESOURCE_GROUP_NAME --location $MY_LOCATION --enable-rbac-authorization false --output table export KEYVAULTID=$(az keyvault show --name $MY_KEYVAULT_NAME --query "id" --output tsv) export KEYVAULTURL=$(az keyvault show --name $MY_KEYVAULT_NAME --query "properties.vaultUri" --output tsv)Пример выходных данных:
Location Name ResourceGroup ------------- -------------- -------------------------------- australiaeast vault-cjcfc-kv myResourceGroup-rg-australiaeast
создадите экземпляр реестра контейнеров Azure;
Создайте экземпляр реестра контейнеров Azure для хранения образов контейнеров и управления ими с помощью
az acr createкоманды.az acr create \ --name ${MY_ACR_REGISTRY} \ --resource-group $MY_RESOURCE_GROUP_NAME \ --sku Premium \ --location $MY_LOCATION \ --admin-enabled true \ --output table export MY_ACR_REGISTRY_ID=$(az acr show --name $MY_ACR_REGISTRY --resource-group $MY_RESOURCE_GROUP_NAME --query id -o tsv)Пример выходных данных:
NAME RESOURCE GROUP LOCATION SKU LOGIN SERVER CREATION DATE ADMIN ENABLED -------------------- -------------------------------- ------------- ------- ------------------------------- -------------------- --------------- mydnsrandomnamecjcfc myResourceGroup-rg-australiaeast australiaeast Premium mydnsrandomnamecjcfc.azurecr.io 2024-07-01T12:18:34Z True
Создание учетной записи хранилища Azure
Создайте учетную запись хранения Azure для хранения резервных копий MongoDB с помощью
az acr createкоманды.az storage account create --name $AKS_MONGODB_BACKUP_STORAGE_ACCOUNT_NAME --resource-group $MY_RESOURCE_GROUP_NAME --location $MY_LOCATION --sku Standard_ZRS --output table az storage container create --name $AKS_MONGODB_BACKUP_STORAGE_CONTAINER_NAME --account-name $AKS_MONGODB_BACKUP_STORAGE_ACCOUNT_NAME --output table export AKS_MONGODB_BACKUP_STORAGE_ACCOUNT_KEY=$(az storage account keys list --account-name $AKS_MONGODB_BACKUP_STORAGE_ACCOUNT_NAME --query "[0].value" -o tsv) az keyvault secret set --vault-name $MY_KEYVAULT_NAME --name AZURE-STORAGE-ACCOUNT-KEY --value $AKS_MONGODB_BACKUP_STORAGE_ACCOUNT_KEY --output noneПример выходных данных:
AccessTier AllowBlobPublicAccess AllowCrossTenantReplication CreationTime EnableHttpsTrafficOnly Kind Location MinimumTlsVersion Name PrimaryLocation ProvisioningState ResourceGroup StatusOfPrimary ------------ ----------------------- ----------------------------- -------------------------------- ------------------------ --------- ------------- ------------------- -------------- ----------------- ------------------- -------------------------------- ----------------- Hot False False 2024-08-09T07:06:41.727230+00:00 True StorageV2 australiaeast TLS1_0 mongodbsabdibh australiaeast Succeeded myResourceGroup-rg-australiaeast available Created --------- True
Создание кластера AKS
В следующих шагах вы создадите кластер AKS с идентификацией рабочей нагрузки и с включенным поставщиком OpenID Connect (OIDC). Идентификация рабочей нагрузки дает учетной записи службы "Оператор внешних секретов" разрешение на доступ к паролям MongoDB, хранящимся в вашем хранилище ключей.
Создайте кластер AKS с помощью команды
az aks create.az aks create \ --location $MY_LOCATION \ --name $MY_CLUSTER_NAME \ --tier standard \ --resource-group $MY_RESOURCE_GROUP_NAME \ --network-plugin azure \ --node-vm-size Standard_DS4_v2 \ --node-count 1 \ --nodepool-name systempool \ --nodepool-tags "pool=system" \ --auto-upgrade-channel stable \ --node-os-upgrade-channel NodeImage \ --attach-acr ${MY_ACR_REGISTRY} \ --enable-oidc-issuer \ --enable-workload-identity \ --zones 1 2 3 \ --generate-ssh-keys \ --output noneДобавьте пул узлов пользователя в кластер AKS с помощью команды
az aks nodepool add. Этот пул узлов находится в том месте, где выполняются модули pod MongoDB.az aks nodepool add \ --resource-group $MY_RESOURCE_GROUP_NAME \ --cluster-name $MY_CLUSTER_NAME \ --name mongodbpool \ --node-vm-size Standard_DS4_v2 \ --node-count 3 \ --zones 1 2 3 \ --mode User \ --output tableПример выходных данных:
Name OsType KubernetesVersion VmSize Count MaxPods ProvisioningState Mode ---------- -------- ------------------- --------------- ------- --------- ------------------- ------ userpool Linux 1.28 Standard_DS4_v2 3 30 Succeeded UserПолучите URL-адрес издателя OIDC, который будет использоваться для конфигурации удостоверения рабочей нагрузки с помощью
az aks showкоманды.export OIDC_URL=$(az aks show --resource-group $MY_RESOURCE_GROUP_NAME --name $MY_CLUSTER_NAME --query oidcIssuerProfile.issuerUrl -o tsv)С помощью команды
AcrPullназначьте рольaz role assignment createудостоверению kubelet.export KUBELET_IDENTITY=$(az aks show -g $MY_RESOURCE_GROUP_NAME --name $MY_CLUSTER_NAME -o tsv --query identityProfile.kubeletidentity.objectId) az role assignment create \ --assignee ${KUBELET_IDENTITY} \ --role "AcrPull" \ --scope ${MY_ACR_REGISTRY_ID} \ --output none
Отправка образов Percona в реестр контейнеров Azure
В этом разделе описано, как скачать образы Percona из Docker Hub и отправить их в реестр контейнеров Azure. Этот шаг гарантирует, что образ доступен в частном реестре и может использоваться в кластере AKS. Мы не рекомендуем использовать общедоступный образ в рабочей среде.
Импортируйте образы Percona из Docker Hub и отправьте их в реестр контейнеров Azure с помощью следующих
az acr importкоманд:az acr import \ --name $MY_ACR_REGISTRY \ --source docker.io/percona/percona-server-mongodb:7.0.8-5 \ --image percona-server-mongodb:7.0.8-5 az acr import \ --name $MY_ACR_REGISTRY \ --source docker.io/percona/pmm-client:2.41.2 \ --image pmm-client:2.41.2 az acr import \ --name $MY_ACR_REGISTRY \ --source docker.io/percona/percona-backup-mongodb:2.4.1 \ --image percona-backup-mongodb:2.4.1 az acr import \ --name $MY_ACR_REGISTRY \ --source docker.io/percona/percona-server-mongodb-operator:1.16.1 \ --image percona-server-mongodb-operator:1.16.1
Развертывание инфраструктуры с помощью Terraform
Чтобы развернуть инфраструктуру с помощью Terraform, мы будем использовать проверенный модуль Azure для AKS. Репозиторий terraform-azurerm-avm-res-containerservice-managedcluster содержит полный пример инфраструктуры, необходимой для запуска кластера MongoDB в Службе Azure Kubernetes (AKS).
Примечание.
Если вы планируете использовать это в рабочей среде, рекомендуется ознакомиться с модулем производственных шаблонов AKS для проверенных модулей Azure. Это связано с рекомендациями по лучшим практикам.
Клонируйте репозиторий Git с модулем terraform:
git clone https://github.com/Azure/terraform-azurerm-avm-res-containerservice-managedcluster.git cd examples/stateful-workloadsmongodb.tfvarsСоздайте файл для определения переменных с помощью следующей команды:cat > mongodb.tfvars <<EOL location = "$MY_LOCATION" resource_group_name = "$MY_RESOURCE_GROUP_NAME" acr_registry_name = "$MY_ACR_REGISTRY" cluster_name = "$MY_CLUSTER_NAME" identity_name = "$MY_IDENTITY_NAME" keyvault_name = "$MY_KEYVAULT_NAME" aks_mongodb_backup_storage_account_name = "$AKS_MONGODB_BACKUP_STORAGE_ACCOUNT_NAME" aks_mongodb_backup_storage_container_name = "$AKS_MONGODB_BACKUP_STORAGE_CONTAINER_NAME" mongodb_enabled = true mongodb_namespace = "$AKS_MONGODB_NAMESPACE" service_account_name = "$SERVICE_ACCOUNT_NAME" acr_task_content = <<-EOF version: v1.1.0 steps: - cmd: bash echo Waiting 10 seconds the propagation of the Container Registry Data Importer and Data Reader role - cmd: bash sleep 10 - cmd: az login --identity - cmd: az acr import --name \$RegistryName --source docker.io/percona/percona-server-mongodb:7.0.8-5 --image percona-server-mongodb:7.0.8-5 - cmd: az acr import --name \$RegistryName --source docker.io/percona/pmm-client:2.41.2 --image pmm-client:2.41.2 - cmd: az acr import --name \$RegistryName --source docker.io/percona/percona-backup-mongodb:2.4.1 --image percona-backup-mongodb:2.4.1 - cmd: az acr import --name \$RegistryName --source docker.io/percona/percona-server-mongodb-operator:1.16.1 --image percona-server-mongodb-operator:1.16.1 EOF node_pools = { mongodbserver = { name = "mongodbpool" vm_size = "Standard_D2ds_v4" node_count = 3 zones = [1, 2, 3] os_type = "Linux" } } EOLВыполните следующие команды Terraform, чтобы развернуть инфраструктуру:
terraform init terraform fmt terraform apply -var-file="mongodb.tfvars"Выполните следующую команду, чтобы экспортировать выходные значения Terraform в качестве переменных среды в терминале, чтобы использовать их в следующих шагах:
export MY_ACR_REGISTRY_ID=$(terraform output -raw acr_registry_id) export MY_ACR_REGISTRY=$(terraform output -raw acr_registry_name) export MY_CLUSTER_NAME=$(terraform output -raw aks_cluster_name) export KUBELET_IDENTITY=$(terraform output -raw aks_kubelet_identity_id) export OIDC_URL=$(terraform output -raw aks_oidc_issuer_url) export identity_name=$(terraform output -raw identity_name) export MY_IDENTITY_NAME_ID=$(terraform output -raw identity_name_id) export MY_IDENTITY_NAME_PRINCIPAL_ID=$(terraform output -raw identity_name_principal_id) export MY_IDENTITY_NAME_CLIENT_ID=$(terraform output -raw identity_name_client_id) export KEYVAULTID=$(terraform output -raw key_vault_id) export KEYVAULTURL=$(terraform output -raw key_vault_uri) export AKS_MONGODB_BACKUP_STORAGE_ACCOUNT_KEY=$(terraform output -raw storage_account_key) export STORAGE_ACCOUNT_NAME=$(terraform output -raw storage_account_name) export TENANT_ID=$(terraform output -raw identity_name_tenant_id)
Примечание.
В AKS время поддержания активности (период бездействия, после которого отправляется первый тестовый сигнал поддержания активности) по умолчанию составляет 7200 секунд или 2 часа. Для MongoDB вы, как правило, получите лучшие результаты с более коротким значением параметра keepalive, порядка 120 секунд или 2 минут.
Подключение к кластеру AKS
Настройте
kubectl, чтобы подключиться к кластеру AKS с помощью командыaz aks get-credentials.az aks get-credentials --resource-group $MY_RESOURCE_GROUP_NAME --name $MY_CLUSTER_NAME --overwrite-existing --output table