Exemples de configuration d'AlloyDB Omni sur Kubernetes

Cette page fournit des exemples de configuration YAML pour déployer et gérer AlloyDB Omni sur Kubernetes.

Configurations de base et d'OS de DBCluster

Découvrez les configurations de cluster de base et les paramètres de système d'exploitation personnalisés.

DBCluster minimal

Configuration de base pour déployer un DBCluster AlloyDB Omni.

Afficher la configuration YAML minimale du DBCluster

# 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.1.0"
  primarySpec:
    adminUser:
      passwordRef:
        name: db-pw-dbcluster-sample
    resources:
      memory: 5Gi
      cpu: 1
      disks:
      - name: DataDisk
        size: 10Gi

DBCluster complet

Une configuration complète qui affiche les paramètres disponibles.

Afficher la configuration YAML complète du DBCluster

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.1.0"
  databaseImageOSType: UBI9
  isDeleted: false
  mode: ""
  primarySpec:
    adminUser:
      passwordRef:
        name: db-pw-dbcluster-sample
    allowExternalIncomingTrafficToInstance: false
    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.1.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écifiez une base d'image d'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.1.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écifiez 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.1.0"
  databaseImageOSType: UBI9
  primarySpec:
    adminUser:
      passwordRef:
        name: db-pw-dbcluster-sample
    resources:
      memory: 5Gi
      cpu: 1
      disks:
      - name: DataDisk
        size: 10Gi

Options de programmation des pods

Configurez l'affinité de 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.1.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épartissez le trafic et assurez un temps d'arrêt minimal ou nul.

DBCluster à haute disponibilité

Configurez plusieurs instances répliquées pour assurer 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.1.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

Exposez les points de terminaison en lecture/écriture à l'aide de l'équilibrage de charge des services.

Afficher la configuration YAML du DBCluster avec l'é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.1.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

Ajoutez des instances de pool en lecture seule pour faire évoluer 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.1.0"
  primarySpec:
    tls:
      dataPlaneCertIssuer:
        name: data-plane-issuer
        kind: ClusterIssuer
      controlPlaneAgentsCertIssuer:
        name: control-plane-issuer
        kind: ClusterIssuer
    adminUser:
      passwordRef:
        name: db-pw-dbcluster-sample
    resources:
      memory: 5Gi
      cpu: 1
      disks:
      - name: DataDisk
        size: 10Gi

Intégration de Vault

Récupérez et protégez les secrets à l'aide de HashiCorp Vault.

Afficher la configuration YAML de l'intégration Vault

apiVersion: v1
kind: Secret
metadata:
  name: db-pw-dbcluster-sample
type: Opaque
data:
#  dbcluster-sample: "Q2hhbmdlTWUxMjM=" # Password is ChangeMe123
  dbcluster-sample: "ZGhhcm1hbGluZ2FtCg=="

---
apiVersion: v1
kind: Secret
metadata:
  name: alloydbadmin-pw-dbcluster-sample
type: Opaque
data:
  dbcluster-sample: "Q2hhbmdlTWUxMjM="
#  dbcluster-sample: "ZGhhcm1hbGluZ2FtCg=="
#  dbcluster-sample: "YXJhdmluZGFuCg=="
---
apiVersion: alloydbomni.dbadmin.goog/v1
kind: DBCluster
metadata:
  name: dbcluster-sample
spec:
  databaseVersion: "18.1.0"
#  availability:
#    numberOfStandbys: 1
#    enableStandbyAsReadReplica: true
  primarySpec:
    adminUser:
      passwordRef:
        name: db-pw-dbcluster-sample
    agentPassword:
      passwordRef:
        name: alloydbadmin-pw-dbcluster-sample
    resources:
      memory: 5Gi
      cpu: 1
      disks:
      - name: DataDisk
        size: 10Gi

Authentification définie par l'utilisateur (Active Directory)

Configurez des règles pg_hba.conf et pg_ident.conf personnalisées, ainsi que des secrets de keytab Kerberos pour l'authentification Active Directory (GSSAPI).

Afficher la configuration YAML de l'authentification définie par l'utilisateur

apiVersion: v1
kind: Secret
metadata:
  name: db-keytab-dbcluster-sample
type: Opaque
data:
  krb5.keytab: |
    DUMMY_KEYTAB
---
apiVersion: alloydbomni.dbadmin.goog/v1
kind: UserDefinedAuthentication
metadata:
  name: dbcluster-sample-ad-auth
spec:
  dbclusterRef:
    name: dbcluster-sample
  keytabSecretRef:
    name: db-keytab-dbcluster-sample
  pgHbaEntries:
    - hostgssenc all all 0.0.0.0/0 gss
    - hostgssenc all all ::1/128 gss
    - hostssl all all 0.0.0.0/0 scram-sha-256
    - hostssl all all ::/0 scram-sha-256
  pgIdentEntries:
    - usermap active_directory_user postgres_user

Réplication principale-secours

Configurez la réplication entre les bases de données en amont (principale) et en aval (de secours).

Configuration en amont (principale)

Configurez 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 (en veille)

Configurez 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 (en veille)

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érez la reprise après sinistre, les copies de données à la demande et les planifications.

Plan de sauvegarde planifié

Planifiez 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 * * *"

Sauvegarder dans Cloud Storage

Stockez 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>

Sauvegarder sur Amazon S3

Stocker les sauvegardes dans un bucket compatible avec Amazon S3.

Afficher la configuration YAML de la sauvegarde sur 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éez 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

Restauration à partir d'une sauvegarde

Récupérez ou créez 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 DBClusters standards.

Afficher la configuration YAML du clone de 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

Basculement contrôlé

Promouvoir une instance répliquée secondaire via un basculement planifié 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)

Configurez des couches de proxy de base de données à l'aide de PgBouncer.

PgBouncer de base

Déployez un compagnon PgBouncer standard.

Afficher la configuration YAML de base de PgBouncer

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-staging/g-pgbouncer:1.4.0"
  serviceOptions:
    type: "ClusterIP"

PgBouncer complet

Configurez le réglage avancé, l'autorisation personnalisée et les remplacements de pool de connexions.

Afficher la configuration YAML complète de PgBouncer

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éliorez les fonctionnalités de base de données grâce au machine learning, à l'observabilité et aux side-cars d'agent personnalisés.

DBCluster avec agent de ML

Intégrez le side-car proxy de ML local ou Vertex AI.

Afficher la configuration YAML du DBCluster avec l'agent de 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.1.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é

Configurez les métriques de cluster, y compris les requêtes SQL personnalisées, pour collecter des métriques de base de données et d'application définies par l'utilisateur.

Afficher la configuration YAML de la configuration d'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
      - metricGroup: querygroup_alloydbadmin
        database: "alloydbadmin"
        query: |
          SELECT count(*) as healthcheck_count
          FROM healthcheck
        metrics:
          - name: healthcheck_count
            desc: "Number of rows in healthcheck table"
            usage: gauge

Side-car personnalisé

Injectez des side-cars d'assistance standard 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é

Configurez un DBCluster de base qui inclut des side-cars d'assistance standards.

Afficher la configuration YAML du DBCluster avec un 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.1.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écifiez 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

Configurez un DBCluster qui spécifie un conteneur side-car d'assistance de l'agent Commvault.

Afficher la configuration YAML de DBCluster avec le 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.1.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