このページでは、Kubernetes で AlloyDB Omni をデプロイして管理するための YAML 構成の例を示します。
DBCluster のコアと OS の構成
ベース クラスタ構成とカスタム オペレーティング システム設定について説明します。
最小限の DBCluster
AlloyDB Omni DBCluster をデプロイするための基本構成。
最小限の DBCluster YAML 構成を表示する
# 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
Full DBCluster
利用可能な設定を示す包括的なセットアップ。
DBCluster YAML 構成全体を表示する
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"
カスタム パラメータ
カスタム PostgreSQL パラメータを構成します。
カスタム パラメータの YAML 構成を表示する
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"
Debian ベースのデプロイ
Debian OS イメージのベースを指定します。
Debian ベースのデプロイの YAML 構成を表示する
# 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
UBI9 ベースのデプロイ
Red Hat Universal Base Image 9(UBI 9)ベースを指定します。
UBI9 ベースの Deployment の YAML 構成を表示する
# 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
Pod のスケジューリング オプション
ノード アフィニティ、許容、スケジューリング動作を構成します。
Pod スケジューリング オプションの YAML 構成を表示する
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
高可用性とスケーリング
トラフィックを分散し、ダウンタイムをゼロまたは最小限に抑えます。
HA DBCluster
高可用性を実現するために複数のレプリカを設定する。
HA DBCluster の YAML 構成を表示する
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
サービス ロード バランシングを使用して読み取り/書き込みエンドポイントを公開します。
ロードバランサの YAML 構成を含む 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: 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
読み取りプール インスタンス
読み取り専用プール インスタンスを追加して、読み取りオペレーションをスケーリングします。
読み取りプール インスタンスの YAML 構成を表示する
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"
セキュリティとシークレット管理
鍵、証明書、クラスタ認証情報を保護します。
証明書の発行元
カスタム TLS 証明書発行者を構成します。
Certificate Issuers の YAML 構成を表示する
# 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
Vault の統合
HashiCorp Vault を使用してシークレットを取得し、安全に保管します。
Vault 統合の YAML 構成を表示する
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"
プライマリ / スタンバイ レプリケーション
アップストリーム(プライマリ)データベースとダウンストリーム(スタンバイ)データベース間のレプリケーションを構成します。
アップストリーム(プライマリ)の構成
変更を公開するようにプライマリ ノードを構成します。
アップストリーム(プライマリ)構成の YAML 構成を表示する
apiVersion: alloydbomni.dbadmin.goog/v1 kind: Replication metadata: name: replication-upstream-sample spec: dbcluster: name: dbcluster-sample upstream: {}
ダウンストリーム(スタンバイ)構成
プライマリ ノードから同期するようにレプリケーション ターゲットを構成します。
ダウンストリーム(スタンバイ)構成の YAML 構成を表示する
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
バックアップ、復元、クローン作成
障害復旧、オンデマンド データコピー、スケジュールを管理します。
スケジュール設定されたバックアップ プラン
完全バックアップと増分バックアップをスケジュールします。
スケジュール バックアップ プランの YAML 構成を表示する
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 * * *"
Google Cloud Storage(GCS)へのバックアップ
バックアップを Google Cloud Storage バケットに安全に保存します。
Google Cloud Storage(GCS)へのバックアップの YAML 構成を表示する
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>
Amazon S3 にバックアップする
Amazon S3 互換バケット内にバックアップを保存します。
Amazon S3 へのバックアップの YAML 構成を表示する
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
オンデマンド手動バックアップ
単一の手動バックアップを作成します。
オンデマンド手動バックアップの YAML 構成を表示する
apiVersion: alloydbomni.dbadmin.goog/v1 kind: Backup metadata: name: backup1 spec: dbclusterRef: dbcluster-sample backupPlanRef: backupplan1 manual: true physicalBackupSpec: backupType: full
バックアップからの復元
保存済みのバックアップからクラスタを復元または作成します。
バックアップからの復元の YAML 構成を表示する
apiVersion: alloydbomni.dbadmin.goog/v1 kind: Restore metadata: name: restore1 spec: sourceDBCluster: dbcluster-sample backup: backup1
データベースのクローン
標準 DBCluster のクローンを作成します。
データベース クローンの YAML 構成を表示する
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
オペレーションとフェイルオーバー
安全なトポロジの移行を実行します。
制御された切り替え
データ損失のない計画的な切り替えでセカンダリ レプリカを昇格させます。
制御された切り替えの YAML 構成を表示する
apiVersion: alloydbomni.dbadmin.goog/v1 kind: Switchover metadata: name: switchover-sample spec: dbclusterRef: dbcluster-sample
障害復旧フェイルオーバー
計画外の障害復旧やフェイルオーバーのシナリオに対応する。
障害復旧フェイルオーバーの YAML 構成を表示する
apiVersion: alloydbomni.dbadmin.goog/v1 kind: Failover metadata: name: failover-sample spec: dbclusterRef: dbcluster-sample
接続プーリング(PgBouncer)
PgBouncer を使用してデータベース プロキシレイヤを設定します。
基本的な PgBouncer
標準の PgBouncer コンパニオンをデプロイします。
基本的な PgBouncer YAML 構成を表示する
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
高度なチューニング、カスタム認可、接続プールのオーバーライドを構成します。
完全な PgBouncer YAML 構成を表示する
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"
統合サービスとサイドカー
機械学習、オブザーバビリティ、カスタム エージェント サイドカーを使用して、データベース機能を強化します。
ML エージェントを含む DBCluster
ローカル ML または Vertex AI プロキシ サイドカーを統合します。
ML エージェントの YAML 構成を含む DBCluster を表示する
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
オブザーバビリティの構成
ユーザー定義のデータベースとアプリケーション固有の指標を収集するカスタム SQL クエリなど、クラスタ指標を構成します。
オブザーバビリティ構成の YAML 構成を表示する
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
拡張オブザーバビリティ指標の構成
補足的な PostgreSQL 指標(バックグラウンド ライター、WAL、テーブル I/O、トランザクション指標など)を使用して AlloyDB Omni を拡張します。
拡張オブザーバビリティ指標の YAML 構成を表示する
# 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
カスタム サイドカー
標準サポート サイドカーをクラスタ Pod に挿入します。
カスタム Sidecar の YAML 構成を表示する
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
標準サポート サイドカーを含むベース DBCluster を構成します。
カスタム サイドカーの YAML 構成で 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: 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
Commvault バックアップ サイドカー
Commvault エージェントの構成をヘルパー サイドカーとして指定します。
Commvault Backup Sidecar の YAML 構成を表示する
# 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
Commvault サイドカーを使用した DBCluster
Commvault エージェント ヘルパー サイドカー コンテナを指定する DBCluster を構成します。
Commvault Sidecar YAML 構成で 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: 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