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 konfigurieren Sie einen MongoDB-Cluster in Azure Kubernetes Service (AKS) und stellen ihn bereit.
Konfigurieren einer Workloadidentität
Erstellen Sie für den MongoDB-Cluster einen Namespace, indem Sie den Befehl
kubectl create namespaceverwenden.kubectl create namespace ${AKS_MONGODB_NAMESPACE} --dry-run=client --output yaml | kubectl apply -f -Beispielausgabe:
namespace/mongodb createdErstellen Sie ein Dienstkonto, und konfigurieren Sie eine Workloadidentität mithilfe des Befehls
kubectl apply.export TENANT_ID=$(az account show --query tenantId -o tsv) cat <<EOF | kubectl apply -f - apiVersion: v1 kind: ServiceAccount metadata: annotations: azure.workload.identity/client-id: "${MY_IDENTITY_NAME_CLIENT_ID}" azure.workload.identity/tenant-id: "${TENANT_ID}" name: "${SERVICE_ACCOUNT_NAME}" namespace: "${AKS_MONGODB_NAMESPACE}" EOFBeispielausgabe:
serviceaccount/mongodb created
Installieren von External Secrets Operator
In diesem Abschnitt verwenden Sie Helm, um External Secrets Operator zu installieren. External Secrets Operator ist ein Kubernetes-Operator, der den Lebenszyklus externer Geheimnisse verwaltet, die in externen Geheimnisspeichern wie Azure Key Vault gespeichert sind.
Fügen Sie das Helm-Repository für externe Geheimnisse hinzu, und aktualisieren Sie das Repository, indem Sie die Befehle
helm repo addundhelm repo updateverwenden.helm repo add external-secrets https://charts.external-secrets.io helm repo updateBeispielausgabe:
Hang tight while we grab the latest from your chart repositories... ...Successfully got an update from the "external-secrets" chart repositoryInstallieren Sie den Operator für externe Geheimnisse mithilfe des Befehls
helm install.helm install external-secrets \ external-secrets/external-secrets \ --namespace ${AKS_MONGODB_NAMESPACE} \ --create-namespace \ --set installCRDs=true \ --wait \ --set nodeSelector."kubernetes\.azure\.com/agentpool"=mongodbpoolBeispielausgabe:
NAME: external-secrets LAST DEPLOYED: Tue Jun 11 11:55:32 2024 NAMESPACE: mongodb STATUS: deployed REVISION: 1 TEST SUITE: None NOTES: external-secrets has been deployed successfully in namespace mongodb! In order to begin using ExternalSecrets, you will need to set up a SecretStore or ClusterSecretStore resource (for example, by creating a 'vault' SecretStore). More information on the different types of SecretStores and how to configure them can be found in our Github: https://github.com/external-secrets/external-secretsGenerieren Sie ein zufälliges Kennwort mithilfe der Funktion:
#MongoDB connection strings can contain special characters in the password, which need to be URL encoded. #This is because the connection string is a URI, and special characters can interfere with the URI structure. #This function generates secrets of 32 characters using only alphanumeric characters. generateRandomPasswordString() { cat /dev/urandom | LC_ALL=C tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1 }
Erstellen von MongoDB-Geheimnissen
Erstellen Sie mithilfe des Befehls ein MongoDB-Geheimnis vom Typ
az keyvault secret set, das für alle Sicherungs- und Wiederherstellungsvorgänge verwendet werden soll.az keyvault secret set --vault-name $MY_KEYVAULT_NAME --name MONGODB-BACKUP-USER --value MONGODB_BACKUP_USER --output none az keyvault secret set --vault-name $MY_KEYVAULT_NAME --name MONGODB-BACKUP-PASSWORD --value $(generateRandomPasswordString) --output noneErstellen Sie mithilfe des Befehls ein MongoDB-Geheimnis vom Typ
az keyvault secret setfür die Datenbankverwaltung.az keyvault secret set --vault-name $MY_KEYVAULT_NAME --name MONGODB-DATABASE-ADMIN-USER --value MONGODB_DATABASE_ADMIN_USER --output none az keyvault secret set --vault-name $MY_KEYVAULT_NAME --name MONGODB-DATABASE-ADMIN-PASSWORD --value $(generateRandomPasswordString) --output noneErstellen Sie mithilfe des Befehls ein MongoDB-Geheimnis vom Typ
az keyvault secret setfür eine Clusterverwaltungsrolle, die die Verwaltung von mehreren Datenbanken ermöglicht.az keyvault secret set --vault-name $MY_KEYVAULT_NAME --name MONGODB-CLUSTER-ADMIN-USER --value MONGODB_CLUSTER_ADMIN_USER --output none az keyvault secret set --vault-name $MY_KEYVAULT_NAME --name MONGODB-CLUSTER-ADMIN-PASSWORD --value $(generateRandomPasswordString) --output noneErstellen Sie mithilfe des Befehls ein MongoDB-Geheimnis vom Typ
az keyvault secret setfür die Clusterüberwachung.az keyvault secret set --vault-name $MY_KEYVAULT_NAME --name MONGODB-CLUSTER-MONITOR-USER --value MONGODB_CLUSTER_MONITOR_USER --output none az keyvault secret set --vault-name $MY_KEYVAULT_NAME --name MONGODB-CLUSTER-MONITOR-PASSWORD --value $(generateRandomPasswordString) --output noneErstellen Sie mithilfe des Befehls Geheimnis vom Typ „Benutzer und Kennwort“ für die
az keyvault secret set.az keyvault secret set --vault-name $MY_KEYVAULT_NAME --name MONGODB-USER-ADMIN-USER --value MONGODB_USER_ADMIN_USER --output none az keyvault secret set --vault-name $MY_KEYVAULT_NAME --name MONGODB-USER-ADMIN-PASSWORD --value $(generateRandomPasswordString) --output noneErstellen Sie mithilfe des Befehls
az keyvault secret setein Geheimnis für den API-Schlüssel, der für den Zugriff auf den Percona Monitoring and Management-Server (PMM) verwendet wird. Sie aktualisieren den Wert dieses Geheimnisses später, wenn Sie den PMM-Server bereitstellen.az keyvault secret set --vault-name $MY_KEYVAULT_NAME --name PMM-SERVER-API-KEY --value $(openssl rand -base64 32) --output noneFügen Sie mithilfe des Befehls
AZURE-STORAGE-ACCOUNT-NAMEspäteraz keyvault secret setfür Sicherungen hinzu.az keyvault secret set --vault-name $MY_KEYVAULT_NAME --name AZURE-STORAGE-ACCOUNT-NAME --value $AKS_MONGODB_BACKUP_STORAGE_ACCOUNT_NAME --output none
Führen Sie den folgenden Befehl aus, um die
mongodb.tfvarszuvor erstellte Datei mit der folgenden Konfiguration zu aktualisieren:cat >> mongodb.tfvars <<EOL mongodb_kv_secrets = { MONGODB-BACKUP-USER = "MONGODB_BACKUP_USER" MONGODB-BACKUP-PASSWORD = "$(generateRandomPasswordString)" MONGODB-DATABASE-ADMIN-USER = "MONGODB_DATABASE_ADMIN_USER" MONGODB-DATABASE-ADMIN-PASSWORD = "$(generateRandomPasswordString)" MONGODB-CLUSTER-ADMIN-USER = "MONGODB_CLUSTER_ADMIN_USER" MONGODB-CLUSTER-ADMIN-PASSWORD = "$(generateRandomPasswordString)" MONGODB-CLUSTER-MONITOR-USER = "MONGODB_CLUSTER_MONITOR_USER" MONGODB-CLUSTER-MONITOR-PASSWORD = "$(generateRandomPasswordString)" MONGODB-USER-ADMIN-USER = "MONGODB_USER_ADMIN_USER" MONGODB-USER-ADMIN-PASSWORD = "$(generateRandomPasswordString)" PMM-SERVER-API-KEY = "$(generateRandomPasswordString)" } EOLWenden Sie die Terraformkonfiguration auf die Zielressource an.
terraform fmt terraform apply -var-file="mongodb.tfvars" -target module.mongodb[0].azurerm_key_vault_secret.this
Erstellen von Geheimnisressourcen
Erstellen Sie eine
SecretStore-Ressource, um auf die im Schlüsseltresor gespeicherten MongoDB-Kennwörter zuzugreifen, indem Sie den Befehlkubectl applyverwenden.kubectl apply -f - <<EOF apiVersion: external-secrets.io/v1beta1 kind: SecretStore metadata: name: azure-store namespace: ${AKS_MONGODB_NAMESPACE} spec: provider: # provider type: azure keyvault azurekv: authType: WorkloadIdentity vaultUrl: "${KEYVAULTURL}" serviceAccountRef: name: ${SERVICE_ACCOUNT_NAME} EOFBeispielausgabe:
secretstore.external-secrets.io/azure-store createdErstellen Sie mithilfe des Befehls
ExternalSecreteinekubectl apply-Ressource. Diese Ressource erstellt ein Kubernetes-Geheimnis im Namespacemongodbmit den MongoDB-Geheimnissen in Ihrem Schlüsseltresor.kubectl apply -f - <<EOF apiVersion: external-secrets.io/v1beta1 kind: ExternalSecret metadata: name: ${AKS_MONGODB_SECRETS_NAME} namespace: ${AKS_MONGODB_NAMESPACE} spec: refreshInterval: 1h secretStoreRef: kind: SecretStore name: azure-store target: name: "${AKS_MONGODB_SECRETS_NAME}" creationPolicy: Owner data: # name of the SECRET in the Azure key vault (no prefix is by default a SECRET) - secretKey: MONGODB_BACKUP_USER remoteRef: key: MONGODB-BACKUP-USER - secretKey: MONGODB_BACKUP_PASSWORD remoteRef: key: MONGODB-BACKUP-PASSWORD - secretKey: MONGODB_DATABASE_ADMIN_USER remoteRef: key: MONGODB-DATABASE-ADMIN-USER - secretKey: MONGODB_DATABASE_ADMIN_PASSWORD remoteRef: key: MONGODB-DATABASE-ADMIN-PASSWORD - secretKey: MONGODB_CLUSTER_ADMIN_USER remoteRef: key: MONGODB-CLUSTER-ADMIN-USER - secretKey: MONGODB_CLUSTER_ADMIN_PASSWORD remoteRef: key: MONGODB-CLUSTER-ADMIN-PASSWORD - secretKey: MONGODB_CLUSTER_MONITOR_USER remoteRef: key: MONGODB-CLUSTER-MONITOR-USER - secretKey: MONGODB_CLUSTER_MONITOR_PASSWORD remoteRef: key: MONGODB-CLUSTER-MONITOR-PASSWORD - secretKey: MONGODB_USER_ADMIN_USER remoteRef: key: MONGODB-USER-ADMIN-USER - secretKey: MONGODB_USER_ADMIN_PASSWORD remoteRef: key: MONGODB-USER-ADMIN-PASSWORD - secretKey: PMM_SERVER_API_KEY remoteRef: key: PMM-SERVER-API-KEY EOFBeispielausgabe:
externalsecret.external-secrets.io/cluster-aks-mongodb-secrets createdErstellen Sie mithilfe des Befehls
ExternalSecreteinekubectl apply-Ressource. Diese Ressource erstellt ein Kubernetes-Geheimnis im Namespacemongodbfür Azure Blob Storage-Geheimnisse in Ihrem Schlüsseltresor.kubectl apply -f - <<EOF apiVersion: external-secrets.io/v1beta1 kind: ExternalSecret metadata: name: ${AKS_AZURE_SECRETS_NAME} namespace: ${AKS_MONGODB_NAMESPACE} spec: refreshInterval: 1h secretStoreRef: kind: SecretStore name: azure-store target: name: "${AKS_AZURE_SECRETS_NAME}" creationPolicy: Owner data: # name of the SECRET in the Azure key vault (no prefix is by default a SECRET) - secretKey: AZURE_STORAGE_ACCOUNT_NAME remoteRef: key: AZURE-STORAGE-ACCOUNT-NAME - secretKey: AZURE_STORAGE_ACCOUNT_KEY remoteRef: key: AZURE-STORAGE-ACCOUNT-KEY EOFBeispielausgabe:
externalsecret.external-secrets.io/cluster-aks-azure-secrets created
Erstellen Sie mit dem Befehl
az identity federated-credential createVerbundanmeldeinformationen.az identity federated-credential create \ --name external-secret-operator \ --identity-name ${MY_IDENTITY_NAME} \ --resource-group ${MY_RESOURCE_GROUP_NAME} \ --issuer ${OIDC_URL} \ --subject system:serviceaccount:${AKS_MONGODB_NAMESPACE}:${SERVICE_ACCOUNT_NAME} \ --output noneErteilen Sie mit dem Befehl
az keyvault set-policyder vom Benutzer zugewiesenen Identität die Berechtigung für den Zugriff auf das Geheimnis.az keyvault set-policy --name $MY_KEYVAULT_NAME --object-id $MY_IDENTITY_NAME_PRINCIPAL_ID --secret-permissions get --output tableBeispielausgabe:
Location Name ResourceGroup ------------- -------------- -------------------------------- australiaeast vault-cjcfc-kv myResourceGroup-rg-australiaeast
Fügen Sie die folgende Terraform-Konfiguration in
mongodb/main.tfhinzu, um Verbundanmeldeinformationen zu erstellen.## Section to create the federated identity credential for external secret operator resource "azurerm_federated_identity_credential" "this" { name = "external-secret-operator" resource_group_name = var.resource_group_name audience = ["api://AzureADTokenExchange"] issuer = var.oidc_issuer_url parent_id = azurerm_user_assigned_identity.this.id subject = "system:serviceaccount:${var.mongodb_namespace}:${var.service_account_name}" }Fügen Sie die folgende Terraform-Konfiguration in
mongodb/main.tfhinzu, um der vom Benutzer zugewiesenen Identität die Berechtigung zum Zugriff auf das Secret zu erteilen.## Section to assign permission to the user-assigned identity to access the secret resource "azurerm_key_vault_access_policy" "this" { key_vault_id = var.key_vault_id tenant_id = azurerm_user_assigned_identity.this.tenant_id object_id = azurerm_user_assigned_identity.this.principal_id secret_permissions = [ "Get" ] }Wenden Sie die Terraform-Konfiguration an.
terraform fmt terraform apply -var-file="mongodb.tfvars" \ -target=module.mongodb[0].azurerm_federated_identity_credential.this \ -target=module.mongodb[0].azurerm_key_vault_access_policy.this
Installieren von Percona Operator und CRDs
Percona Operator wird in der Regel als Kubernetes-Deployment oder -Operator verteilt. Die Bereitstellung erfolgt mit einem kubectl apply -f-Befehl über eine Manifestdatei. Sie finden die neuesten Manifeste im GitHub-Repository für Percona oder in der offiziellen Dokumentation.
Stellen Sie den Percona-Operator und benutzerdefinierte Ressourcendefinitionen (CRDs) mithilfe des Befehls
kubectl applybereit.kubectl apply --server-side -f https://raw.githubusercontent.com/percona/percona-server-mongodb-operator/v1.16.0/deploy/bundle.yaml -n "${AKS_MONGODB_NAMESPACE}"Beispielausgabe:
customresourcedefinition.apiextensions.k8s.io/perconaservermongodbbackups.psmdb.percona.com serverside-applied customresourcedefinition.apiextensions.k8s.io/perconaservermongodbrestores.psmdb.percona.com serverside-applied customresourcedefinition.apiextensions.k8s.io/perconaservermongodbs.psmdb.percona.com serverside-applied role.rbac.authorization.k8s.io/percona-server-mongodb-operator serverside-applied serviceaccount/percona-server-mongodb-operator serverside-applied rolebinding.rbac.authorization.k8s.io/service-account-percona-server-mongodb-operator serverside-applied deployment.apps/percona-server-mongodb-operator serverside-applied
Bereitstellen des MongoDB-Clusters
Stellen Sie mithilfe des Befehls
kubectl applyeinen MongoDB-Cluster mit dem Percona Operator bereit. Um eine hohe Verfügbarkeit zu gewährleisten, stellen Sie den MongoDB-Cluster mit einer Replikatgruppe mit aktiviertem Sharding in mehreren Verfügbarkeitszonen und mit einer Sicherungslösung bereit, die die Sicherungen in einem Azure Blob Storage-Konto speichert.kubectl apply -f - <<EOF apiVersion: psmdb.percona.com/v1 kind: PerconaServerMongoDB metadata: name: ${AKS_MONGODB_CLUSTER_NAME} namespace: ${AKS_MONGODB_NAMESPACE} finalizers: - delete-psmdb-pods-in-order spec: crVersion: 1.16.0 image: ${MY_ACR_REGISTRY}.azurecr.io/percona-server-mongodb:7.0.8-5 imagePullPolicy: Always updateStrategy: SmartUpdate upgradeOptions: versionServiceEndpoint: https://check.percona.com apply: disabled schedule: "0 2 * * *" setFCV: false secrets: users: "${AKS_MONGODB_SECRETS_NAME}" encryptionKey: "${AKS_MONGODB_SECRETS_ENCRYPTION_KEY}" pmm: enabled: true image: ${MY_ACR_REGISTRY}.azurecr.io/pmm-client:2.41.2 serverHost: monitoring-service replsets: - name: rs0 size: 3 affinity: antiAffinityTopologyKey: "failure-domain.beta.kubernetes.io/zone" nodeSelector: kubernetes.azure.com/agentpool: "mongodbpool" podDisruptionBudget: maxUnavailable: 1 expose: enabled: false exposeType: ClusterIP resources: limits: cpu: "300m" memory: "0.5G" requests: cpu: "300m" memory: "0.5G" volumeSpec: persistentVolumeClaim: storageClassName: managed-csi-premium accessModes: ["ReadWriteOnce"] resources: requests: storage: 1Gi nonvoting: enabled: false size: 3 affinity: antiAffinityTopologyKey: "failure-domain.beta.kubernetes.io/zone" nodeSelector: kubernetes.azure.com/agentpool: "mongodbpool" podDisruptionBudget: maxUnavailable: 1 resources: limits: cpu: "300m" memory: "0.5G" requests: cpu: "300m" memory: "0.5G" volumeSpec: persistentVolumeClaim: storageClassName: managed-csi-premium accessModes: ["ReadWriteOnce"] resources: requests: storage: 1Gi arbiter: enabled: false size: 1 affinity: antiAffinityTopologyKey: "failure-domain.beta.kubernetes.io/zone" nodeSelector: kubernetes.azure.com/agentpool: "mongodbpool" resources: limits: cpu: "300m" memory: "0.5G" requests: cpu: "300m" memory: "0.5G" sharding: enabled: true configsvrReplSet: size: 3 affinity: antiAffinityTopologyKey: "failure-domain.beta.kubernetes.io/zone" nodeSelector: kubernetes.azure.com/agentpool: "mongodbpool" podDisruptionBudget: maxUnavailable: 1 expose: enabled: false resources: limits: cpu: "300m" memory: "0.5G" requests: cpu: "300m" memory: "0.5G" volumeSpec: persistentVolumeClaim: storageClassName: managed-csi-premium accessModes: ["ReadWriteOnce"] resources: requests: storage: 1Gi mongos: size: 3 affinity: antiAffinityTopologyKey: "failure-domain.beta.kubernetes.io/zone" nodeSelector: kubernetes.azure.com/agentpool: "mongodbpool" podDisruptionBudget: maxUnavailable: 1 resources: limits: cpu: "300m" memory: "0.5G" requests: cpu: "300m" memory: "0.5G" expose: exposeType: ClusterIP backup: enabled: true image: ${MY_ACR_REGISTRY}.azurecr.io/percona-backup-mongodb:2.4.1 storages: azure-blob: type: azure azure: container: "${AKS_MONGODB_BACKUP_STORAGE_CONTAINER_NAME}" prefix: psmdb endpointUrl: "https://${AKS_MONGODB_BACKUP_STORAGE_ACCOUNT_NAME}.blob.core.windows.net" credentialsSecret: "${AKS_AZURE_SECRETS_NAME}" pitr: enabled: false oplogOnly: false compressionType: gzip compressionLevel: 6 tasks: - name: daily-azure-us-east enabled: true schedule: "0 0 * * *" keep: 3 storageName: azure-blob compressionType: gzip compressionLevel: 6 EOFBeispielausgabe:
perconaservermongodb.psmdb.percona.com/cluster-aks-mongodb createdSchließen Sie den MongoDB-Clusterbereitstellungsprozess mit dem folgenden Skript ab:
while [ "$(kubectl get psmdb -n ${AKS_MONGODB_NAMESPACE} -o jsonpath='{.items[0].status.state}')" != "ready" ]; do echo "waiting for MongoDB cluster to be ready"; sleep 10; doneNach Abschluss des Prozesses weist Ihr Cluster den Status
Readyauf. Sie können den Status mithilfe des Befehlskubectl getanzeigen.kubectl get psmdb -n ${AKS_MONGODB_NAMESPACE}Beispielausgabe:
NAME ENDPOINT STATUS AGE cluster-aks-mongodb cluster-aks-mongodb-mongos.mongodb.svc.cluster.local ready 3m1sZeigen Sie die Verfügbarkeitszonen der Knoten in Ihrem Cluster mithilfe des Befehls
kubectl getan.kubectl get node -o custom-columns=Name:.metadata.name,Zone:".metadata.labels.topology\.kubernetes\.io/zone"Beispielausgabe:
Name Zone aks-mongodbpool-30094695-vmss000000 australiaeast-1 aks-systempool-28994785-vmss000000 australiaeast-1 aks-systempool-28994785-vmss000001 australiaeast-2 aks-systempool-28994785-vmss000002 australiaeast-3
Herstellen einer Verbindung mit Percona Server
Um eine Verbindung mit Percona Server for MongoDB herzustellen, müssen Sie die Zeichenfolge für den MongoDB-Verbindungs-URI erstellen. Er enthält die Anmeldeinformationen des Administratorbenutzers, die im Secrets-Objekt gespeichert sind.
Listen Sie die
Secrets-Objekte mithilfe des Befehlskubectl getauf.kubectl get secrets -n ${AKS_MONGODB_NAMESPACE}Beispielausgabe:
NAME TYPE DATA AGE cluster-aks-azure-secrets Opaque 2 2m56s cluster-aks-mongodb-mongodb-keyfile Opaque 1 2m54s cluster-aks-mongodb-secrets Opaque 11 2m56s cluster-aks-mongodb-secrets-mongodb-encryption-key Opaque 1 2m54s cluster-aks-mongodb-ssl kubernetes.io/tls 3 2m55s cluster-aks-mongodb-ssl-internal kubernetes.io/tls 3 2m54s external-secrets-webhook Opaque 4 3m49s internal-cluster-aks-mongodb-users Opaque 11 2m56s sh.helm.release.v1.external-secrets.v1 helm.sh/release.v1 1 3m49sZeigen Sie mithilfe des Befehls
Secretsdenkubectl get-Inhalt an, um die Administratorbenutzer-Anmeldeinformationen abzurufen.kubectl describe secret ${AKS_MONGODB_SECRETS_NAME} -n ${AKS_MONGODB_NAMESPACE}Beispielausgabe:
Name: cluster-aks-mongodb-secrets Namespace: mongodb Labels: reconcile.external-secrets.io/managed=true Annotations: <none> Type: Opaque Data ==== MONGODB_CLUSTER_ADMIN_USER: 12 bytes MONGODB_CLUSTER_MONITOR_PASSWORD: 16 bytes MONGODB_CLUSTER_MONITOR_USER: 14 bytes MONGODB_DATABASE_ADMIN_USER: 13 bytes MONGODB_USER_ADMIN_USER: 9 bytes MONGODB_BACKUP_PASSWORD: 16 bytes MONGODB_BACKUP_USER: 6 bytes MONGODB_CLUSTER_ADMIN_PASSWORD: 18 bytes MONGODB_DATABASE_ADMIN_PASSWORD: 18 bytes MONGODB_USER_ADMIN_PASSWORD: 17 bytesDecodieren Sie den Base64-codierten Anmeldenamen und das Kennwort, und exportieren Sie die Verbindungszeichenfolge mithilfe der folgenden Befehle in die Umgebungsvariable:
Important
Microsoft empfiehlt, immer den sichersten Authentifizierungsflow zu verwenden. Der in diesem Verfahren beschriebene Authentifizierungsflow erfordert ein sehr hohes Maß an Vertrauen in die Anwendung und birgt Risiken, die bei anderen Flows nicht vorhanden sind. Sie sollten diesen Flow nur verwenden, wenn andere sicherere Flows, z. B. verwaltete Identitäten, nicht praktikabel sind.
export databaseAdmin=$(kubectl get secret ${AKS_MONGODB_SECRETS_NAME} -n ${AKS_MONGODB_NAMESPACE} -o jsonpath="{.data.MONGODB_DATABASE_ADMIN_USER}" | base64 --decode)
export databaseAdminPassword=$(kubectl get secret ${AKS_MONGODB_SECRETS_NAME} -n ${AKS_MONGODB_NAMESPACE} -o jsonpath="{.data.MONGODB_DATABASE_ADMIN_PASSWORD}" | base64 --decode)
export connectionString="mongodb://${databaseAdmin}:${databaseAdminPassword}@${AKS_MONGODB_CLUSTER_NAME}-mongos.mongodb.svc.cluster.local/admin?replicaSet=rs0&ssl=false&directConnection=true"
Verifizieren des MongoDB-Clusters
In diesem Abschnitt überprüfen Sie Ihren MongoDB-Cluster, indem Sie einen Container mit einem MongoDB-Client ausführen und die Konsolenausgabe mit Ihrem Terminal verbinden.
Erstellen Sie einen Pod namens
percona-clientunter dem${AKS_MONGODB_NAMESPACE}-Namespace in Ihrem Cluster mithilfe des Befehlskubectl run.kubectl -n "${AKS_MONGODB_NAMESPACE}" run -i --rm --tty percona-client --image=${MY_ACR_REGISTRY}.azurecr.io/percona-server-mongodb:7.0.8-5 --restart=Never -- env CONN_STR=$connectionString bash -ilÜberprüfen Sie in einem anderen Terminalfenster mithilfe des Befehls
kubectl get, ob der Pod erfolgreich erstellt wurde.kubectl get pod percona-client -n ${AKS_MONGODB_NAMESPACE}Beispielausgabe:
NAME READY STATUS RESTARTS AGE percona-client 1/1 Running 0 39sStellen Sie mithilfe der Administratorbenutzer-Anmeldeinformationen aus dem vorherigen Abschnitt in dem Terminalfenster, das Sie zum Erstellen des
percona-client-Pods verwendet haben, eine Verbindung mit dem MongoDB-Cluster her.mongosh $CONN_STRBeispielausgabe:
Current Mongosh Log ID: L6mN7oP8qR9sT0uV1wX2yZ3a Connecting to: mongodb://<credentials>@cluster-aks-mongodb-mongos.mongodb.svc.cluster.local/admin?replicaSet=rs0&ssl=false&directConnection=true&appName=mongosh+2.1.5 Using MongoDB: 7.0.8-5 Using Mongosh: 2.1.5 For mongosh info see: https://docs.mongodb.com/mongodb-shell/ ...Listen Sie die Datenbanken in Ihrem Cluster mit dem Befehl
show dbsauf.show dbsBeispielausgabe:
rs0 [direct: mongos] admin> show dbs admin 960.00 KiB config 3.45 MiB rs0 [direct: mongos] admin>
Erstellen einer MongoDB-Sicherung
Sie können Ihre Daten mit einer der folgenden Methoden in Azure sichern:
- Manuell: Sichern Sie Ihre Daten jederzeit manuell.
- Geplant: Konfigurieren Sie Sicherungen und deren Zeitpläne im CRD-YAML. Percona Operator führt sie automatisch entsprechend dem angegebenen Zeitplan aus.
Percona Operator kann die folgenden Sicherungstypen ausführen:
- Logische Sicherung: Abfragen von Percona Server for MongoDB nach den Datenbankdaten und Schreiben der abgerufenen Daten in den Remotesicherungsspeicher.
-
Physische Sicherung: Kopieren von physischen Dateien aus dem Percona Server for MongoDB-Datenverzeichnis
dbPathin den Remotesicherungsspeicher.
Logische Sicherungen verwenden weniger Speicher, sind aber langsamer als physische Sicherungen.
Um Sicherungen mit Percona in Azure Blob Storage zu speichern, müssen Sie ein Geheimnis erstellen. Sie haben diesen Schritt in einem früheren Befehl abgeschlossen. Ausführliche Anweisungen finden Sie in der Percona-Dokumentation zu Azure Blob Storage.
Konfigurieren von geplanten Sicherungen
Sie können den Sicherungszeitplan im Sicherungsabschnitt der CRD in mongodb-cr.yaml mithilfe der folgenden Anleitung definieren:
- Legen Sie den
backup.enabled-Schlüssel auftruefest. - Stellen Sie sicher, dass der Unterabschnitt
backup.storagesmindestens eine konfigurierte Speicherressource enthält. - Stellen Sie sicher, dass der Unterabschnitt
backup.tasksdie Sicherungsplanung ermöglicht.
Weitere Informationen finden Sie unter Planen von Sicherungen.
Durchführen manueller Sicherungen
Sie können eine manuelle bedarfsgesteuerte Sicherung im Sicherungsabschnitt der CRD in mongodb-cr.yaml mithilfe der folgenden Anleitung erstellen:
- Legen Sie den
backup.enabled-Schlüssel auftruefest. - Stellen Sie sicher, dass der Unterabschnitt
backup.storagesmindestens eine konfigurierte Speicherressource enthält.
Weitere Informationen finden Sie unter Erstellen von bedarfsgesteuerten Sicherungen.
Bereitstellen einer MongoDB-Sicherung
Stellen Sie Ihre MongoDB-Sicherung mithilfe des Befehls
kubectl applybereit.kubectl apply -f - <<EOF apiVersion: psmdb.percona.com/v1 kind: PerconaServerMongoDBBackup metadata: finalizers: - delete-backup name: az-backup1 namespace: ${AKS_MONGODB_NAMESPACE} spec: clusterName: ${AKS_MONGODB_CLUSTER_NAME} storageName: azure-blob type: logical EOFBeispielausgabe:
perconaservermongodbbackup.psmdb.percona.com/az-backup1 createdSchließen Sie den MongoDB-Sicherungsbereitstellungsprozess mit dem folgenden Skript ab:
while [ "$(kubectl get psmdb-backup -n ${AKS_MONGODB_NAMESPACE} -o jsonpath='{.items[0].status.state}')" != "ready" ]; do echo "waiting for the backup to be ready"; sleep 10; doneBeispielausgabe:
waiting for the backup to be readyNach Abschluss des Prozesses sollte die Sicherung den Status
Readyzurückgeben. Überprüfen Sie, ob die Sicherungsbereitstellung erfolgreich war, indem Sie den Befehlkubectl getverwenden.kubectl get psmdb-backup -n ${AKS_MONGODB_NAMESPACE}Beispielausgabe:
NAME CLUSTER STORAGE DESTINATION TYPE STATUS COMPLETED AGE az-backup1 cluster-aks-mongodb azure-blob https://mongodbsacjcfc.blob.core.windows.net/backups/psmdb/2024-07-01T12:27:57Z logical ready 3h3m 3h3mWenn Sie Probleme mit der Sicherung haben, können Sie mithilfe des Befehls
backup-agentProtokolle aus dem Containerkubectl logsdes entsprechenden Pods anzeigen.kubectl logs pod/${AKS_MONGODB_CLUSTER_NAME}-rs0-0 -c backup-agent -n ${AKS_MONGODB_NAMESPACE}