Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede, Azure Kubernetes Service'te (AKS) bir MongoDB kümesi yapılandırıp dağıtacaksınız.
İş yükü kimliğini yapılandırma
komutunu kullanarak MongoDB kümesi için bir ad alanı
kubectl create namespaceoluşturun.kubectl create namespace ${AKS_MONGODB_NAMESPACE} --dry-run=client --output yaml | kubectl apply -f -Örnek çıkış:
namespace/mongodb createdKomutunu kullanarak
kubectl applybir hizmet hesabı oluşturun ve bir iş yükü kimliği yapılandırın.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}" EOFÖrnek çıkış:
serviceaccount/mongodb created
Harici Gizli Bilgiler Operatörü Kurulumu
Bu bölümde, Helm aracını kullanarak External Secrets Operator'ü yükleyeceksiniz. Dış Gizli Diziler operatörü, Azure Key Vault gibi dış gizli dizi depolarında depolanan dış gizli dizilerin yaşam döngüsünü yöneten bir Kubernetes operatörüdür.
Harici Sırlar Helm deposunu ekleyin ve
helm repo addvehelm repo updatekomutlarını kullanarak depoyu güncelleyin.helm repo add external-secrets https://charts.external-secrets.io helm repo updateÖrnek çıkış:
Hang tight while we grab the latest from your chart repositories... ...Successfully got an update from the "external-secrets" chart repositoryhelm installkomutunu kullanarak External Secrets Operator'ü yükleyin.helm install external-secrets \ external-secrets/external-secrets \ --namespace ${AKS_MONGODB_NAMESPACE} \ --create-namespace \ --set installCRDs=true \ --wait \ --set nodeSelector."kubernetes\.azure\.com/agentpool"=mongodbpoolÖrnek çıkış:
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-secretsişlevini kullanarak rastgele bir parola oluşturun:
#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 }
MongoDB gizli bilgileri oluşturma
komutunu kullanarak herhangi bir yedekleme ve geri yükleme işlemi için kullanılacak bir MongoDB yedekleme kullanıcısı ve parola gizli dizisi
az keyvault secret setoluşturun.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 noneKomutu kullanarak veritabanı yönetimi için bir MongoDB veritabanı yöneticisi kullanıcı adı ve parola gizli anahtarı oluşturun.
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 noneKomutunu kullanarak birden fazla veritabanı için yönetim sağlayan bir küme yönetim rolü için MongoDB küme yönetim kullanıcısı ve yönetici gizli anahtarı oluşturun.
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 noneCluster izleme kullanıcısı ve yönetici sırrı oluşturmak için
az keyvault secret setkomutunu kullanarak bir MongoDB kümesi izleme oluşturun.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 nonekomutunu kullanarak
az keyvault secret setiçin bir kullanıcı ve parola sırrı oluşturun.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 noneaz keyvault secret setkomutunu kullanarak Percona İzleme ve Yönetimi (PMM) sunucusuna erişmek için kullanılan API anahtarına ait bir gizli anahtar oluşturun. Bu gizlinin değerini daha sonra PMM sunucusunu dağıttığınızda güncellersiniz.az keyvault secret set --vault-name $MY_KEYVAULT_NAME --name PMM-SERVER-API-KEY --value $(openssl rand -base64 32) --output noneAZURE-STORAGE-ACCOUNT-NAMEöğesini,az keyvault secret setkomutunu kullanarak daha sonra yedeklemeler için kullanmak üzere ekleyin.az keyvault secret set --vault-name $MY_KEYVAULT_NAME --name AZURE-STORAGE-ACCOUNT-NAME --value $AKS_MONGODB_BACKUP_STORAGE_ACCOUNT_NAME --output none
Daha önce oluşturulan dosyayı aşağıdaki yapılandırmayla güncelleştirmek
mongodb.tfvarsiçin aşağıdaki komutu çalıştırın: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)" } EOLTerraform yapılandırmasını hedef kaynağa uygulayın.
terraform fmt terraform apply -var-file="mongodb.tfvars" -target module.mongodb[0].azurerm_key_vault_secret.this
Gizli kaynaklar oluştur
komutunu kullanarak
SecretStoreanahtar kasanızda depolanan MongoDB parolalarına erişmek için birkubectl applykaynak oluşturun.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} EOFÖrnek çıkış:
secretstore.external-secrets.io/azure-store createdExternalSecretkaynak oluşturmak içinkubectl applykomutunu kullanın. Bu kaynak, anahtar kasanızda depolanan MongoDB gizli verisiylemongodbad alanında bir Kubernetes gizli veri oluşturur.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 EOFÖrnek çıkış:
externalsecret.external-secrets.io/cluster-aks-mongodb-secrets createdExternalSecretkaynak oluşturmak içinkubectl applykomutunu kullanın. Bu kaynak, anahtar kasanızda depolanan Azure Blob Depolama gizli anahtarları içinmongodbnamespace'inde bir Kubernetes gizli anahtarı oluşturur.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 EOFÖrnek çıkış:
externalsecret.external-secrets.io/cluster-aks-azure-secrets created
komutunu kullanarak
az identity federated-credential createbir federasyon kimlik bilgisi oluşturun.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 noneKullanıcı atanmış kimliğe
az keyvault set-policykomutu kullanılarak gizli anahtara erişim izni verin.az keyvault set-policy --name $MY_KEYVAULT_NAME --object-id $MY_IDENTITY_NAME_PRINCIPAL_ID --secret-permissions get --output tableÖrnek çıkış:
Location Name ResourceGroup ------------- -------------- -------------------------------- australiaeast vault-cjcfc-kv myResourceGroup-rg-australiaeast
Federasyon kimlik bilgisi oluşturmak için aşağıdaki terraform yapılandırmasını
mongodb/main.tfiçine ekleyin.## 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}" }Kullanıcı tarafından atanan kimliğe gizli anahtara erişim izni vermek için aşağıdaki terraform yapılandırmasını
mongodb/main.tfiçine ekleyin.## 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" ] }Terraform yapılandırmasını uygulayın.
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
Percona İşlecini ve CRD'leri yükleme
Percona İşleci genellikle kubernetes Deployment veya Operatorolarak dağıtılır. Bildirim dosyası içeren bir kubectl apply -f komut kullanarak dağıtabilirsiniz. En son bildirimleri Percona GitHub deposunda veya resmi belgelerde bulabilirsiniz.
komutunu kullanarak Percona İşleci'ni ve özel kaynak tanımlarını (CRD) dağıtın
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}"Örnek çıkış:
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
MongoDB kümesini dağıtma
komutunu kullanarak Percona İşleci ile bir MongoDB kümesi dağıtın
kubectl apply. Yüksek kullanılabilirlik sağlamaya yardımcı olmak için MongoDB kümesini, parçalama etkinleştirilmiş bir çoğaltma kümesiyle, birden çok erişilebilirlik bölgesinde ve yedeklemeleri bir Azure Blob Depolama hesabında depolayan bir yedekleme çözümüyle dağıtırsınız.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 EOFÖrnek çıkış:
perconaservermongodb.psmdb.percona.com/cluster-aks-mongodb createdAşağıdaki betiği kullanarak MongoDB kümesi dağıtım işlemini tamamlayın:
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; doneİşlem tamamlandığında, kümeniz
Readydurumunu gösterir. komutunu kullanarakkubectl getdurumu görüntüleyebilirsiniz.kubectl get psmdb -n ${AKS_MONGODB_NAMESPACE}Örnek çıkış:
NAME ENDPOINT STATUS AGE cluster-aks-mongodb cluster-aks-mongodb-mongos.mongodb.svc.cluster.local ready 3m1skomutunu kullanarak
kubectl getkümenizdeki düğümlerin kullanılabilirlik alanlarını görüntüleyin.kubectl get node -o custom-columns=Name:.metadata.name,Zone:".metadata.labels.topology\.kubernetes\.io/zone"Örnek çıkış:
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
Percona Sunucusuna bağlanma
MongoDB için Percona Sunucusu'na bağlanmak için MongoDB bağlantı URI dizesini oluşturmanız gerekir. Nesnesinde Secrets depolanan yönetici kullanıcının kimlik bilgilerini içerir.
Secretskomutunu kullanarak nesneleri listeleyinkubectl get.kubectl get secrets -n ${AKS_MONGODB_NAMESPACE}Örnek çıkış:
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 3m49sSecretskomutunu kullanarakkubectl getyönetici kullanıcı kimlik bilgilerini almak için içeriği görüntüleyin.kubectl describe secret ${AKS_MONGODB_SECRETS_NAME} -n ${AKS_MONGODB_NAMESPACE}Örnek çıkış:
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 bytesAşağıdaki komutları kullanarak Base64 ile kodlanmış oturum açma adı ve parolasının kodunu çözerek bağlantı dizesini ortam değişkenine aktarın:
Important
Microsoft, kullanılabilir en güvenli kimlik doğrulama akışını kullanmanızı önerir. Bu yordamda açıklanan kimlik doğrulama akışı, uygulamada çok yüksek düzeyde güven gerektirir ve diğer akışlarda mevcut olmayan riskleri taşır. Bu akışı yalnızca yönetilen kimlikler gibi diğer daha güvenli akışlar uygun olmadığında kullanmalısınız.
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"
MongoDB kümesini doğrulama
Bu bölümde, MongoDB istemcisiyle bir kapsayıcı çalıştırarak MongoDB kümenizi doğrular ve konsol çıkışını terminalinize bağlarsınız.
komutunu kullanarak
percona-clientkümenizdeki ad alanının altında${AKS_MONGODB_NAMESPACE}adlıkubectl runbir pod oluşturun.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 -ilFarklı bir terminal penceresinde
kubectl getkomutunu kullanarak pod'un başarıyla oluşturulduğunu doğrulayın.kubectl get pod percona-client -n ${AKS_MONGODB_NAMESPACE}Örnek çıkış:
NAME READY STATUS RESTARTS AGE percona-client 1/1 Running 0 39sPod oluşturmak için kullandığınız terminal penceresinin önceki bölümünde yer alan yönetici kullanıcı kimlik bilgilerini kullanarak MongoDB kümesine bağlanın
percona-client.mongosh $CONN_STRÖrnek çıkış:
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/ ...komutunu kullanarak kümenizdeki veritabanlarını listeleyin
show dbs.show dbsÖrnek çıkış:
rs0 [direct: mongos] admin> show dbs admin 960.00 KiB config 3.45 MiB rs0 [direct: mongos] admin>
MongoDB yedeklemesi oluşturma
Aşağıdaki yöntemlerden birini kullanarak verilerinizi Azure'a yedekleyebilirsiniz:
- El ile: Verilerinizi istediğiniz zaman el ile yedekleyin.
- Zamanlandı: CRD YAML'de yedeklemeleri ve bunların zamanlamalarını yapılandırın. Percona İşleci, yedeklemeleri belirtilen zamanlamaya göre otomatik olarak yapar.
Percona İşleci aşağıdaki yedekleme türlerinden birini gerçekleştirebilir:
- Mantıksal yedekleme: Veritabanı verileri için MongoDB için Percona Sunucusu'nu sorgulayın ve ardından alınan verileri uzak yedekleme depolama alanına yazın.
-
Fiziksel yedekleme: MongoDB
dbPathiçin Percona Sunucusu veri dizininden uzak yedekleme depolama alanına fiziksel dosyaları kopyalayın.
Mantıksal yedeklemeler daha az depolama alanı kullanır ancak fiziksel yedeklemelerden daha yavaştır.
Percona kullanarak Azure Blob Depolama'da yedeklemeleri depolamak için bir giz oluşturmanız gerekir. Bu adımı önceki bir komutta tamamladınız. Ayrıntılı yönergeler için Azure Blob Depolama hakkında Percona belgelerindeki adımları izleyin.
Zamanlanmış yedeklemeleri yapılandırma
Aşağıdaki yönergeleri kullanarak yedekleme zamanlamasını mongodb-cr.yaml içindeki CRD'nin yedekleme bölümünde tanımlayabilirsiniz:
-
backup.enabledanahtarınıtrueolarak ayarlayın. - Alt bölümün
backup.storagesen az bir yapılandırılmış depolama kaynağı içerdiğinden emin olun. - Alt bölümün
backup.tasksyedekleme zamanlamasını etkinleştirdiğinden emin olun.
Daha fazla bilgi için bkz. Zamanlanmış yedeklemeler yapma.
El ile yedekleme gerçekleştirme
Aşağıdaki yönergeleri kullanarak mongodb-cr.yaml içindeki CRD'nin yedekleme bölümünde el ile ve isteğe bağlı yedekleme yapabilirsiniz:
-
backup.enabledanahtarınıtrueolarak ayarlayın. - Alt bölümün
backup.storagesen az bir yapılandırılmış depolama kaynağı içerdiğinden emin olun.
Daha fazla bilgi için bkz. İsteğe bağlı yedeklemeler yapma.
MongoDB yedeğini dağıtma
Komutunu kullanarak MongoDB yedeklemenizi dağıtın
kubectl apply.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 EOFÖrnek çıkış:
perconaservermongodbbackup.psmdb.percona.com/az-backup1 createdAşağıdaki betiği kullanarak MongoDB yedekleme dağıtım işlemini tamamlayın:
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; doneÖrnek çıkış:
waiting for the backup to be readyİşlem tamamlandığında yedekleme,
Readydurumunu döndürmelidir. komutunu kullanarak yedekleme dağıtımınınkubectl getbaşarılı olduğunu doğrulayın.kubectl get psmdb-backup -n ${AKS_MONGODB_NAMESPACE}Örnek çıkış:
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 3h3mYedeklemeyle ilgili herhangi bir sorun yaşıyorsanız,
backup-agentkomutunu kullanarak uygun podunkubectl logskapsayıcısından günlükleri görüntüleyebilirsiniz.kubectl logs pod/${AKS_MONGODB_CLUSTER_NAME}-rs0-0 -c backup-agent -n ${AKS_MONGODB_NAMESPACE}