Magas rendelkezésre állású PostgreSQL-adatbázis üzembe helyezése az Azure Kubernetes Service-ben (AKS)

Ebben a cikkben egy magas rendelkezésre állású PostgreSQL-adatbázist helyez üzembe az AKS-en.

Important

A nyílt forráskódú szoftverek az AKS dokumentációjában és mintáiban szerepelnek. Az Ön által üzembe helyezett szoftver nem tartozik az AKS szolgáltatási szintű szerződésekbe, a korlátozott jótállásba és az Azure-támogatásba. Mivel nyílt forráskódú technológiát használ az AKS mellett, tekintse meg a megfelelő közösségek és projektfenntartók által rendelkezésre álló támogatási lehetőségeket a terv kidolgozásához.

A Microsoft felelősséget vállal az AKS-en üzembe helyezhető nyílt forráskódú csomagok elkészítéséért. Ez a felelősség magában foglalja a buildelési, vizsgálati, aláírási, érvényesítési és gyorsjavítási folyamat teljes tulajdonjogát, valamint a tárolólemezképek bináris fájljainak vezérlését. További információért lásd az AKS biztonságirés-kezelését és az AKS támogatási lefedettségét.

Titkos kód létrehozása a bootstrap-alkalmazás felhasználójának

  1. Hozzon létre egy titkos kulcsot a PostgreSQL üzembe helyezésének ellenőrzéséhez interaktív bejelentkezéssel egy bootstrap-alkalmazás felhasználója számára a kubectl create secret parancs használatával.

Important

A Microsoft azt javasolja, hogy a legbiztonságosabb hitelesítési folyamatot használja. Az ebben az eljárásban ismertetett hitelesítési folyamat nagy fokú bizalmat igényel az alkalmazásban, és olyan kockázatokat hordoz, amelyek más folyamatokban nem jelennek meg. Ezt a folyamatot csak akkor érdemes használni, ha más biztonságosabb folyamatok, például a felügyelt identitások nem életképesek.

PG_DATABASE_APPUSER_SECRET=$(echo -n | openssl rand -base64 16)

kubectl create secret generic db-user-pass \
    --from-literal=username=app \
     --from-literal=password="${PG_DATABASE_APPUSER_SECRET}" \
     --namespace $PG_NAMESPACE \
     --context $AKS_PRIMARY_CLUSTER_NAME
  1. Ellenőrizze, hogy a titkos kód sikeresen létrejött-e a kubectl get paranccsal.

    kubectl get secret db-user-pass --namespace $PG_NAMESPACE --context $AKS_PRIMARY_CLUSTER_NAME
    

Környezeti változók beállítása a PostgreSQL-fürthöz

  • Helyezzen üzembe egy konfigurációtérképet a CNPG-operátor konfigurálásához az alábbi kubectl apply paranccsal. Ezek az értékek helyettesítik a korábbi ENABLE_AZURE_PVC_UPDATES kapcsolót, amely már nem szükséges, és segítenek az ütemezett frissítések lebonyolításában, valamint felgyorsítják a replikák újracsatlakozását. Mielőtt üzembe helyeznénk ezt a konfigurációt éles környezetben, ellenőrizze, hogy a meglévő DRAIN_TAINTS beállítások, amelyekre támaszkodik, kompatibilisek maradnak-e az Azure-környezettel.

    cat <<EOF | kubectl apply --context $AKS_PRIMARY_CLUSTER_NAME -n $PG_NAMESPACE -f -
    apiVersion: v1
    kind: ConfigMap
    metadata:
        name: cnpg-controller-manager-config
    data:
        CLUSTERS_ROLLOUT_DELAY: '120'
        STANDBY_TCP_USER_TIMEOUT: '10'
    EOF
    

A Prometheus PodMonitors telepítése

A Prometheus a CNPG-t a CNPG GitHub-minták adattárában tárolt rögzítési szabályokkal kaparja le. Mivel a kezelő által felügyelt PodMonitor megszűnik, hozza létre és kezelje a PodMonitor-erőforrást saját maga, hogy a monitorozási veremhez igazíthassa.

  1. Adja hozzá a Prometheus Community Helm-adattárat a helm repo add paranccsal.

    helm repo add prometheus-community \
        https://prometheus-community.github.io/helm-charts
    
  2. Frissítse a Prometheus Community Helm adattárát, és telepítse az elsődleges csoportra a helm upgrade paranccsal a --install kapcsoló használatával.

    helm upgrade --install \
        --namespace $PG_NAMESPACE \
        -f https://raw.githubusercontent.com/cloudnative-pg/cloudnative-pg/main/docs/src/samples/monitoring/kube-stack-config.yaml \
        prometheus-community \
        prometheus-community/kube-prometheus-stack \
        --kube-context=$AKS_PRIMARY_CLUSTER_NAME
    
  3. Hozzon létre egy PodMonitort a klaszterhez. A CNPG csapata elavultatja az operátor által felügyelt PodMonitort, így most közvetlenül kezelheti:

    cat <<EOF | kubectl apply --context $AKS_PRIMARY_CLUSTER_NAME --namespace $PG_NAMESPACE -f -
    apiVersion: monitoring.coreos.com/v1
    kind: PodMonitor
    metadata:
      name: $PG_PRIMARY_CLUSTER_NAME
      namespace: ${PG_NAMESPACE}
      labels:
        cnpg.io/cluster: ${PG_PRIMARY_CLUSTER_NAME}
    spec:
      selector:
        matchLabels:
          cnpg.io/cluster: ${PG_PRIMARY_CLUSTER_NAME}
      podMetricsEndpoints:
        - port: metrics
    EOF
    

Összevont hitelesítő adatok létrehozása

Ebben a szakaszban létrehoz egy összevont identitás hitelesítő adatot a PostgreSQL biztonsági mentéséhez, amely lehetővé teszi a CNPG számára, hogy az AKS munkaterhelés identitását használja a hitelesítéshez a tárfiók célhelyén történő biztonsági mentésekhez. A CNPG-operátor létrehoz egy Kubernetes-szolgáltatásfiókot ugyanazzal a névvel, mint a CNPG-fürt üzembehelyezési jegyzékében használt fürt.

  1. Kérje le a klaszter OIDC-kiállítójának URL-címét a az aks show paranccsal.

    export AKS_PRIMARY_CLUSTER_OIDC_ISSUER="$(az aks show \
        --name $AKS_PRIMARY_CLUSTER_NAME \
        --resource-group $RESOURCE_GROUP_NAME \
        --query "oidcIssuerProfile.issuerUrl" \
        --output tsv)"
    
  2. Hozzon létre egy összevont identitáshitelesítő adatot a az identity federated-credential create paranccsal.

    az identity federated-credential create \
        --name $AKS_PRIMARY_CLUSTER_FED_CREDENTIAL_NAME \
        --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}" \
        --audience api://AzureADTokenExchange
    

Magas rendelkezésre állású PostgreSQL-fürt üzembe helyezése

Ebben a szakaszban egy magas rendelkezésre állású PostgreSQL-fürtöt helyez üzembe a CNPG-fürt egyéni erőforrásdefiníciója (CRD) használatával.

Fürt CRD-paraméterei

Az alábbi táblázat a YAML telepítési jegyzékben beállított főbb tulajdonságokat ismerteti a Cluster CRD-hez:

Property Definition
imageName A CloudNativePG operandus konténerképére mutat. Használja a ghcr.io/cloudnative-pg/postgresql:18-system-trixie a jelen útmutatóban bemutatott beépített biztonsági mentési integrációval, vagy váltson 18-standard-trixie-ra, amikor a Barman Cloud beépülő modult bevezeti.
inheritedMetadata A CNPG-operátorra jellemző. A CNPG-operátor a klaszterhez kapcsolódó összes objektumra alkalmazza a metaadatokat.
annotations Tartalmazza a fürtvégpontok felfedésekor szükséges DNS-címkét, és lehetővé teszi alpha.cnpg.io/failoverQuorum a kvórumalapú feladatátvételt.
labels: azure.workload.identity/use: "true" Azt jelzi, hogy az AKS-nek be kell fecskendeznie a számítási feladatok identitásfüggőségeit a PostgreSQL-fürtpéldányokat üzemeltető podokba.
topologySpreadConstraints Különböző zónák és különböző, címkével "workload=postgres"ellátott csomópontok megkövetelése.
resources Konfigurálja a Garantált szolgáltatásminőség (QoS) osztályt. Éles környezetben ezek az értékek kulcsfontosságúak a mögöttes csomópont virtuális gép használatának maximalizálásához, és a használt Azure-beli virtuálisgép-termékváltozattól függően változnak.
probes Lecseréli az örökölt konfigurációt startDelay . A streamelési indítási és készültségi mintavételek segítenek meggyőződni arról, hogy a replikák kifogástalan állapotban vannak a forgalom kiszolgálása előtt.
smartShutdownTimeout Lehetővé teszi, hogy a hosszan futó tranzakciók zökkenőmentesen befejeződjenek a frissítések során, ahelyett, hogy agresszív leállítási késleltetéseket használnának.
bootstrap A CNPG-operátorra jellemző. Inicializálás üres alkalmazásadatbázissal.
storage Meghatározza az adatbázis PersistentVolume-beállításait. Az Azure-beli felügyelt lemezek esetében az egyszerűsített szintaxis ugyanazon a 64 GiB-köteten tárolja az adatokat és a WAL-t, amely jobb átviteli sebességet biztosít a felügyelt lemezeken. Módosítsa, ha külön WAL-kötetre van szüksége.
postgresql.synchronous Lecseréli minSyncReplicas/maxSyncReplicas és lehetővé teszi a szinkron replikáció viselkedésének megadását az újabb sémával.
postgresql.parameters A CNPG-operátorra jellemző. A postgresql.conf, pg_hba.conf és pg_ident.conf beállításai. A minta hangsúlyozza a megfigyelhetőséget és a WAL-adatmegőrzés alapértelmezett értékét, amelyek megfelelnek az AKS számítási feladat identitási forgatókönyvének, de számítási feladatonként kell hangolni.
serviceAccountTemplate Tartalmazza a szolgáltatásfiókok létrehozásához szükséges sablont, és leképezi az AKS összevont identitás hitelesítő adatait a UAMI-ra, hogy engedélyezze az AKS számítási feladat identitásának hitelesítését a PostgreSQL-példányokat futtató podokról külső Azure-erőforrásokra.
barmanObjectStore A CNPG-operátorra jellemző. Konfigurálja a barman-cloud eszközcsomagot az AKS számítási feladat identitásával az Azure Blob Storage objektumtárolóba való hitelesítéshez.

A PostgreSQL-számítási feladatok további elkülönítéséhez hozzáadhat egy foltot (például node-role.kubernetes.io/postgres=:NoSchedule) az adatsík csomópontjaihoz, és lecserélheti a mintát nodeSelector/tolerations a CloudNativePG által ajánlott értékekre. Ha ezt a megközelítést alkalmazza, címkézze fel a csomópontokat ennek megfelelően, és győződjön meg arról, hogy az AKS automatikus skálázási szabályzatai összhangban vannak a topológiával.

PostgreSQL-teljesítményparaméterek

A PostgreSQL teljesítménye nagymértékben függ a klaszter mögöttes erőforrásaitól és a munka terhelésétől. Az alábbi táblázat alapszintű útmutatást nyújt egy standard D4s v3-csomópontokon (16 GiB-memória) futó háromcsomópontos fürthöz. Kezelje ezeket az értékeket kiindulási pontként, és módosítsa őket a számítási feladatprofil megismerése után:

Property Javasolt érték Definition
wal_compression lz4 Wal-fájlban írt teljes oldalas írások tömörítése megadott módszerrel
max_wal_size 6 GB Az ellenőrzőpontot aktiváló WAL-méret beállítása
checkpoint_timeout 15 perc Az automatikus WAL-ellenőrzőpontok közötti maximális idő beállítása
checkpoint_completion_target 0,9 Az ellenőrzőpont feladatainak elosztása az ellenőrzőpont időszaka alatt
checkpoint_flush_after 2 MB Azoknak a lapoknak a száma, amelyek után a korábban végrehajtott írások ki vannak ürítve a lemezre
wal_writer_flush_after 2 MB A WAL-író által kiírt WAL mennyiség, amely ürítést vált ki
min_wal_size 2 GB Beállítja a minimális méretet a WAL zsugorításához
max_slot_wal_keep_size 10 GB A WAL replikációs foglalatokra vonatkozó felső határa
shared_buffers 4 GB Beállítja a kiszolgáló által használt megosztott memóriapufferek számát (ebben a példában 25% csomópontmemória)
effective_cache_size 12 GB A tervező feltételezésének beállítása az adatgyorsítótárak teljes méretéről
work_mem A csomópont memóriájának 1/256-a A lekérdezési munkaterületekhez használandó maximális memória beállítása
maintenance_work_mem 6.25% a csomópont memóriájának Beállítja a karbantartási műveletekhez használandó memória maximális méretét
autovacuum_vacuum_cost_limit 2400 A szumázás előtt rendelkezésre álló vákuumköltség összege az autovacuumhoz
random_page_cost 1.1 Beállítja a planner becslését a nem ismétlődően lekért lemezoldal költségeire vonatkozóan
effective_io_concurrency 64 Beállítja, hogy a lemezalrendszer hány egyidejű kérést képes hatékonyan kezelni
maintenance_io_concurrency 64 A karbantartási munkákhoz használt "effective_io_concurrency" változata

A PostgreSQL üzembe helyezése

  1. Helyezze üzembe a PostgreSQL-fürtöt a Cluster CRD-vel a kubectl apply paranccsal.

    cat <<EOF | kubectl apply --context $AKS_PRIMARY_CLUSTER_NAME -n $PG_NAMESPACE -v 9 -f -
    apiVersion: postgresql.cnpg.io/v1
    kind: Cluster
    metadata:
      name: $PG_PRIMARY_CLUSTER_NAME
      annotations:
        alpha.cnpg.io/failoverQuorum: "true"
    spec:
      imageName: ghcr.io/cloudnative-pg/postgresql:18-system-trixie
      inheritedMetadata:
        annotations:
          service.beta.kubernetes.io/azure-dns-label-name: $AKS_PRIMARY_CLUSTER_PG_DNSPREFIX
        labels:
          azure.workload.identity/use: "true"
    
      instances: 3
      smartShutdownTimeout: 30
    
      probes:
        startup:
          type: streaming
          maximumLag: 32Mi
          periodSeconds: 5
          timeoutSeconds: 3
          failureThreshold: 120
        readiness:
          type: streaming
          maximumLag: 0
          periodSeconds: 10
          failureThreshold: 6
    
      topologySpreadConstraints:
      - maxSkew: 1
        topologyKey: topology.kubernetes.io/zone
        whenUnsatisfiable: DoNotSchedule
        labelSelector:
          matchLabels:
            cnpg.io/cluster: $PG_PRIMARY_CLUSTER_NAME
    
      affinity:
        nodeSelector:
          workload: postgres
    
      resources:
        requests:
          memory: '8Gi'
          cpu: 2
        limits:
          memory: '8Gi'
          cpu: 2
    
      bootstrap:
        initdb:
          database: appdb
          owner: app
          secret:
            name: db-user-pass
          dataChecksums: true
    
      storage:
        storageClass: $POSTGRES_STORAGE_CLASS
        size: 64Gi
    
      postgresql:
        synchronous:
          method: any
          number: 1
        parameters:
          wal_compression: lz4
          max_wal_size: 6GB
          max_slot_wal_keep_size: 10GB
          checkpoint_timeout: 15min
          checkpoint_completion_target: '0.9'
          checkpoint_flush_after: 2MB
          wal_writer_flush_after: 2MB
          min_wal_size: 2GB
          shared_buffers: 4GB
          effective_cache_size: 12GB
          work_mem: 62MB
          maintenance_work_mem: 1GB
          autovacuum_vacuum_cost_limit: "2400"
          random_page_cost: "1.1"
          effective_io_concurrency: "64"
          maintenance_io_concurrency: "64"
          log_checkpoints: 'on'
          log_lock_waits: 'on'
          log_min_duration_statement: '1000'
          log_statement: 'ddl'
          log_temp_files: '1024'
          log_autovacuum_min_duration: '1s'
          pg_stat_statements.max: '10000'
          pg_stat_statements.track: 'all'
          hot_standby_feedback: 'on'
        pg_hba:
          - host all all all scram-sha-256
    
      serviceAccountTemplate:
        metadata:
          annotations:
            azure.workload.identity/client-id: "$AKS_UAMI_WORKLOAD_CLIENTID"
          labels:
            azure.workload.identity/use: "true"
    
      backup:
        barmanObjectStore:
          destinationPath: "https://${PG_PRIMARY_STORAGE_ACCOUNT_NAME}.blob.core.windows.net/backups"
          azureCredentials:
            inheritFromAzureAD: true
        retentionPolicy: '7d'
    EOF
    

Megjegyzés:

A mintajegyzék azért használja a ghcr.io/cloudnative-pg/postgresql:18-system-trixie rendszerképet, mert együttműködik a Barman Cloud belső integrációjával, amelyet később részletezünk. Ha készen áll a Barman Cloud beépülő modulra való váltásra, frissítse spec.imageName a ghcr.io/cloudnative-pg/postgresql:18-standard-trixie fájlt, és kövesse a beépülő modul konfigurációs útmutatóját a fürt ismételt üzembe helyezése előtt.

Important

A példabejegyzés pg_hba nem TLS-hozzáférést tesz lehetővé. Ha megtartja ezt a konfigurációt, dokumentálja a csapat biztonsági következményeit, és lehetőleg a titkosított kapcsolatokat részesíti előnyben.

  1. Ellenőrizze, hogy sikeresen létrejött-e az elsődleges PostgreSQL-fürt a kubectl get paranccsal. A CNPG-fürt CRD-je három példányt adott meg, amelyek ellenőrizhetők a futó podok megtekintésével, miután minden példányt elindítottak és összekapcsoltak a replikációhoz. Legyen türelmes, mert időbe telhet, míg mindhárom példány online állapotba kerül és csatlakozik a fürthöz.

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

    Példa kimenet

    NAME                         READY   STATUS    RESTARTS   AGE
    pg-primary-cnpg-r8c7unrw-1   1/1     Running   0          4m25s
    pg-primary-cnpg-r8c7unrw-2   1/1     Running   0          3m33s
    pg-primary-cnpg-r8c7unrw-3   1/1     Running   0          2m49s
    

Important

Ha helyi NVMe-t használ az Azure Container Storage-ban, és egy pod init állapotban marad több csatolási hibával, a pod továbbra is keresi a kötetet egy elveszett csomóponton. Miután a pod elkezd futni, egy állapotba kerül CrashLoopBackOff , mert a CNPG új replikát hoz létre egy új csomóponton adatok nélkül, és nem találja a pgdata könyvtárat. A probléma megoldásához pusztítsa el az érintett példányt, és hozzon létre egy újat. Futtassa a következő parancsot:

kubectl cnpg destroy [cnpg-cluster-name] [instance-number]  

Ellenőrizze, hogy a Prometheus PodMonitor fut-e

A manuálisan létrehozott PodMonitor a kube-prometheus-stack adatlekérési konfigurációját a korábban üzembe helyezett CNPG podokhoz kapcsolja.

Ellenőrizze, hogy a PodMonitor fut-e a kubectl get paranccsal.

kubectl --namespace $PG_NAMESPACE \
    --context $AKS_PRIMARY_CLUSTER_NAME \
    get podmonitors.monitoring.coreos.com \
    $PG_PRIMARY_CLUSTER_NAME \
    --output yaml

Példa kimenet

kind: PodMonitor
metadata:
  labels:
    cnpg.io/cluster: pg-primary-cnpg-r8c7unrw
  name: pg-primary-cnpg-r8c7unrw
  namespace: cnpg-database
spec:
  podMetricsEndpoints:
  - port: metrics
  selector:
    matchLabels:
      cnpg.io/cluster: pg-primary-cnpg-r8c7unrw

Ha az Azure Monitort használja felügyelt Prometheushoz, hozzá kell adnia egy másik podmonitort az egyéni csoportnév használatával. A felügyelt Prometheus nem veszi fel az egyéni erőforrás-definíciókat (CRD-ket) a Prometheus-közösségből. A csoportnéven kívül a CRD-k megegyeznek. Ez a kialakítás lehetővé teszi, hogy a felügyelt Prometheus podmonitorai a közösségi CRD-t használó podmonitorokkal együtt fussanak. Ha nem felügyelt Prometheust használ, kihagyhatja ezt a szakaszt. Hozzon létre egy új pod-figyelőt:

cat <<EOF | kubectl apply --context $AKS_PRIMARY_CLUSTER_NAME --namespace $PG_NAMESPACE -f -
apiVersion: azmonitoring.coreos.com/v1
kind: PodMonitor
metadata:
  name: cnpg-cluster-metrics-managed-prometheus
  namespace: ${PG_NAMESPACE}
  labels:
    azure.workload.identity/use: "true"
    cnpg.io/cluster: ${PG_PRIMARY_CLUSTER_NAME}
spec:
  selector:
    matchLabels:
      azure.workload.identity/use: "true"
      cnpg.io/cluster: ${PG_PRIMARY_CLUSTER_NAME}
  podMetricsEndpoints:
    - port: metrics
EOF

Ellenőrizze, hogy létrejött-e a pod monitor (figyelje meg a csoportnév különbségét).

kubectl --namespace $PG_NAMESPACE \
    --context $AKS_PRIMARY_CLUSTER_NAME \
    get podmonitors.azmonitoring.coreos.com \
    -l cnpg.io/cluster=$PG_PRIMARY_CLUSTER_NAME \
    -o yaml

A lehetőség – Azure Monitor-munkaterület

A Postgres-fürt és a podmonitor üzembe helyezése után megtekintheti a metrikákat az Azure Portal használatával egy Azure Monitor-munkaterületen.

Képernyőkép a Postgres-fürtmetrikákról egy Azure Monitor-munkaterületen az Azure Portalon.

Lehetőség B – Felügyelt Grafana

Másik lehetőségként a Postgres-fürt és podmonitorok üzembe helyezése után létrehozhat egy metrikák irányítópultot az üzembe helyezési szkript által létrehozott felügyelt Grafana-példányon az Azure Monitor-munkaterületre exportált metrikák megjelenítéséhez. A felügyelt Grafana az Azure Portalon érhető el. Lépjen az üzembe helyezési szkript által létrehozott Felügyelt Grafana-példányra, és válassza ki az itt látható végponthivatkozást:

Képernyőkép a PostgreSQL-fürtmetrikákról egy Azure Managed Grafana-példányban az Azure portálon.

A Végpont hivatkozás kiválasztásával megnyílik egy új böngészőablak, ahol irányítópultokat hozhat létre a Felügyelt Grafana-példányon. Az Azure Monitor-adatforrás konfigurálására vonatkozó utasításokat követve vizualizációkat adhat hozzá a Postgres-fürtből származó metrikák irányítópultjának létrehozásához. Az adatforrás-kapcsolat beállítása után a főmenüben válassza az Adatforrások lehetőséget. Az adatforrás-kapcsolat adatforrás-opcióit kell látnia, ahogy itt látható:

Képernyőkép az Azure Monitor adatforrás-beállításairól az Azure Portalon.

A Felügyelt Prometheus beállításban válassza ki azt a lehetőséget, amelyből irányítópultot hozhat létre az irányítópult-szerkesztő megnyitásához. A szerkesztőablak megnyitása után válassza a Vizualizáció hozzáadása lehetőséget, majd a Kezelt Prometheus lehetőséget a Postgres-fürt metrikáinak tallózásához. Miután kiválasztotta a vizualizálni kívánt metrikát, válassza a Lekérdezések futtatása gombot a vizualizáció adatainak lekéréséhez az itt látható módon:

Képernyőkép egy Felügyelt Prometheus műszerfalról a Postgres klaszter metrikáival.

A Mentés ikonra kattintva hozzáadhatja a panelt az irányítópulthoz. Más panelek hozzáadásához válassza az irányítópult-szerkesztő Hozzáadás gombját, és ismételje meg ezt a folyamatot más metrikák megjelenítéséhez. A metrikák vizualizációit hozzáadva valahogy így kell kinéznie:

Képernyőkép egy mentett Felügyelt Prometheus-irányítópultról az Azure Portalon.

Az irányítópult mentéséhez válassza a Mentés ikont.


Következő lépések

Contributors

A Microsoft fenntartja ezt a cikket. Eredetileg a következő közreműködők írták:

  • Ken Kilty | Vezető TPM
  • Russell de Pina | Vezető TPM
  • Adrian Joian | Vezető ügyfélmérnök
  • Jenny Hayes | Vezető tartalomfejlesztő
  • Carol Smith | Vezető tartalomfejlesztő
  • Erin Schaffer | Tartalomfejlesztő 2
  • Adam Sharif | 2. ügyfélmérnök

Elismerés

Ezt a dokumentációt az EnterpriseDB-vel, a CloudNativePG-operátor fenntartóival közösen fejlesztettük ki. Köszönjük Gabriele Bartolininak , hogy áttekinti a dokumentum korábbi tervezeteit, és technikai fejlesztéseket kínál.