Azure Kubernetes Service'te (AKS) PostgreSQL veritabanı dağıtımlarını doğrulama ve test edin

Bu makalede, AKS'de dağıtılan bir PostgreSQL veritabanında çeşitli test ve doğrulama adımları gerçekleştirebilirsiniz. Buna dağıtımı doğrulama, veritabanına bağlanma ve yük devretme senaryolarını test etme dahildir.

Önemli

Aks belgeleri ve örnekleri boyunca açık kaynak yazılımdan bahsedilmektedir. Dağıttığınız yazılımlar AKS hizmet düzeyi sözleşmelerinin, sınırlı garantinin ve Azure desteği dışında tutulur. AKS ile birlikte açık kaynak teknolojisini kullanırken, bir plan geliştirmek için ilgili toplulukların ve proje bakımcılarının sağlanan destek seçeneklerine başvurun.

Microsoft, AKS'de dağıttığımız açık kaynak paketleri oluşturma sorumluluğunu üstlenir. Bu sorumluluk derleme, tarama, imzalama, doğrulama ve hataları düzeltme işleminin tam sahipliğini ve konteyner imajlarındaki ikili dosyalar üzerindeki denetimi içerir. Daha fazla bilgi için AKS için güvenlik açığı yönetimi ve AKS destek kapsamı sayfalarına bakın.

Dağıtılan PostgreSQL kümesini inceleme

komutunu kullanarak kubectl get AKS düğümü ayrıntılarını alarak PostgreSQL'in birden çok kullanılabilirlik alanına yayıldığını doğrulayın.

kubectl get nodes \
    --context $AKS_PRIMARY_CLUSTER_NAME \
    --namespace $PG_NAMESPACE \
    --output json | jq '.items[] | {node: .metadata.name, zone: .metadata.labels."failure-domain.beta.kubernetes.io/zone"}'

Çıkışınız, her düğüm için gösterilen kullanılabilirlik alanıyla aşağıdaki örnek çıkışa benzemelidir:

{
    "node": "aks-postgres-15810965-vmss000000",
    "zone": "westus3-1"
}
{
    "node": "aks-postgres-15810965-vmss000001",
    "zone": "westus3-2"
}
{
    "node": "aks-postgres-15810965-vmss000002",
    "zone": "westus3-3"
}
{
    "node": "aks-systempool-26112968-vmss000000",
    "zone": "westus3-1"
}
{
    "node": "aks-systempool-26112968-vmss000001",
    "zone": "westus3-2"
}

PostgreSQL'e bağlanma ve örnek veri kümesi oluşturma

Bu bölümde bir tablo oluşturacak ve daha önce dağıttığınız CNPG Kümesi CRD'sinde oluşturulan uygulama veritabanına bazı veriler ekleyebilirsiniz. PostgreSQL kümesinin yedekleme ve geri yükleme işlemlerini doğrulamak için bu verileri kullanırsınız.

  • Aşağıdaki komutları kullanarak bir tablo oluşturun ve uygulama veritabanına veri ekleyin:

    kubectl cnpg psql $PG_PRIMARY_CLUSTER_NAME --namespace $PG_NAMESPACE
    
    -- Create a small dataset
    CREATE TABLE datasample (id INTEGER, name VARCHAR(255));
    INSERT INTO datasample (id, name) VALUES (1, 'John');
    INSERT INTO datasample (id, name) VALUES (2, 'Jane');
    INSERT INTO datasample (id, name) VALUES (3, 'Alice');
    SELECT COUNT(*) FROM datasample;
    

    bitirdiğinizde psql'den çıkmak için yazın \q .

    Çıkışınız aşağıdaki örnek çıkışa benzemelidir:

    CREATE TABLE
    INSERT 0 1
    INSERT 0 1
    INSERT 0 1
    count
    -------
        3
    (1 row)
    

PostgreSQL salt okunabilir replikalara bağlanma

  • PostgreSQL salt okunur çoğaltmalarına bağlanın ve aşağıdaki komutları kullanarak örnek veri kümesini doğrulayın:

    kubectl cnpg psql --replica $PG_PRIMARY_CLUSTER_NAME --namespace $PG_NAMESPACE
    
    SELECT pg_is_in_recovery();
    

    Örnek çıkış

    pg_is_in_recovery
    -------------------
    t
    (1 row)
    
    SELECT COUNT(*) FROM datasample;
    

    Örnek çıkış

    count
    -------
      3
    (1 row)
    

Barman kullanarak isteğe bağlı ve zamanlanmış PostgreSQL yedeklemeleri ayarlama

Uyarı

CloudNativePG'nin gelecek 1.29 sürümünde yerel Barman Cloud desteğini Barman Cloud eklentisinin lehine kullanımdan kaldırması beklenir. Bu kılavuzdaki adımlar bugün çalışmaya devam eder, ancak kararlı hale getirildikten sonra eklentiye geçmeyi planlayın.

  1. ** PostgreSQL kümesinin CNPG Kümesi CRD'sinde belirtilen Azure depolama hesabına erişebildiğini ve Working WAL archiving'nin OK olarak raporlandığını aşağıdaki komutu kullanarak doğrulayın.

    kubectl cnpg status $PG_PRIMARY_CLUSTER_NAME 1 \
        --context $AKS_PRIMARY_CLUSTER_NAME \
        --namespace $PG_NAMESPACE
    

    Örnek çıkış

    Continuous Backup status
    First Point of Recoverability:  Not Available
    Working WAL archiving:          OK
    WALs waiting to be archived:    0
    Last Archived WAL:              00000001000000000000000A   @   2024-07-09T17:18:13.982859Z
    Last Failed WAL:                -
    
  2. YAML dosyasını ve kubectl apply komutunu kullanarak AKS iş yükü kimlik tümleştirmesini kullanan Azure Depolama'ya isteğe bağlı bir yedekleme dağıtımı yapın.

    export BACKUP_ONDEMAND_NAME="on-demand-backup-1"
    
    cat <<EOF | kubectl apply --context $AKS_PRIMARY_CLUSTER_NAME --namespace $PG_NAMESPACE -v 9 -f -
    apiVersion: postgresql.cnpg.io/v1
    kind: Backup
    metadata:
      name: $BACKUP_ONDEMAND_NAME
    spec:
      method: barmanObjectStore
      cluster:
        name: $PG_PRIMARY_CLUSTER_NAME
    EOF
    
  3. komutunu kullanarak kubectl describe isteğe bağlı yedeklemenin durumunu doğrulayın.

    kubectl describe backup $BACKUP_ONDEMAND_NAME \
        --context $AKS_PRIMARY_CLUSTER_NAME \
        --namespace $PG_NAMESPACE
    

    Örnek çıkış

    Type    Reason     Age   From                   Message
     ----    ------     ----  ----                   -------
    Normal  Starting   6s    cloudnative-pg-backup  Starting backup for cluster pg-primary-cnpg-r8c7unrw
    Normal  Starting   5s    instance-manager       Backup started
    Normal  Completed  1s    instance-manager       Backup completed
    
  4. Aşağıdaki komutu kullanarak kümenin ilk kurtarılabilirlik noktasına sahip olduğunu doğrulayın:

    kubectl cnpg status $PG_PRIMARY_CLUSTER_NAME 1 \
        --context $AKS_PRIMARY_CLUSTER_NAME \
        --namespace $PG_NAMESPACE
    

    Örnek çıkış

    Continuous Backup status
    First Point of Recoverability:  2024-06-05T13:47:18Z
    Working WAL archiving:          OK
    
  5. komutuyla YAML dosyasını kullanarak kubectl apply bir programlanmış yedeklemeyi yapılandırın.

    export BACKUP_SCHEDULED_NAME="scheduled-backup-1"
    
    cat <<EOF | kubectl apply --context $AKS_PRIMARY_CLUSTER_NAME --namespace $PG_NAMESPACE -v 9 -f -
    apiVersion: postgresql.cnpg.io/v1
    kind: ScheduledBackup
    metadata:
      name: $BACKUP_SCHEDULED_NAME
    spec:
      # Backup once per hour
      schedule: "0 15 * ? * *"
      backupOwnerReference: self
      cluster:
        name: $PG_PRIMARY_CLUSTER_NAME
    EOF
    
  6. komutunu kullanarak kubectl describe zamanlanmış yedeklemenin durumunu doğrulayın.

    kubectl describe scheduledbackup $BACKUP_SCHEDULED_NAME \
        --context $AKS_PRIMARY_CLUSTER_NAME \
        --namespace $PG_NAMESPACE
    
  7. komutunu kullanarak az storage blob list birincil küme için Azure blob depolamada depolanan yedekleme dosyalarını görüntüleyin.

    az storage blob list \
        --account-name $PG_PRIMARY_STORAGE_ACCOUNT_NAME \
        --container-name backups \
        --query "[*].name" \
        --only-show-errors
    

    Çıktınız aşağıdaki örnek çıkışa benzemelidir ve yedeklemenin başarılı olduğunu doğrular:

    [
      "pg-primary-cnpg-r8c7unrw/base/20240605T134715/backup.info",
      "pg-primary-cnpg-r8c7unrw/base/20240605T134715/data.tar",
      "pg-primary-cnpg-r8c7unrw/wals/0000000100000000/000000010000000000000001",
      "pg-primary-cnpg-r8c7unrw/wals/0000000100000000/000000010000000000000002",
      "pg-primary-cnpg-r8c7unrw/wals/0000000100000000/000000010000000000000003",
      "pg-primary-cnpg-r8c7unrw/wals/0000000100000000/000000010000000000000003.00000028.backup",
      "pg-primary-cnpg-r8c7unrw/wals/0000000100000000/000000010000000000000004",
      "pg-primary-cnpg-r8c7unrw/wals/0000000100000000/000000010000000000000005",
      "pg-primary-cnpg-r8c7unrw/wals/0000000100000000/000000010000000000000005.00000028.backup",
      "pg-primary-cnpg-r8c7unrw/wals/0000000100000000/000000010000000000000006",
      "pg-primary-cnpg-r8c7unrw/wals/0000000100000000/000000010000000000000007",
      "pg-primary-cnpg-r8c7unrw/wals/0000000100000000/000000010000000000000008",
      "pg-primary-cnpg-r8c7unrw/wals/0000000100000000/000000010000000000000009"
    ]
    

İsteğe bağlı yedeklemeyi yeni bir PostgreSQL kümesine geri yükleme

Bu bölümde, daha önce CNPG işlecini kullanarak oluşturduğunuz isteğe bağlı yedeklemeyi bootstrap Kümesi CRD'sini kullanarak yeni bir örneğe geri yüklersiniz. Basitlik için tek bir örnek kümesi kullanılır. AKS iş yükü kimliğinin (CNPG aracılığıyla inheritFromAzureAD aracılığıyla) yedekleme dosyalarına eriştiği ve kurtarma kümesi adının kurtarma kümesine özgü yeni bir Kubernetes hizmet hesabı oluşturmak için kullanıldığını unutmayın.

Ayrıca yeni kurtarma kümesi hizmet hesabını blob depolamadaki yedekleme dosyalarına "Depolama Blob Verileri Katkıda Bulunanı" erişimi olan mevcut UAMI ile eşlemek için ikinci bir federasyon kimlik bilgisi oluşturursunuz.

  1. az identity federated-credential create komutunu kullanarak ikinci bir federasyon kimlik belgesi oluşturun.

    export PG_PRIMARY_CLUSTER_NAME_RECOVERED="$PG_PRIMARY_CLUSTER_NAME-recovered-db"
    
    az identity federated-credential create \
        --name $PG_PRIMARY_CLUSTER_NAME_RECOVERED \
        --identity-name $AKS_UAMI_CLUSTER_IDENTITY_NAME \
        --resource-group $RESOURCE_GROUP_NAME \
        --issuer "${AKS_PRIMARY_CLUSTER_OIDC_ISSUER}" \
        --subject system:serviceaccount:"${PG_NAMESPACE}":"${PG_PRIMARY_CLUSTER_NAME_RECOVERED}" \
        --audience api://AzureADTokenExchange
    
  2. kubectl apply komutunu kullanarak Küme CRD ile isteğe bağlı yedeklemeyi geri yükleyin.

    cat <<EOF | kubectl apply --context $AKS_PRIMARY_CLUSTER_NAME --namespace $PG_NAMESPACE -v 9 -f -
    apiVersion: postgresql.cnpg.io/v1
    kind: Cluster
    metadata:
      name: $PG_PRIMARY_CLUSTER_NAME_RECOVERED
    spec:
    
      inheritedMetadata:
        annotations:
          service.beta.kubernetes.io/azure-dns-label-name: $AKS_PRIMARY_CLUSTER_PG_DNSPREFIX
        labels:
          azure.workload.identity/use: "true"
    
      instances: 1
    
      affinity:
        nodeSelector:
          workload: postgres
    
      # Point to cluster backup created earlier and stored on Azure Blob Storage
      bootstrap:
        recovery:
          source: clusterBackup
    
      storage:
        size: 2Gi
        pvcTemplate:
          accessModes:
            - ReadWriteOnce
          resources:
            requests:
              storage: 2Gi
          storageClassName: managed-csi-premium
          volumeMode: Filesystem
    
      walStorage:
        size: 2Gi
        pvcTemplate:
          accessModes:
            - ReadWriteOnce
          resources:
            requests:
              storage: 2Gi
          storageClassName: managed-csi-premium
          volumeMode: Filesystem
    
      serviceAccountTemplate:
        metadata:
          annotations:
            azure.workload.identity/client-id: "$AKS_UAMI_WORKLOAD_CLIENTID"
          labels:
            azure.workload.identity/use: "true"
    
      externalClusters:
        - name: clusterBackup
          barmanObjectStore:
            destinationPath: https://${PG_PRIMARY_STORAGE_ACCOUNT_NAME}.blob.core.windows.net/backups
            serverName: $PG_PRIMARY_CLUSTER_NAME
            azureCredentials:
              inheritFromAzureAD: true
            wal:
              maxParallel: 8
    EOF
    
  3. Kurtarılan örneğe bağlanın, ardından aşağıdaki komutu kullanarak tam yedeklemenin alındığı özgün kümede oluşturulan veri kümesinin mevcut olduğunu doğrulayın:

    kubectl cnpg psql $PG_PRIMARY_CLUSTER_NAME_RECOVERED --namespace $PG_NAMESPACE
    
    SELECT COUNT(*) FROM datasample;
    

    Örnek çıkış

     count
    -------
         3
    (1 row)
    
    Type \q to exit psql
    
  4. Aşağıdaki komutu kullanarak kurtarılan kümeyi silin:

    kubectl cnpg destroy $PG_PRIMARY_CLUSTER_NAME_RECOVERED 1 \
        --context $AKS_PRIMARY_CLUSTER_NAME \
        --namespace $PG_NAMESPACE
    
  5. komutunu kullanarak az identity federated-credential delete federasyon kimliği kimlik bilgilerini silin.

    az identity federated-credential delete \
        --name $PG_PRIMARY_CLUSTER_NAME_RECOVERED \
        --identity-name $AKS_UAMI_CLUSTER_IDENTITY_NAME \
        --resource-group $RESOURCE_GROUP_NAME \
        --yes
    

Genel yük dengeleyici kullanarak PostgreSQL kümesini kullanıma sunma

Bu bölümde, IP kaynağı kısıtlamaları olan PostgreSQL okuma-yazma ve salt okunur uç noktalarını istemci iş istasyonunuzun genel IP adresine genel olarak göstermek için gerekli altyapıyı yapılandıracaksınız.

Küme IP hizmetinden de aşağıdaki uç noktaları alırsınız:

  • ile *-rw okuma-yazma uç noktası.
  • 0'dan N'ye (çoğaltma sayısına bağlı olarak) *-ro ile biten salt okunur uç noktalar.
  • Bir uç noktası, *-r ile biten bir replikasyon.
  1. komutunu kullanarak kubectl get Küme IP hizmeti ayrıntılarını alın.

    kubectl get services \
        --context $AKS_PRIMARY_CLUSTER_NAME \
        --namespace $PG_NAMESPACE \
        -l cnpg.io/cluster=$PG_PRIMARY_CLUSTER_NAME
    

    Örnek çıkış

    NAME                          TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)    AGE
    pg-primary-cnpg-sryti1qf-r    ClusterIP   10.0.193.27    <none>        5432/TCP   3h57m
    pg-primary-cnpg-sryti1qf-ro   ClusterIP   10.0.237.19    <none>        5432/TCP   3h57m
    pg-primary-cnpg-sryti1qf-rw   ClusterIP   10.0.244.125   <none>        5432/TCP   3h57m
    

    Uyarı

    Üç hizmet vardır: namespace/cluster-name-ro 5433 namespace/cluster-name-rwnumaralı bağlantı noktasına eşlenir ve namespace/cluster-name-r 5433 numaralı bağlantı noktasına eşlenir. PostgreSQL veritabanı kümesinin okuma/yazma düğümüyle aynı bağlantı noktasını kullanmaktan kaçınmak önemlidir. Uygulamaların PostgreSQL veritabanı kümesinin salt okunur çoğaltmasına erişmesini istiyorsanız, bunları 5433 numaralı bağlantı noktasına yönlendirin. Son hizmet genellikle veri yedeklemeleri için kullanılır, ancak salt okunur düğüm olarak da işlev görebilir.

  2. komutunu kullanarak kubectl get hizmet ayrıntılarını alın.

    export PG_PRIMARY_CLUSTER_RW_SERVICE=$(kubectl get services \
        --namespace $PG_NAMESPACE \
        --context $AKS_PRIMARY_CLUSTER_NAME \
        -l "cnpg.io/cluster" \
        --output json | jq -r '.items[] | select(.metadata.name | endswith("-rw")) | .metadata.name')
    
    echo $PG_PRIMARY_CLUSTER_RW_SERVICE
    
    export PG_PRIMARY_CLUSTER_RO_SERVICE=$(kubectl get services \
        --namespace $PG_NAMESPACE \
        --context $AKS_PRIMARY_CLUSTER_NAME \
        -l "cnpg.io/cluster" \
        --output json | jq -r '.items[] | select(.metadata.name | endswith("-ro")) | .metadata.name')
    
    echo $PG_PRIMARY_CLUSTER_RO_SERVICE
    
  3. komutunu kullanarak yük dengeleyici hizmetini aşağıdaki YAML dosyalarıyla kubectl apply yapılandırın.

    cat <<EOF | kubectl apply --context $AKS_PRIMARY_CLUSTER_NAME -f -
    apiVersion: v1
    kind: Service
    metadata:
      annotations:
        service.beta.kubernetes.io/azure-load-balancer-resource-group: $AKS_PRIMARY_CLUSTER_NODERG_NAME
        service.beta.kubernetes.io/azure-pip-name: $AKS_PRIMARY_CLUSTER_PUBLICIP_NAME
        service.beta.kubernetes.io/azure-dns-label-name: $AKS_PRIMARY_CLUSTER_PG_DNSPREFIX
      name: cnpg-cluster-load-balancer-rw
      namespace: "${PG_NAMESPACE}"
    spec:
      type: LoadBalancer
      ports:
      - protocol: TCP
        port: 5432
        targetPort: 5432
      selector:
        cnpg.io/instanceRole: primary
        cnpg.io/podRole: instance
      loadBalancerSourceRanges:
      - "$MY_PUBLIC_CLIENT_IP/32"
    EOF
    
    cat <<EOF | kubectl apply --context $AKS_PRIMARY_CLUSTER_NAME -f -
    apiVersion: v1
    kind: Service
    metadata:
      annotations:
        service.beta.kubernetes.io/azure-load-balancer-resource-group: $AKS_PRIMARY_CLUSTER_NODERG_NAME
        service.beta.kubernetes.io/azure-pip-name: $AKS_PRIMARY_CLUSTER_PUBLICIP_NAME
        service.beta.kubernetes.io/azure-dns-label-name: $AKS_PRIMARY_CLUSTER_PG_DNSPREFIX
      name: cnpg-cluster-load-balancer-ro
      namespace: "${PG_NAMESPACE}"
    spec:
      type: LoadBalancer
      ports:
      - protocol: TCP
        port: 5433
        targetPort: 5432
      selector:
        cnpg.io/instanceRole: replica
        cnpg.io/podRole: instance
      loadBalancerSourceRanges:
      - "$MY_PUBLIC_CLIENT_IP/32"
    EOF
    
  4. komutunu kullanarak kubectl describe hizmet ayrıntılarını alın.

    kubectl describe service cnpg-cluster-load-balancer-rw \
        --context $AKS_PRIMARY_CLUSTER_NAME \
        --namespace $PG_NAMESPACE
    
    kubectl describe service cnpg-cluster-load-balancer-ro \
        --context $AKS_PRIMARY_CLUSTER_NAME \
        --namespace $PG_NAMESPACE
    
    export AKS_PRIMARY_CLUSTER_ALB_DNSNAME="$(az network public-ip show \
        --resource-group $AKS_PRIMARY_CLUSTER_NODERG_NAME \
        --name $AKS_PRIMARY_CLUSTER_PUBLICIP_NAME \
        --query "dnsSettings.fqdn" --output tsv)"
    
    echo $AKS_PRIMARY_CLUSTER_ALB_DNSNAME
    

Genel PostgreSQL uç noktalarını doğrulama

Bu bölümde, Azure Load Balancer'ın daha önce oluşturduğunuz statik IP'yi kullanarak ve bağlantıları birincil okuma-yazma ve salt okunur çoğaltmalara yönlendirerek düzgün şekilde ayarlandığını doğrular ve psql CLI'yi kullanarak her ikisine de bağlanırsınız.

Birincil okuma-yazma uç noktasının TCP bağlantı noktası 5432 ile eşlendiğini ve salt okunur çoğaltma uç noktalarının aynı PostgreSQL DNS adının okuyucular ve yazarlar için kullanılmasına izin vermek için 5433 numaralı bağlantı noktasına eşlendiğini unutmayın.

Uyarı

Daha önce oluşturulan ve ortam değişkeninde depolanan PostgreSQL temel kimlik doğrulaması için uygulama kullanıcı parolasının $PG_DATABASE_APPUSER_SECRET değerine ihtiyacınız vardır.

  • Aşağıdaki psql komutları kullanarak genel PostgreSQL uç noktalarını doğrulayın:

    echo "Public endpoint for PostgreSQL cluster: $AKS_PRIMARY_CLUSTER_ALB_DNSNAME"
    
    # Query the primary, pg_is_in_recovery = false
    
    psql -h $AKS_PRIMARY_CLUSTER_ALB_DNSNAME \
        -p 5432 -U app -d appdb -W -c "SELECT pg_is_in_recovery();"
    

    Örnek çıkış

    pg_is_in_recovery
    -------------------
     f
    (1 row)
    
    echo "Query a replica, pg_is_in_recovery = true"
    
    psql -h $AKS_PRIMARY_CLUSTER_ALB_DNSNAME \
        -p 5433 -U app -d appdb -W -c "SELECT pg_is_in_recovery();"
    

    Örnek çıkış

    # Example output
    
    pg_is_in_recovery
    -------------------
    t
    (1 row)
    

    Birincil okuma-yazma uç noktasına başarıyla bağlandığında PostgreSQL işlevi f değerini döndürür ve geçerli bağlantının yazılabilir olduğunu gösterir.

    Bir çoğaltmaya bağlanıldığında işlev t değerini döndürür ve veritabanının kurtarma ve salt okunur durumda olduğunu gösterir.

Planlanmamış bir yük devretmeyi simüle et

Bu kısımda, PostgreSQL birincil düğümünün çalıştığı podu silerek, ani bir kilitlenme veya ağ bağlantısı kaybını simüle eden ani bir hata tetiklersiniz.

  1. Aşağıdaki komutu kullanarak çalışan pod örneklerinin durumunu denetleyin:

    kubectl cnpg status $PG_PRIMARY_CLUSTER_NAME --namespace $PG_NAMESPACE
    

    Örnek çıkış

    Name                        Current LSN Rep role        Status  Node
    --------------------------- ----------- --------        ------- -----------
    pg-primary-cnpg-sryti1qf-1  0/9000060   Primary         OK      aks-postgres-32388626-vmss000000
    pg-primary-cnpg-sryti1qf-2  0/9000060   Standby (sync)  OK      aks-postgres-32388626-vmss000001
    pg-primary-cnpg-sryti1qf-3  0/9000060   Standby (sync)  OK      aks-postgres-32388626-vmss000002
    
  2. Silme komutunu kubectl delete kullanarak birincil podu silin.

    PRIMARY_POD=$(kubectl get pod \
        --namespace $PG_NAMESPACE \
        --no-headers \
        -o custom-columns=":metadata.name" \
        -l role=primary)
    
    kubectl delete pod $PRIMARY_POD --grace-period=1 --namespace $PG_NAMESPACE
    
  3. pg-primary-cnpg-sryti1qf-2 Aşağıdaki komutu kullanarak pod örneğinin artık birincil olduğunu doğrulayın:

    kubectl cnpg status $PG_PRIMARY_CLUSTER_NAME --namespace $PG_NAMESPACE
    

    Örnek çıkış

    pg-primary-cnpg-sryti1qf-2  0/9000060   Primary         OK      aks-postgres-32388626-vmss000001
    pg-primary-cnpg-sryti1qf-1  0/9000060   Standby (sync)  OK      aks-postgres-32388626-vmss000000
    pg-primary-cnpg-sryti1qf-3  0/9000060   Standby (sync)  OK      aks-postgres-32388626-vmss000002
    
  4. pg-primary-cnpg-sryti1qf-1 Aşağıdaki komutu kullanarak pod örneğini birincil olarak sıfırlayın:

    kubectl cnpg promote $PG_PRIMARY_CLUSTER_NAME 1 --namespace $PG_NAMESPACE
    
  5. Aşağıdaki komutu kullanarak pod örneklerinin planlanmamış yük devretme testi öncesinde özgün durumlarına geri döndüğünü doğrulayın:

    kubectl cnpg status $PG_PRIMARY_CLUSTER_NAME --namespace $PG_NAMESPACE
    

    Örnek çıkış

    Name                        Current LSN Rep role        Status  Node
    --------------------------- ----------- --------        ------- -----------
    pg-primary-cnpg-sryti1qf-1  0/9000060   Primary         OK      aks-postgres-32388626-vmss000000
    pg-primary-cnpg-sryti1qf-2  0/9000060   Standby (sync)  OK      aks-postgres-32388626-vmss000001
    pg-primary-cnpg-sryti1qf-3  0/9000060   Standby (sync)  OK      aks-postgres-32388626-vmss000002
    

Kaynakları temizleme

  • Dağıtımınızı gözden geçirmeyi bitirdikten sonra komutunu kullanarak az group delete bu kılavuzda oluşturduğunuz tüm kaynakları silin.

    az group delete --resource-group $RESOURCE_GROUP_NAME --no-wait --yes
    

Sonraki adımlar

Bu nasıl yapılır kılavuzunda şunların nasıl yapılacağını öğrendiniz:

  • Çok bölgeli aks kümesi oluşturmak için Azure CLI'yi kullanın.
  • CNPG işlecini kullanarak yüksek oranda kullanılabilir bir PostgreSQL kümesi ve veritabanı dağıtın.
  • Prometheus ve Grafana kullanarak PostgreSQL için izlemeyi ayarlayın.
  • PostgreSQL veritabanına örnek bir veri kümesi dağıtın.
  • Küme kesintisini simüle edin ve PostgreSQL yedek sunucuya geçiş yapın.
  • PostgreSQL veritabanının yedeğini ve geri yüklemesini gerçekleştirin.

AKS'yi iş yükleriniz için nasıl kullanabileceğiniz hakkında daha fazla bilgi edinmek için bkz. Azure Kubernetes Service (AKS) nedir? PostgreSQL için Azure Veritabanı hakkında daha fazla bilgi edinmek için bkz. PostgreSQL için Azure Veritabanı nedir?

Katkıda Bulunanlar

Microsoft bu makaleyi korur. Başlangıçta aşağıdaki katkıda bulunanlar yazdı:

  • Ken Kilty | Başkan TPM
  • Russell de Pina | Baş Sorumlu TPM
  • Adrian Joian | Kıdemli Müşteri Mühendisi
  • Jenny Hayes | Kıdemli İçerik Geliştirici
  • Carol Smith | Kıdemli İçerik Geliştirici
  • Erin Schaffer | İçerik Geliştirici 2
  • Adem Şerif | Müşteri Mühendisi 2

Bildirim

Bu belgeler, CloudNativePG operatörünün bakımcıları enterpriseDB ile birlikte geliştirilmiştir. Gabriele Bartolini'ye bu belgenin önceki taslaklarını gözden geçirip teknik iyileştirmeler sunduğu için teşekkür ederiz.