Cette page fournit des exemples de configuration YAML pour déployer et gérer AlloyDB Omni sur Kubernetes.
Configurations de base et de l'OS de DBCluster
Découvrez les configurations de base des clusters et les paramètres personnalisés du système d'exploitation.
DBCluster minimal
Configuration de base pour déployer un DBCluster AlloyDB Omni.
Afficher la configuration YAML du DBCluster minimal
# This is a minimal DBCluster spec. See v1_dbcluster_full.yaml for more configurations. apiVersion: v1 kind: Secret metadata: name: db-pw-dbcluster-sample type: Opaque data: dbcluster-sample: "Q2hhbmdlTWUxMjM=" # Password is ChangeMe123 --- apiVersion: alloydbomni.dbadmin.goog/v1 kind: DBCluster metadata: name: dbcluster-sample spec: databaseVersion: "18.3.0" primarySpec: adminUser: passwordRef: name: db-pw-dbcluster-sample resources: memory: 5Gi cpu: 1 disks: - name: DataDisk size: 10Gi
DBCluster complet
Configuration complète qui affiche les paramètres disponibles.
Afficher la configuration YAML du DBCluster complet
apiVersion: v1 kind: Secret metadata: name: db-pw-dbcluster-sample type: Opaque data: dbcluster-sample: "Q2hhbmdlTWUxMjM=" # Password is ChangeMe123 --- apiVersion: alloydbomni.dbadmin.goog/v1 kind: DBCluster metadata: name: dbcluster-sample spec: allowExternalIncomingTraffic: true availability: healthcheckPeriodSeconds: 30 # default is 30secs, new feature in 1.2.0. minimum value is 1 and the maximum value is 86400 autoFailoverTriggerThreshold: 3 # after which failover is triggered autoHealTriggerThreshold: 3 enableAutoFailover: true enableAutoHeal: true enableStandbyAsReadReplica: true numberOfStandbys: 1 controlPlaneAgentsVersion: 1.6.0 databaseVersion: "18.3.0" databaseImageOSType: UBI9 isDeleted: false mode: "" primarySpec: adminUser: passwordRef: name: db-pw-dbcluster-sample tls: dataPlaneCertIssuer: name: data-plane-issuer kind: ClusterIssuer controlPlaneAgentsCertIssuer: name: control-plane-issuer kind: ClusterIssuer dataPlaneCertRequest: commonName: database.dbcluster-sample.com dnsNames: - database.dbcluster-sample.com - database-alt.dbcluster-sample.com duration: 240h0m0s renewBefore: 120h0m0s privateKey: rotationPolicy: Always algorithm: RSA size: 8192 controlPlaneAgentsCertRequest: duration: 240h0m0s renewBefore: 120h0m0s privateKey: rotationPolicy: Always algorithm: RSA size: 8192 auditLogTarget: {} dbLoadBalancerOptions: annotations: networking.gke.io/load-balancer-type: "internal" lb.company.com/enabled: "true" gcp: {} features: columnarSpillToDisk: cacheSize: 50Gi ultraFastCache: cacheSize: 100Gi # either generic volume or local volume genericVolume: storageClass: "local-storage" # localVolume: # path: "/mnt/disks/raid/0" # nodeAffinity: # required: # nodeSelectorTerms: # - matchExpressions: # - key: "cloud.google.com/gke-local-nvme-ssd" # operator: "In" # values: # - "true" googleMLExtension: config: vertexAIKeyRef: vertex-ai-key-alloydb # secret used to enable AlloyDB Omni to access AlloyDB AI features vertexAIRegion: us-central1 # default resources: cpu: "12" disks: - name: DataDisk size: 1000Gi storageClass: px-ceph - name: LogDisk size: 10Gi storageClass: px-ceph - name: ObsDisk size: 4Gi storageClass: px-ceph - name: BackupDisk size: 10Gi storageClass: px-ceph memory: 100Gi walArchiveSetting: location: wal/log # enable WAL archiving and archive logs to /archive/wal/log sidecarRef: name: cv-sidecar-config # provide a sidecar config that is referenced here parameters: google_columnar_engine.enabled: "on" google_columnar_engine.memory_size_in_mb: "256" google_storage.parallel_log_replay_enabled: 'off' google_pg_auth.enable_auth: 'false' shared_preload_libraries: "pg_cron,pg_bigm3" archive_mode: 'on' archive_timeout: '300' work_mem: '4MB' # operator default values # shared_preload_libraries='g_stats,google_columnar_engine,google_db_advisor,google_job_scheduler,pg_stat_statements,pglogical,pgaudit' log_rotation_age: "2" # rotate every two minutes. Set to "0" to disable age-based rotation. If unset, no age-based rotation log_rotation_size: "400000" # rotate every 400,000kb. set to "0" to disable size-based rotation. If unset, rotate every 200,000kb schedulingconfig: tolerations: - effect: NoSchedule key: alloydb-node-type operator: Exists nodeaffinity: # requiredDuringSchedulingIgnoredDuringExecution: strong condition, not being able to meet this would stop pods being scheduled preferredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: alloydb-node-type operator: In values: - database podAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 1 podAffinityTerm: labelSelector: matchExpressions: - key: app operator: In values: - store topologyKey: "kubernetes.io/hostname" podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 1 podAffinityTerm: labelSelector: matchExpressions: - key: security operator: In values: - S1 topologyKey: "topology.kubernetes.io/zone" services: Logging: true Monitoring: true --- apiVersion: v1 kind: PersistentVolume metadata: name: "example-local-pv" spec: capacity: storage: 375Gi accessModes: - "ReadWriteOnce" persistentVolumeReclaimPolicy: "Retain" storageClassName: "local-storage" local: path: "/mnt/disks/raid/0" nodeAffinity: required: nodeSelectorTerms: - matchExpressions: # following example key applies to an operator that is deployed on # Google Cloud and uses the local ssd option - key: "cloud.google.com/gke-local-nvme-ssd" operator: "In" values: - "true" --- apiVersion: alloydbomni.dbadmin.goog/v1 kind: DBInstance metadata: name: dbcluster-sample-rp-1 spec: instanceType: ReadPool dbcParent: name: dbcluster-sample nodeCount: 2 resources: memory: 6Gi cpu: 2 disks: - name: DataDisk size: 15Gi schedulingconfig: tolerations: - key: "node-role.kubernetes.io/control-plane" operator: "Exists" effect: "NoSchedule" nodeaffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 1 preference: matchExpressions: - key: another-node-label-key operator: In values: - another-node-label-value podAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 1 podAffinityTerm: labelSelector: matchExpressions: - key: app operator: In values: - store topologyKey: "kubernetes.io/hostname" podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 1 podAffinityTerm: labelSelector: matchExpressions: - key: security operator: In values: - S1 topologyKey: "topology.kubernetes.io/zone"
Paramètres personnalisés
Configurer des paramètres PostgreSQL personnalisés.
Afficher la configuration YAML des paramètres personnalisés
apiVersion: v1 kind: Secret metadata: name: db-pw-dbcluster-sample type: Opaque data: dbcluster-sample: "Q2hhbmdlTWUxMjM=" # Password is ChangeMe123 --- apiVersion: alloydbomni.dbadmin.goog/v1 kind: DBCluster metadata: name: dbcluster-sample spec: databaseVersion: "18.3.0" primarySpec: adminUser: passwordRef: name: db-pw-dbcluster-sample resources: memory: 5Gi cpu: 1 disks: - name: DataDisk size: 10Gi parameters: google_columnar_engine.enabled: "on" google_columnar_engine.memory_size_in_mb: "256"
Déploiements basés sur Debian
Spécifier une base d'image de l'OS Debian.
Afficher la configuration YAML des déploiements basés sur Debian
# This is a minimal DBCluster spec. See v1_dbcluster_full.yaml for more configurations. apiVersion: v1 kind: Secret metadata: name: db-pw-dbcluster-sample type: Opaque data: dbcluster-sample: "Q2hhbmdlTWUxMjM=" # Password is ChangeMe123 --- apiVersion: alloydbomni.dbadmin.goog/v1 kind: DBCluster metadata: name: dbcluster-sample spec: databaseVersion: "18.3.0" databaseImageOSType: Debian primarySpec: adminUser: passwordRef: name: db-pw-dbcluster-sample resources: memory: 5Gi cpu: 1 disks: - name: DataDisk size: 10Gi
Déploiements basés sur UBI9
Spécifier une base Red Hat Universal Base Image 9 (UBI 9).
Afficher la configuration YAML des déploiements basés sur UBI9
# This is a minimal DBCluster spec. See v1_dbcluster_full.yaml for more configurations. apiVersion: v1 kind: Secret metadata: name: db-pw-dbcluster-sample type: Opaque data: dbcluster-sample: "Q2hhbmdlTWUxMjM=" # Password is ChangeMe123 --- apiVersion: alloydbomni.dbadmin.goog/v1 kind: DBCluster metadata: name: dbcluster-sample spec: databaseVersion: "18.3.0" databaseImageOSType: UBI9 primarySpec: adminUser: passwordRef: name: db-pw-dbcluster-sample resources: memory: 5Gi cpu: 1 disks: - name: DataDisk size: 10Gi
Options de planification des pods
Configurer l'affinité des nœuds, les tolérances et les comportements de planification.
Afficher la configuration YAML des options de planification des pods
apiVersion: v1 kind: Secret metadata: name: db-pw-dbcluster-sample type: Opaque data: dbcluster-sample: "Q2hhbmdlTWUxMjM=" # Password is ChangeMe123 --- apiVersion: alloydbomni.dbadmin.goog/v1 kind: DBCluster metadata: name: dbcluster-sample spec: databaseVersion: "18.3.0" availability: numberOfStandbys: 1 enableStandbyAsReadReplica: true primarySpec: schedulingconfig: topologySpreadConstraints: - maxSkew: 1 topologyKey: "topology.kubernetes.io/zone" whenUnsatisfiable: DoNotSchedule adminUser: passwordRef: name: db-pw-dbcluster-sample resources: memory: 5Gi cpu: 1 disks: - name: DataDisk size: 10Gi
Haute disponibilité et scaling
Répartir le trafic et garantir une disponibilité nulle ou minimale.
DBCluster haute disponibilité
Configurer plusieurs instances répliquées pour la haute disponibilité.
Afficher la configuration YAML du DBCluster haute disponibilité
apiVersion: v1 kind: Secret metadata: name: db-pw-dbcluster-sample type: Opaque data: dbcluster-sample: "Q2hhbmdlTWUxMjM=" # Password is ChangeMe123 --- apiVersion: alloydbomni.dbadmin.goog/v1 kind: DBCluster metadata: name: dbcluster-sample spec: databaseVersion: "18.3.0" availability: numberOfStandbys: 1 enableStandbyAsReadReplica: true primarySpec: adminUser: passwordRef: name: db-pw-dbcluster-sample resources: memory: 5Gi cpu: 1 disks: - name: DataDisk size: 10Gi
DBCluster avec équilibreur de charge
Exposer les points de terminaison en lecture/écriture à l'aide de l'équilibrage de charge des services.
Afficher la configuration YAML du DBCluster avec équilibreur de charge
apiVersion: v1 kind: Secret metadata: name: db-pw-dbcluster-sample type: Opaque data: dbcluster-sample: "Q2hhbmdlTWUxMjM=" # Password is ChangeMe123 --- apiVersion: alloydbomni.dbadmin.goog/v1 kind: DBCluster metadata: name: dbcluster-sample spec: databaseVersion: "18.3.0" primarySpec: adminUser: passwordRef: name: db-pw-dbcluster-sample resources: memory: 5Gi cpu: 1 disks: - name: DataDisk size: 10Gi dbLoadBalancerOptions: annotations: # Creates internal LoadBalancer in GKE. networking.gke.io/load-balancer-type: "internal" allowExternalIncomingTraffic: true
Instance de pool de lecture
Ajouter des instances de pool en lecture seule pour mettre à l'échelle les opérations de lecture.
Afficher la configuration YAML de l'instance de pool de lecture
apiVersion: alloydbomni.dbadmin.goog/v1 kind: DBInstance metadata: name: dbcluster-sample-rp-1 spec: instanceType: ReadPool dbcParent: name: dbcluster-sample nodeCount: 2 resources: memory: 6Gi cpu: 2 disks: - name: DataDisk size: 15Gi schedulingconfig: tolerations: - key: "node-role.kubernetes.io/control-plane" operator: "Exists" effect: "NoSchedule" nodeaffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 1 preference: matchExpressions: - key: another-node-label-key operator: In values: - another-node-label-value podAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 1 podAffinityTerm: labelSelector: matchExpressions: - key: app operator: In values: - store topologyKey: "kubernetes.io/hostname" podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 1 podAffinityTerm: labelSelector: matchExpressions: - key: security operator: In values: - S1 topologyKey: "topology.kubernetes.io/zone"
Sécurité et gestion des secrets
Protéger les clés, les certificats et les identifiants de cluster.
Émetteurs de certificats
Configurer des émetteurs de certificats TLS personnalisés.
Afficher la configuration YAML des émetteurs de certificats
# This is a minimal DBCluster spec. See v1_dbcluster_full.yaml for more configurations. apiVersion: v1 kind: Secret metadata: name: db-pw-dbcluster-sample type: Opaque data: dbcluster-sample: "Q2hhbmdlTWUxMjM=" # Password is ChangeMe123 --- apiVersion: alloydbomni.dbadmin.goog/v1 kind: DBCluster metadata: name: dbcluster-sample spec: databaseVersion: "18.3.0" primarySpec: tls: dataPlaneCertIssuer: name: data-plane-issuer kind: ClusterIssuer controlPlaneAgentsCertIssuer: name: control-plane-issuer kind: ClusterIssuer dataPlaneCertRequest: commonName: database.dbcluster-sample.com dnsNames: - database.dbcluster-sample.com - database-alt.dbcluster-sample.com duration: 240h0m0s renewBefore: 120h0m0s privateKey: rotationPolicy: Always algorithm: RSA size: 8192 controlPlaneAgentsCertRequest: duration: 240h0m0s renewBefore: 120h0m0s privateKey: rotationPolicy: Always algorithm: RSA size: 8192 adminUser: passwordRef: name: db-pw-dbcluster-sample resources: memory: 5Gi cpu: 1 disks: - name: DataDisk size: 10Gi
Intégration de Vault
Récupérer et sécuriser les secrets à l'aide de HashiCorp Vault.
Afficher la configuration YAML de l'intégration de Vault
apiVersion: v1 kind: Secret metadata: name: db-pw-dbcluster-sample type: Opaque data: # dbcluster-sample: "Q2hhbmdlTWUxMjM=" # Password is ChangeMe123 dbcluster-sample: "ZGhhcm1hbGluZ2Ft" --- apiVersion: v1 kind: Secret metadata: name: alloydbadmin-pw-dbcluster-sample type: Opaque data: # dbcluster-sample: "Q2hhbmdlTWUxMjM=" dbcluster-sample: "ZGhhcm1hbGluZ2Ft" # dbcluster-sample: "YXJhdmluZGFuCg==" --- apiVersion: alloydbomni.dbadmin.goog/v1 kind: DBCluster metadata: name: dbcluster-sample spec: databaseVersion: "18.3.0" # availability: # numberOfStandbys: 1 # enableStandbyAsReadReplica: true primarySpec: adminUser: passwordRef: name: db-pw-dbcluster-sample systemUserPasswordRefs: alloydbadmin: alloydbadmin-pw-dbcluster-sample resources: memory: 5Gi cpu: 1 disks: - name: DataDisk size: 10Gi parameters: omni_password_provider: "/samwise-scripts/credfetcher"
Réplication primaire/de secours
Configurer la réplication entre les bases de données en amont (principale) et en aval (de secours).
Configuration en amont (principale)
Configurer le nœud principal pour publier les modifications.
Afficher la configuration YAML de la configuration en amont (principale)
apiVersion: alloydbomni.dbadmin.goog/v1 kind: Replication metadata: name: replication-upstream-sample spec: dbcluster: name: dbcluster-sample upstream: {}
Configuration en aval (de secours)
Configurer les cibles de réplication pour qu'elles se synchronisent à partir d'un nœud principal.
Afficher la configuration YAML de la configuration en aval (de secours)
apiVersion: alloydbomni.dbadmin.goog/v1 kind: Replication metadata: name: replication-downstream-sample spec: dbcluster: name: dbcluster-sample downstream: host: "10.10.10.10" port: 5432 username: alloydbreplica password: name: "ha-rep-pw-dbcluster-sample" replicationSlotName: "dbcluster_sample_replication_upstream_sample" control: setup # to promote downstream, change control to promote
Sauvegarde, restauration et clonage
Gérer la reprise après sinistre, les copies de données à la demande et les planifications.
Plan de sauvegarde planifiée
Planifier des sauvegardes complètes et incrémentielles.
Afficher la configuration YAML du plan de sauvegarde planifiée
apiVersion: alloydbomni.dbadmin.goog/v1 kind: BackupPlan metadata: name: backupplan1 spec: dbclusterRef: dbcluster-sample backupRetainDays: 14 paused: false backupSchedules: # Full backup at 00:00 on every Sunday. full: "0 0 * * 0" # Incremental backup at 21:00 every day. incremental: "0 21 * * *"
Sauvegarde dans Cloud Storage
Stocker les sauvegardes de manière sécurisée dans un bucket Cloud Storage.
Afficher la configuration YAML de la sauvegarde dans Cloud Storage
apiVersion: alloydbomni.dbadmin.goog/v1 kind: BackupPlan metadata: name: backupplan1 namespace: db spec: dbclusterRef: dbcluster-sample backupRetainDays: 14 paused: false backupSchedules: # Full backup at 00:00 on every Sunday. full: "0 0 * * 0" # Incremental backup at 21:00 every day. incremental: "0 21 * * *" backupLocation: type: GCS gcsOptions: bucket: dbcluster-sample-backups key: /backup # You can optionally provide a key for accessing your GCS bucket. # The key.json needs to be base64 encoded and stored in the given secret under data[key.json]. # Or comment out below, which will then use the GKE cluster service account # to access the GCS bucket (you need to make sure the service account has # the right permission to R/W the GCS bucket). secretRef: name: gcs-key namespace: db --- apiVersion: v1 kind: Secret metadata: name: gcs-key namespace: db data: key.json: | <paste your base64 encoded GCS key json here with 4 spaces for indentation>
Sauvegarde dans Amazon S3
Stocker les sauvegardes dans un bucket compatible avec Amazon S3.
Afficher la configuration YAML de la sauvegarde dans Amazon S3
apiVersion: alloydbomni.dbadmin.goog/v1 kind: BackupPlan metadata: name: backupplan1 namespace: db spec: dbclusterRef: dbcluster-sample backupRetainDays: 14 paused: false backupSchedules: # Full backup at 00:00 on every Sunday. full: "0 0 * * 0" # Incremental backup at 21:00 every day. incremental: "0 21 * * *" backupLocation: type: S3 s3Options: bucket: dbcluster-sample-backups-s3 key: /backup region: "us-east-1" endpoint: "https://s3.storage.com" secretRef: name: s3-access-secret namespace: db # You can optionally provide the cert to be used to connect to the S3 with TLS. # If not provided, TLS verification will be skipped. certRef: name: server-tls namespace: server-ns --- apiVersion: v1 kind: Secret metadata: namespace: db name: "s3-access-secret" type: Opaque data: # Update the following with your S3 access keys. access-key-id: "Q2hhbmdlTWUxMjM=" # access-key-id is ChangeMe123 access-key: "Q2hhbmdlTWUxMjM=" # access-key is ChangeMe123
Sauvegarde manuelle à la demande
Créer une seule sauvegarde manuelle.
Afficher la configuration YAML de la sauvegarde manuelle à la demande
apiVersion: alloydbomni.dbadmin.goog/v1 kind: Backup metadata: name: backup1 spec: dbclusterRef: dbcluster-sample backupPlanRef: backupplan1 manual: true physicalBackupSpec: backupType: full
Restaurer à partir d'une sauvegarde
Récupérer ou créer un cluster à partir d'une sauvegarde stockée.
Afficher la configuration YAML de la restauration à partir d'une sauvegarde
apiVersion: alloydbomni.dbadmin.goog/v1 kind: Restore metadata: name: restore1 spec: sourceDBCluster: dbcluster-sample backup: backup1
Cloner la base de données
Cloner des DBCluster standards.
Afficher la configuration YAML du clonage de la base de données
apiVersion: alloydbomni.dbadmin.goog/v1 kind: Restore metadata: name: clone1 spec: sourceDBCluster: dbcluster-sample pointInTime: "2024-02-23T19:59:43Z" clonedDBClusterConfig: dbclusterName: new-dbcluster-sample
Opérations et basculement
Exécuter des transitions de topologie sécurisées.
Commutation contrôlée
Promouvoir une instance répliquée secondaire via une commutation planifiée sans perte de données.
Afficher la configuration YAML de la commutation contrôlée
apiVersion: alloydbomni.dbadmin.goog/v1 kind: Switchover metadata: name: switchover-sample spec: dbclusterRef: dbcluster-sample
Basculement de reprise après sinistre
Gérer les scénarios de reprise après sinistre ou de basculement non planifiés.
Afficher la configuration YAML du basculement de reprise après sinistre
apiVersion: alloydbomni.dbadmin.goog/v1 kind: Failover metadata: name: failover-sample spec: dbclusterRef: dbcluster-sample
Regroupement de connexions (PgBouncer)
Configurer des couches de proxy de base de données à l'aide de PgBouncer.
PgBouncer de base
Déployer un compagnon PgBouncer standard.
Afficher la configuration YAML de PgBouncer de base
apiVersion: alloydbomni.dbadmin.goog/v1 kind: PgBouncer metadata: name: mypgbouncer spec: allowSuperUserAccess: true dbclusterRef: dbcluster-sample replicaCount: 1 parameters: pool_mode: transaction ignore_startup_parameters: extra_float_digits default_pool_size: "15" max_client_conn: "800" max_db_connections: "160" podSpec: resources: memory: 1Gi cpu: 1 image: "gcr.io/alloydb-omni/operator/g-pgbouncer:1.7.0" serviceOptions: type: "ClusterIP"
PgBouncer complet
Configurer le réglage avancé, l'autorisation personnalisée et les remplacements de pool de connexions.
Afficher la configuration YAML de PgBouncer complet
apiVersion: alloydbomni.dbadmin.goog/v1 kind: PgBouncer metadata: name: mypgbouncer spec: allowSuperUserAccess: true dbclusterRef: dbcluster-sample replicaCount: 2 parameters: pool_mode: transaction ignore_startup_parameters: extra_float_digits default_pool_size: "15" max_client_conn: "800" max_db_connections: "160" podSpec: resources: memory: 1Gi cpu: 1 image: "gcr.io/alloydb-omni-staging/g-pgbouncer:1.4.0" schedulingconfig: nodeaffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: nodetype operator: In values: - pgbouncer serviceOptions: type: "LoadBalancer" loadBalancerSourceRanges: - "11.0.0.0/8" annotations: networking.gke.io/load-balancer-type: "internal"
Services intégrés et side-cars
Améliorer les capacités de la base de données avec le machine learning, l'observabilité et les side-cars d'agent personnalisés.
DBCluster avec agent ML
Intégrer le side-car de proxy ML local ou Vertex AI.
Afficher la configuration YAML du DBCluster avec agent ML
apiVersion: v1 kind: Secret metadata: name: db-pw-dbcluster-sample type: Opaque data: dbcluster-sample: "Q2hhbmdlTWUxMjM=" # Password is ChangeMe123 --- apiVersion: v1 kind: Secret metadata: name: vertex-ai-key-alloydb type: Opaque data: private-key.json: "" --- apiVersion: alloydbomni.dbadmin.goog/v1 kind: DBCluster metadata: name: dbcluster-sample spec: databaseVersion: "18.3.0" primarySpec: features: googleMLExtension: enabled: true config: vertexAIKeyRef: vertex-ai-key-alloydb vertexAIRegion: us-central1 adminUser: passwordRef: name: db-pw-dbcluster-sample resources: memory: 5Gi cpu: 1 disks: - name: DataDisk size: 10Gi
Configuration de l'observabilité
Configurer les métriques de cluster, y compris les requêtes SQL personnalisées pour collecter des métriques de base de données et spécifiques à l'application définies par l'utilisateur.
Afficher la configuration YAML de la configuration de l'observabilité
apiVersion: alloydbomni.dbadmin.goog/v1 kind: ObservabilityConfig metadata: name: my-custom-metrics spec: dbClusterRefs: - dbcluster-sample customMetrics: resourceLimits: workMemory: "4MB" maxParallelWorkers: 0 #limits to 1 CPU core definitions: - metricGroup: querygroup_postgres database: "postgres" query: | SELECT datname, pg_database_size(datname) as db_size_bytes, (SELECT count(*) FROM pg_stat_activity WHERE datname = d.datname) as active_connections FROM pg_database d WHERE datname = 'postgres' metrics: - name: datname desc: "Database name" usage: label - name: db_size_bytes desc: "Size of the current database in bytes" usage: gauge - name: active_connections desc: "Number of active connections to the database" usage: gauge
Configuration des métriques d'observabilité étendues
Étendre AlloyDB Omni avec des métriques PostgreSQL supplémentaires (telles que le writer en arrière-plan, WAL, les E/S de table et les métriques de transaction).
Afficher la configuration YAML des métriques d'observabilité étendues
# This ObservabilityConfig extends AlloyDB Omni with supplemental PostgreSQL metrics. # # Intent: # Provide operational visibility into background processes, WAL, table I/O, etc. # # Prometheus Naming Pattern: # alloydb_omni_custom_<metricGroup>_<metric_name> # # Example (bgwriter): # 'checkpoints_timed' in the 'bgwriter' group appears as: # alloydb_omni_custom_bgwriter_checkpoints_timed_total # apiVersion: alloydbomni.dbadmin.goog/v1 kind: ObservabilityConfig metadata: name: obs-extended-metrics spec: dbClusterRefs: - dbcluster-sample customMetrics: resourceLimits: workMemory: "4MB" maxParallelWorkers: 0 definitions: - metricGroup: bgwriter database: "postgres" query: | SELECT checkpoints_timed, checkpoints_req, checkpoint_write_time, checkpoint_sync_time, buffers_clean, maxwritten_clean, buffers_backend, buffers_backend_fsync, buffers_alloc FROM pg_stat_bgwriter metrics: - name: checkpoints_timed desc: "Scheduled checkpoints performed" usage: counter - name: checkpoints_req desc: "Requested checkpoints performed" usage: counter - name: checkpoint_write_time desc: "Total time writing files to disk during checkpoint (ms)" usage: counter - name: checkpoint_sync_time desc: "Total time syncing files to disk during checkpoint (ms)" usage: counter - name: buffers_clean desc: "Buffers written by the background writer" usage: counter - name: maxwritten_clean desc: "Times bgwriter stopped because it wrote too many buffers" usage: counter - name: buffers_backend desc: "Buffers written directly by backends" usage: counter - name: buffers_backend_fsync desc: "Times backends had to execute their own fsync calls" usage: counter - name: buffers_alloc desc: "Total buffers allocated" usage: counter - metricGroup: autovacuum database: "postgres" query: | SELECT count(*) as active_autovacuum_workers FROM pg_stat_activity WHERE backend_type = 'autovacuum worker' metrics: - name: active_autovacuum_workers desc: "Number of active autovacuum worker processes" usage: gauge - metricGroup: vacuum_progress database: "postgres" query: | SELECT phase, COUNT(*) AS num_in_phase FROM pg_stat_progress_vacuum GROUP BY phase metrics: - name: phase desc: "Current phase of the vacuum operation" usage: label - name: num_in_phase desc: "Number of vacuum operations in this phase" usage: gauge - metricGroup: user_tables database: "postgres" query: | SELECT SUM(seq_scan) AS total_seq_scan, SUM(seq_tup_read) AS total_seq_tup_read, SUM(idx_scan) AS total_idx_scan, SUM(idx_tup_fetch) AS total_idx_tup_fetch, SUM(n_tup_ins) AS total_n_tup_ins, SUM(n_tup_upd) AS total_n_tup_upd, SUM(n_tup_del) AS total_n_tup_del, SUM(n_live_tup) AS total_n_live_tup, SUM(n_dead_tup) AS total_n_dead_tup, SUM(n_mod_since_analyze) AS total_n_mod_since_analyze FROM pg_stat_user_tables metrics: - name: total_seq_scan desc: "Total sequential scans on user tables" usage: counter - name: total_seq_tup_read desc: "Total rows fetched by sequential scans" usage: counter - name: total_idx_scan desc: "Total index scans on user tables" usage: counter - name: total_idx_tup_fetch desc: "Total rows fetched by index scans" usage: counter - name: total_n_tup_ins desc: "Total rows inserted" usage: counter - name: total_n_tup_upd desc: "Total rows updated" usage: counter - name: total_n_tup_del desc: "Total rows deleted" usage: counter - name: total_n_live_tup desc: "Estimated live rows" usage: gauge - name: total_n_dead_tup desc: "Estimated dead rows" usage: gauge - name: total_n_mod_since_analyze desc: "Rows modified since the last ANALYZE operation" usage: counter - metricGroup: statio_user_tables database: "postgres" query: | SELECT SUM(heap_blks_read) AS total_heap_blks_read, SUM(heap_blks_hit) AS total_heap_blks_hit, SUM(idx_blks_read) AS total_idx_blks_read, SUM(idx_blks_hit) AS total_idx_blks_hit, SUM(toast_blks_read) AS total_toast_blks_read, SUM(toast_blks_hit) AS total_toast_blks_hit, SUM(tidx_blks_read) AS total_tidx_blks_read, SUM(tidx_blks_hit) AS total_tidx_blks_hit FROM pg_statio_user_tables metrics: - name: total_heap_blks_read desc: "Heap blocks read from disk" usage: counter - name: total_heap_blks_hit desc: "Heap blocks found in buffer cache" usage: counter - name: total_idx_blks_read desc: "Index blocks read from disk" usage: counter - name: total_idx_blks_hit desc: "Index blocks found in buffer cache" usage: counter - name: total_toast_blks_read desc: "TOAST blocks read from disk" usage: counter - name: total_toast_blks_hit desc: "TOAST blocks found in buffer cache" usage: counter - name: total_tidx_blks_read desc: "TOAST index blocks read from disk" usage: counter - name: total_tidx_blks_hit desc: "TOAST index blocks found in buffer cache" usage: counter - metricGroup: statio_user_indexes database: "postgres" query: | SELECT SUM(idx_blks_read) AS total_index_blks_read, SUM(idx_blks_hit) AS total_index_blks_hit FROM pg_statio_user_indexes metrics: - name: total_index_blks_read desc: "Total index blocks read from disk" usage: counter - name: total_index_blks_hit desc: "Total index blocks found in buffer cache" usage: counter - metricGroup: wal database: "postgres" query: | SELECT wal_records, wal_fpi, wal_bytes, wal_buffers_full, wal_write, wal_sync, wal_write_time, wal_sync_time FROM pg_stat_wal metrics: - name: wal_records desc: "Total WAL records generated" usage: counter - name: wal_fpi desc: "Total full page images generated" usage: counter - name: wal_bytes desc: "Total WAL generated in bytes" usage: counter - name: wal_buffers_full desc: "Number of times WAL buffers were full" usage: counter - name: wal_write desc: "Number of WAL writes to disk" usage: counter - name: wal_sync desc: "Number of WAL syncs to disk" usage: counter - name: wal_write_time desc: "Total time spent writing WAL (ms)" usage: counter - name: wal_sync_time desc: "Total time spent syncing WAL (ms)" usage: counter - metricGroup: stat_wal_receiver database: "postgres" query: | SELECT status, EXTRACT(EPOCH FROM (now() - last_msg_receipt_time)) AS receiver_lag_seconds FROM pg_stat_wal_receiver WHERE last_msg_receipt_time IS NOT NULL metrics: - name: status desc: "Status of the WAL receiver" usage: label - name: receiver_lag_seconds desc: "Seconds since last message from primary" usage: gauge - metricGroup: replication_slots database: "postgres" query: | SELECT slot_name, slot_type, active, pg_wal_lsn_diff(pg_current_wal_lsn(), restart_lsn) AS retained_wal_bytes FROM pg_replication_slots metrics: - name: slot_name desc: "Name of the replication slot" usage: label - name: slot_type desc: "Type of replication slot" usage: label - name: active desc: "Is replication slot active" usage: gauge - name: retained_wal_bytes desc: "WAL bytes retained by slot" usage: gauge - metricGroup: database database: "postgres" query: | SELECT datname, numbackends, xact_commit, xact_rollback, blks_read, blks_hit, tup_returned, tup_fetched, tup_inserted, tup_updated, tup_deleted, conflicts, temp_files, temp_bytes, deadlocks, checksum_failures, blk_read_time, blk_write_time FROM pg_stat_database WHERE datname IS NOT NULL metrics: - name: datname desc: "Database name" usage: label - name: numbackends desc: "Connected backends" usage: gauge - name: xact_commit desc: "Transactions committed" usage: counter - name: xact_rollback desc: "Transactions rolled back" usage: counter - name: blks_read desc: "Disk blocks read" usage: counter - name: blks_hit desc: "Disk blocks found in cache" usage: counter - name: tup_returned desc: "Rows returned" usage: counter - name: tup_fetched desc: "Rows fetched" usage: counter - name: tup_inserted desc: "Rows inserted" usage: counter - name: tup_updated desc: "Rows updated" usage: counter - name: tup_deleted desc: "Rows deleted" usage: counter - name: conflicts desc: "Recovery conflicts" usage: counter - name: temp_files desc: "Temporary files created" usage: counter - name: temp_bytes desc: "Temporary file bytes" usage: counter - name: deadlocks desc: "Deadlocks detected" usage: counter - name: checksum_failures desc: "Data checksum failures" usage: counter - name: blk_read_time desc: "Time spent reading blocks (ms)" usage: counter - name: blk_write_time desc: "Time spent writing blocks (ms)" usage: counter - metricGroup: long_running_transactions database: "postgres" query: | SELECT COUNT(*) FILTER (WHERE now() - xact_start > INTERVAL '5 minutes') AS long_running_xact_count, COALESCE(EXTRACT(EPOCH FROM MAX(now() - xact_start)), 0) AS max_xact_age_seconds FROM pg_stat_activity WHERE backend_type = 'client backend' AND xact_start IS NOT NULL metrics: - name: long_running_xact_count desc: "Client transactions running > 5m" usage: gauge - name: max_xact_age_seconds desc: "Max transaction age in seconds" usage: gauge - metricGroup: stat_statements database: "postgres" query: | SELECT sum(calls) as total_calls, sum(total_exec_time) as total_exec_time_ms, sum(rows) as total_rows FROM pg_stat_statements metrics: - name: total_calls desc: "Total statement calls" usage: counter - name: total_exec_time_ms desc: "Total statement execution time (ms)" usage: counter - name: total_rows desc: "Total rows processed" usage: counter
Side-car personnalisé
Injecter des side-cars d'assistance standards dans les pods de votre cluster.
Afficher la configuration YAML du side-car personnalisé
apiVersion: alloydbomni.dbadmin.goog/v1 kind: Sidecar metadata: name: sidecar-sample spec: sidecars: - image: busybox name: sidecar-sample volumeMounts: - name: obsdisk mountPath: /logs command: ["/bin/sh"] args: - -c - | while [ true ] do date set -x ls -lh /logs/diagnostic set +x done
DBCluster avec side-car personnalisé
Configurer un DBCluster de base qui inclut des side-cars d'assistance standards.
Afficher la configuration YAML du DBCluster avec side-car personnalisé
apiVersion: v1 kind: Secret metadata: name: db-pw-dbcluster-sample type: Opaque data: dbcluster-sample: "Q2hhbmdlTWUxMjM=" # Password is ChangeMe123 --- apiVersion: alloydbomni.dbadmin.goog/v1 kind: DBCluster metadata: name: dbcluster-sample spec: databaseVersion: "18.3.0" primarySpec: adminUser: passwordRef: name: db-pw-dbcluster-sample resources: memory: 5Gi cpu: 1 disks: - name: DataDisk size: 10Gi sidecarRef: name: sidecar-sample
Side-car de sauvegarde Commvault
Spécifier la configuration de l'agent Commvault en tant que side-car d'assistance.
Afficher la configuration YAML du side-car de sauvegarde Commvault
# Source: commvault/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: cvconfigmap data: CV_MASVCNAME: commvault-prod CV_CSHOSTNAME: "tipcs.idcprodcert.loc" CV_CSIPADDR: "123.123.123.123" CV_CSCLIENTNAME: "tipcs" CV_CLIENT_ROLE: "postgres" --- apiVersion: v1 kind: Secret metadata: name: commcell-secret data: CV_COMMCELL_USER: Y3ZhZG1pbgo= # commcell username is cvadmin CV_COMMCELL_PWD: Y3ZwYXNzd29yZAo= # commcell password is cvpassword --- apiVersion: alloydbomni.dbadmin.goog/v1 kind: Sidecar metadata: name: cv-sidecar-config annotations: alloydbomni.dbadmin.goog/sidecar: commvault spec: sidecars: - name: "commvault-pgsqlagent" image: "commvault/accessnode:11.32.42" lifecycle: preStop: exec: command: [ "/bin/sh", "-c" , "cp /opt/commvault/Base/FwConfig* /etc/CommVaultRegistry/Galaxy/FwConfig/" ] envFrom: - configMapRef: name: cvconfigmap volumeMounts: - name: logdisk mountPath: /archive/ - name: tmp-socket mountPath: /tmp - name: commvault-env-store2 mountPath: /opt/cvdocker_env readOnly: true - name: backupdisk mountPath: /etc/CommVaultRegistry subPath: Registry - name: backupdisk mountPath: /var/log/commvault/Log_Files subPath: Log_Files - name: backupdisk mountPath: /opt/commvault/MediaAgent/IndexCache subPath: IndexCache - name: backupdisk mountPath: /opt/commvault/iDataAgent/jobResults subPath: jobResults - name: backupdisk mountPath: /opt/commvault/Base/certificates subPath: certificates - name: datadisk mountPath: /mnt/disks/pgsql - name: commcell-secret mountPath: /opt/commcell_secret ports: - name: cvdport containerPort: 8400 securityContext: runAsUser: 0 additionalVolumes: - name: commcell-secret secret: secretName: commcell-secret - name: commvault-env-store2 configMap: name: cvconfigmap
DBCluster avec side-car Commvault
Configurer un DBCluster qui spécifie un conteneur side-car d'assistance de l'agent Commvault.
Afficher la configuration YAML du DBCluster avec side-car Commvault
apiVersion: v1 kind: Secret metadata: name: db-pw-dbcluster-sample type: Opaque data: dbcluster-sample: "Q2hhbmdlTWUxMjM=" # Password is ChangeMe123 --- apiVersion: alloydbomni.dbadmin.goog/v1 kind: DBCluster metadata: name: dbcluster-sample spec: databaseVersion: "18.3.0" primarySpec: adminUser: passwordRef: name: db-pw-dbcluster-sample resources: memory: 5Gi cpu: 1 disks: - name: DataDisk size: 10Gi - name: LogDisk size: 10Gi walArchiveSetting: location: wal/log # enable WAL archiving and archive logs to /archive/wal/log sidecarRef: name: cv-sidecar-config