Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule skonfigurujesz i wdrożysz klaster bazy danych MongoDB w usłudze Azure Kubernetes Service (AKS).
Konfiguracja tożsamości zadania
Utwórz przestrzeń nazw dla klastra Bazy danych MongoDB przy użyciu
kubectl create namespacepolecenia .kubectl create namespace ${AKS_MONGODB_NAMESPACE} --dry-run=client --output yaml | kubectl apply -f -Przykładowy wynik:
namespace/mongodb createdUtwórz konto usługi i skonfiguruj tożsamość dla obciążenia przy użyciu polecenia
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}" EOFPrzykładowy wynik:
serviceaccount/mongodb created
Instalacja External Secrets Operator
W tej sekcji użyjesz Helm do zainstalowania External Secrets Operator. Operator Zewnętrznych Tajemnic to Operator Kubernetes, który zarządza cyklem życia tajemnic przechowywanych w zewnętrznych repozytoriach tajemnic, takich jak Azure Key Vault.
Dodaj repozytorium Helm Zewnętrznych Sekretów i zaktualizuj repozytorium przy użyciu poleceń
helm repo addihelm repo update.helm repo add external-secrets https://charts.external-secrets.io helm repo updatePrzykładowy wynik:
Hang tight while we grab the latest from your chart repositories... ...Successfully got an update from the "external-secrets" chart repositoryZainstaluj Operator zewnętrznych wpisów tajnych przy użyciu polecenia
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"=mongodbpoolPrzykładowy wynik:
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-secretsWygeneruj losowe hasło przy użyciu funkcji :
#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 }
Utwórz sekrety MongoDB
Utwórz tajny użytkownika i hasła kopii zapasowej MongoDB do użycia podczas operacji tworzenia i przywracania kopii zapasowych z wykorzystaniem polecenia
az keyvault secret set.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 noneUtwórz sekretny wpis danych użytkownika administratora bazy danych i hasła dla administracji bazą MongoDB przy użyciu polecenia
az keyvault secret set.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 noneUtwórz użytkownika administracyjnego klastra MongoDB i tajemnicę administratora dla roli administracyjnej klastra, która umożliwia zarządzanie wieloma bazami danych przy użyciu
az keyvault secret setpolecenia.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 noneUtwórz sekret "użytkownika monitorowania klastra" oraz "admina" do monitorowania klastra bazy danych MongoDB przy użyciu polecenia .
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 noneUtwórz sekret użytkownika oraz hasła do administrowania użytkownikami przy użyciu polecenia
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 noneUtwórz sekret dla klucza API używanego do uzyskiwania dostępu do serwera Percona Monitoring and Management (PMM) za pomocą polecenia
az keyvault secret set. Zaktualizujesz wartość tego sekretu później, podczas wdrażania serwera PMM.az keyvault secret set --vault-name $MY_KEYVAULT_NAME --name PMM-SERVER-API-KEY --value $(openssl rand -base64 32) --output noneDodaj
AZURE-STORAGE-ACCOUNT-NAMEdo późniejszego użycia w kopiach zapasowych, korzystając z poleceniaaz keyvault secret set.az keyvault secret set --vault-name $MY_KEYVAULT_NAME --name AZURE-STORAGE-ACCOUNT-NAME --value $AKS_MONGODB_BACKUP_STORAGE_ACCOUNT_NAME --output none
Uruchom następujące polecenie, aby zaktualizować
mongodb.tfvarsutworzony wcześniej plik przy użyciu następującej konfiguracji: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)" } EOLZastosuj konfigurację Terraform do docelowego zasobu.
terraform fmt terraform apply -var-file="mongodb.tfvars" -target module.mongodb[0].azurerm_key_vault_secret.this
Tworzenie zasobów wpisów tajnych
Utwórz zasób
SecretStoreaby uzyskać dostęp do haseł MongoDB przechowywanych w magazynie kluczy przy użyciu poleceniakubectl apply.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} EOFPrzykładowy wynik:
secretstore.external-secrets.io/azure-store createdUtwórz zasób
ExternalSecretza pomocą poleceniakubectl applyTen zasób tworzy tajny Kubernetes w przestrzeni nazwmongodbz tajnymi danymi MongoDB przechowywanymi w magazynie kluczy.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 EOFPrzykładowy wynik:
externalsecret.external-secrets.io/cluster-aks-mongodb-secrets createdUtwórz zasób
ExternalSecretza pomocą poleceniakubectl applyTen zasób tworzy tajemnicę Kubernetes w przestrzeni nazwmongodbdla tajemnic dotyczących Azure Blob Storage przechowywanych w twoim magazynie kluczy.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 EOFPrzykładowy wynik:
externalsecret.external-secrets.io/cluster-aks-azure-secrets created
Utwórz poświadczenia federacyjne za pomocą polecenia
az identity federated-credential create.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 noneNadaj uprawnienia tożsamości przypisanej przez użytkownika, aby uzyskać dostęp do sekretu za pomocą polecenia
az keyvault set-policy.az keyvault set-policy --name $MY_KEYVAULT_NAME --object-id $MY_IDENTITY_NAME_PRINCIPAL_ID --secret-permissions get --output tablePrzykładowy wynik:
Location Name ResourceGroup ------------- -------------- -------------------------------- australiaeast vault-cjcfc-kv myResourceGroup-rg-australiaeast
Dodaj następującą konfigurację terraform w
mongodb/main.tfaby utworzyć poświadczenia federacyjne.## 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}" }Dodaj następującą konfigurację narzędzia terraform w
mongodb/main.tf, aby udzielić uprawnień tożsamości przypisanej przez użytkownika do uzyskania dostępu do tajemnicy.## 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" ] }Zastosuj konfigurację Terraform.
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
Instalowanie operatorów Percona i CRD
Percona Operator jest zwykle rozprowadzany jako operator Kubernetes Deployment lub Operator. Można go wdrożyć przy użyciu kubectl apply -f polecenia z plikiem manifestu. Najnowsze manifesty można znaleźć w repozytorium Percona GitHub lub oficjalnej dokumentacji.
Wdróż Operator Percona i niestandardowe definicje zasobów (CRD) przy użyciu polecenia
kubectl apply.kubectl apply --server-side -f https://raw.githubusercontent.com/percona/percona-server-mongodb-operator/v1.16.0/deploy/bundle.yaml -n "${AKS_MONGODB_NAMESPACE}"Przykładowy wynik:
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
Wdrażanie klastra bazy danych MongoDB
Wdróż klaster Bazy danych MongoDB za pomocą operatora Percona przy użyciu
kubectl applypolecenia . Aby zapewnić wysoką dostępność, należy wdrożyć klaster Bazy danych MongoDB z zestawem replik z włączonym fragmentowaniem, w wielu strefach dostępności i rozwiązaniem do tworzenia kopii zapasowych, które przechowuje kopie zapasowe na koncie usługi Azure Blob Storage.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 EOFPrzykładowy wynik:
perconaservermongodb.psmdb.percona.com/cluster-aks-mongodb createdZakończ proces wdrażania klastra MongoDB przy użyciu następującego skryptu:
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; donePo zakończeniu procesu klaster pokazuje status
Ready. Stan można wyświetlić przy użyciukubectl getpolecenia .kubectl get psmdb -n ${AKS_MONGODB_NAMESPACE}Przykładowy wynik:
NAME ENDPOINT STATUS AGE cluster-aks-mongodb cluster-aks-mongodb-mongos.mongodb.svc.cluster.local ready 3m1sWyświetl strefy dostępności węzłów w klastrze przy użyciu
kubectl getpolecenia .kubectl get node -o custom-columns=Name:.metadata.name,Zone:".metadata.labels.topology\.kubernetes\.io/zone"Przykładowy wynik:
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
Nawiązywanie połączenia z serwerem Percona
Aby nawiązać połączenie z Percona Server for MongoDB, należy skonstruować ciąg URI połączenia MongoDB. Zawiera poświadczenia użytkownika administratora, które są przechowywane w Secrets obiekcie.
SecretsWyświetl listę obiektów przy użyciukubectl getpolecenia .kubectl get secrets -n ${AKS_MONGODB_NAMESPACE}Przykładowy wynik:
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 3m49sWyświetl zawartość
Secretsaby pobrać poświadczenia użytkownika administratora przy użyciu poleceniakubectl get.kubectl describe secret ${AKS_MONGODB_SECRETS_NAME} -n ${AKS_MONGODB_NAMESPACE}Przykładowy wynik:
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 bytesZdekoduj zakodowaną w formacie Base64 nazwę logowania i hasło i wyeksportuj parametry połączenia do zmiennej środowiskowej przy użyciu następujących poleceń:
Important
Firma Microsoft zaleca korzystanie z najbezpieczniejszego dostępnego przepływu uwierzytelniania. Przepływ uwierzytelniania opisany w tej procedurze wymaga bardzo wysokiego poziomu zaufania w aplikacji i niesie ze sobą ryzyko, które nie występują w innych przepływach. Tego przepływu należy używać tylko wtedy, gdy inne bezpieczniejsze przepływy, takie jak tożsamości zarządzane, nie są opłacalne.
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"
Weryfikowanie klastra bazy danych MongoDB
W tej sekcji zweryfikujesz klaster bazy danych MongoDB, uruchamiając kontener z klientem bazy danych MongoDB i połączysz dane wyjściowe konsoli z terminalem.
Utwórz pod o nazwie
percona-clientw przestrzeni nazw${AKS_MONGODB_NAMESPACE}w swoim klastrze przy użyciu poleceniakubectl 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 -ilW innym oknie terminalu sprawdź, czy pod został pomyślnie utworzony przy użyciu polecenia
kubectl get.kubectl get pod percona-client -n ${AKS_MONGODB_NAMESPACE}Przykładowy wynik:
NAME READY STATUS RESTARTS AGE percona-client 1/1 Running 0 39sPołącz się z klastrem MongoDB używając poświadczeń użytkownika admin z poprzedniego działu w oknie terminalu, które było użyte do utworzenia zasobnika
percona-client.mongosh $CONN_STRPrzykładowy wynik:
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/ ...Wyświetl listę baz danych w klastrze przy użyciu
show dbspolecenia .show dbsPrzykładowy wynik:
rs0 [direct: mongos] admin> show dbs admin 960.00 KiB config 3.45 MiB rs0 [direct: mongos] admin>
Tworzenie kopii zapasowej bazy danych MongoDB
Możesz utworzyć kopię zapasową danych na platformie Azure przy użyciu jednej z następujących metod:
- Ręczne: ręczne tworzenie kopii zapasowych danych w dowolnym momencie.
- Zaplanowane: Skonfiguruj kopie zapasowe i ich harmonogramy w YAML CRD. Operator percona tworzy kopie zapasowe automatycznie zgodnie z określonym harmonogramem.
Operator percona może wykonywać jedną z następujących typów kopii zapasowych:
- Kopia zapasowa logiczna: wykonaj zapytanie względem serwera Percona Server for MongoDB dla danych bazy danych, a następnie zapisz pobrane dane w zdalnym magazynie kopii zapasowych.
-
Kopia zapasowa fizyczna: skopiuj pliki fizyczne z katalogu danych Programu Percona Server for MongoDB
dbPathdo zdalnego magazynu kopii zapasowych.
Kopie zapasowe logiczne używają mniejszej ilości miejsca do magazynowania, ale są wolniejsze niż fizyczne kopie zapasowe.
Aby przechowywać kopie zapasowe w Azure Blob Storage za pomocą Percona, musisz utworzyć sekret. Ten krok został ukończony we wcześniejszym poleceniu. Aby uzyskać szczegółowe instrukcje, wykonaj kroki opisane w dokumentacji narzędzia Percona dotyczącej usługi Azure Blob Storage.
Konfigurowanie zaplanowanych kopii zapasowych
Harmonogram tworzenia kopii zapasowych można zdefiniować w sekcji kopii zapasowej crD w pliku mongodb-cr.yaml , korzystając z poniższych wskazówek:
- Ustaw klucz
backup.enabledna wartośćtrue. - Upewnij się, że podsekcja
backup.storageszawiera co najmniej jeden skonfigurowany zasób pamięci masowej. - Upewnij się, że podsekcja
backup.tasksumożliwia planowanie kopii zapasowych.
Aby uzyskać więcej informacji, zobacz Tworzenie zaplanowanych kopii zapasowych.
Wykonywanie ręcznych kopii zapasowych
Możesz utworzyć ręczną kopię zapasową na żądanie w sekcji kopii zapasowej crD w pliku mongodb-cr.yaml , korzystając z poniższych wskazówek:
- Ustaw klucz
backup.enabledna wartośćtrue. - Upewnij się, że podsekcja
backup.storageszawiera co najmniej jeden skonfigurowany zasób pamięci masowej.
Aby uzyskać więcej informacji, zobacz Tworzenie kopii zapasowych na żądanie.
Wdrażanie kopii zapasowej bazy danych MongoDB
Wdróż kopię zapasową
kubectl applybazy danych MongoDB przy użyciu polecenia .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 EOFPrzykładowy wynik:
perconaservermongodbbackup.psmdb.percona.com/az-backup1 createdZakończ proces wdrażania kopii zapasowej bazy danych MongoDB przy użyciu następującego skryptu:
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; donePrzykładowy wynik:
waiting for the backup to be readyPo zakończeniu procesu, kopia zapasowa powinna zwrócić status
Ready. Sprawdź, czy wdrożenie kopii zapasowej zakończyło się pomyślnie, używająckubectl getpolecenia .kubectl get psmdb-backup -n ${AKS_MONGODB_NAMESPACE}Przykładowy wynik:
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 3h3mJeśli masz problemy z kopią zapasową, możesz wyświetlić dzienniki z kontenera odpowiedniego podu przy użyciu polecenia
backup-agent.kubectl logs pod/${AKS_MONGODB_CLUSTER_NAME}-rs0-0 -c backup-agent -n ${AKS_MONGODB_NAMESPACE}