Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel erstellen Sie die erforderlichen Infrastrukturressourcen zum Ausführen eines MongoDB-Clusters in Azure Kubernetes Service (AKS).
Voraussetzungen
- Überprüfung der Übersicht über die Bereitstellung eines MongoDB-Clusters in AKS.
- Ein Azure-Abonnement. Falls Sie nicht über eine Subscription verfügen, können Sie ein kostenloses Konto erstellen.
- Azure CLI ab Version 2.61.0. Informationen zum Ausführen einer Installation oder eines Upgrades finden Sie unter Installieren der Azure-Befehlszeilenschnittstelle.
- Helm Version 3 oder höher. Informationen zum Installieren finden Sie unter Installieren von Helm.
-
kubectl, womit Azure Cloud Shell standardmäßig installiert wird - Docker ist auf Ihrem lokalen Rechner installiert. Informationen zum Installieren finden Sie unter Docker erhalten.
Festlegen von Umgebungsvariablen
Legen Sie die erforderlichen Umgebungsvariablen für die Verwendung in dieser Anleitung fest:
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
Erstellen einer Ressourcengruppe
Erstellen Sie mit dem Befehl
az group createeine Ressourcengruppe.az group create --name $MY_RESOURCE_GROUP_NAME --location $MY_LOCATION --output tableBeispielausgabe:
Location Name ------------- -------------------------------- australiaeast myResourceGroup-rg-australiaeast
Erstellen einer Identität für den Zugriff auf geheime Schlüssel im Azure Key Vault
In diesem Schritt erstellen Sie eine benutzerseitig zugewiesene verwaltete Identität, die External Secrets Operator verwendet, um auf das in Azure Key Vault gespeicherte MongoDB-Kennwort zuzugreifen.
Erstellen Sie eine benutzerseitig zugewiesene verwaltete Identität mit dem Befehl
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)
Erstellen einer Azure Key Vault-Instanz
Erstellen Sie eine Azure Key Vault-Instanz mithilfe des Befehls
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)Beispielausgabe:
Location Name ResourceGroup ------------- -------------- -------------------------------- australiaeast vault-cjcfc-kv myResourceGroup-rg-australiaeast
Erstellen einer Azure Container Registry-Instanz
Erstellen Sie mithilfe des Befehls
az acr createeine Azure Container Registry-Instanz, um Ihre Containerimages zu speichern und zu verwalten.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)Beispielausgabe:
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
Erstellen eines Azure-Speicherkontos
Erstellen Sie ein Azure Storage-Konto, um die MongoDB-Sicherungen mithilfe des
az acr create-Befehls zu speichern.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 noneBeispielausgabe:
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
Erstellen eines AKS-Clusters
In den folgenden Schritten erstellen Sie einen AKS-Cluster mit einer Workloadidentität und aktiviertem OpenID Connect-Aussteller (OIDC). Die Workloadidentität gewährt dem Dienstkonto des Operators für externe Geheimnisse die Berechtigung, auf das im Schlüsseltresor gespeicherte MongoDB-Kennwort zuzugreifen.
Erstellen Sie mit dem Befehl
az aks createeinen AKS-Cluster.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 noneFügen Sie dem AKS-Cluster einen Benutzerknotenpool mit dem Befehl
az aks nodepool addhinzu. In diesem Knotenpool werden die MongoDB-Pods ausgeführt.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 tableBeispielausgabe:
Name OsType KubernetesVersion VmSize Count MaxPods ProvisioningState Mode ---------- -------- ------------------- --------------- ------- --------- ------------------- ------ userpool Linux 1.28 Standard_DS4_v2 3 30 Succeeded UserRufen Sie die OIDC-Aussteller-URL ab, die für die Workload-Identitätskonfiguration mithilfe des Befehls
az aks showverwendet werden soll.export OIDC_URL=$(az aks show --resource-group $MY_RESOURCE_GROUP_NAME --name $MY_CLUSTER_NAME --query oidcIssuerProfile.issuerUrl -o tsv)Weisen Sie die
AcrPull-Rolle für die Kubelet-Identität mit dem Befehlaz role assignment createzu.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
Hochladen von Percona-Images in Azure Container Registry
In diesem Abschnitt laden Sie die Percona-Images von Docker Hub herunter und laden sie in Azure Container Registry hoch. Dieser Schritt stellt sicher, dass das Bild in Ihrer privaten Registrierung verfügbar ist und in Ihrem AKS-Cluster verwendet werden kann. Es wird nicht empfohlen, das öffentliche Image in einer Produktionsumgebung zu verwenden.
Importieren Sie die Percona-Images aus Docker Hub, und laden Sie sie mithilfe der folgenden
az acr import-Befehle in Azure Container Registry hoch: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
Bereitstellen der Infrastruktur mit Terraform
Um die Infrastruktur mithilfe von Terraform bereitzustellen, verwenden wir das Azure Verified-Modul für AKS. Das Repository terraform-azurerm-avm-res-containerservice-managedcluster enthält ein vollständiges Beispiel mit der Infrastruktur, die zum Ausführen eines MongoDB-Clusters auf Azure Kubernetes Service (AKS) erforderlich ist.
Hinweis
Wenn Sie dies in der Produktion ausführen möchten, empfehlen wir, das AKS-Produktionsmustermodul für Azure Verified Modules zu betrachten. Dies ist mit Empfehlungen für bewährte Methoden verbunden.
Klonen Sie das Git-Repository mit dem Terraform-Modul:
git clone https://github.com/Azure/terraform-azurerm-avm-res-containerservice-managedcluster.git cd examples/stateful-workloadsErstellen Sie eine
mongodb.tfvarsDatei zum Definieren von Variablen mithilfe des folgenden Befehls: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" } } EOLFühren Sie die folgenden Terraform-Befehle aus, um die Infrastruktur bereitzustellen:
terraform init terraform fmt terraform apply -var-file="mongodb.tfvars"Führen Sie den folgenden Befehl aus, um die Terraform-Ausgabewerte als Umgebungsvariablen im Terminal zu exportieren, um sie in den nächsten Schritten zu verwenden:
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)
Hinweis
In AKS beträgt die Keepalive-Zeit (die Dauer der Inaktivität, nach der die erste Keepalive-Probe gesendet wird) standardmäßig 7.200 Sekunden oder 2 Stunden. Bei MongoDB erhalten Sie in der Regel bessere Ergebnisse mit einem kürzeren Keepalive-Wert in der Reihenfolge von 120 Sekunden oder 2 Minuten.
Herstellen einer Verbindung mit dem AKS-Cluster
Konfigurieren Sie
kubectl, um mithilfe des Befehlsaz aks get-credentialseine Verbindung mit Ihrem AKS-Cluster herzustellen.az aks get-credentials --resource-group $MY_RESOURCE_GROUP_NAME --name $MY_CLUSTER_NAME --overwrite-existing --output table