執行並連線至 AlloyDB Omni

本頁說明如何將 AlloyDB Omni 部署至 Kubernetes 叢集,然後執行及連線至 AlloyDB Omni。

本頁面中的 Kubernetes 專屬操作說明,假設您已具備操作 Kubernetes 的基本知識。

執行 AlloyDB Omni

執行 AlloyDB Omni 的程序,取決於您是否在 Kubernetes 叢集上執行 AlloyDB Omni。

啟動 AlloyDB Omni

在資訊清單定義中,將 isStopped 設為 false,即可啟動已停止的資料庫叢集。

您可以使用 kubectl 在指令列執行這項操作:

  kubectl patch dbclusters.alloydbomni.dbadmin.goog DB_CLUSTER_NAME \
  -p '{"spec":{"primarySpec":{"isStopped":false}}}' --type=merge  -n DB_CLUSTER_NAMESPACE

更改下列內容:

  • DB_CLUSTER_NAME:這個資料庫叢集的名稱,例如 my-db-cluster。
  • DB_CLUSTER_NAMESPACE (選用):您建立這個資料庫叢集的命名空間,例如 my-db-cluster-namespace。

檢查 AlloyDB Omni 的狀態

  kubectl get dbclusters.alloydbomni.dbadmin.goog DB_CLUSTER_NAME  -n DB_CLUSTER_NAMESPACE

更改下列內容:

停止 AlloyDB Omni

如要停止資料庫叢集,請在資訊清單定義中將 isStopped 設為 true。

您可以使用 kubectl 在指令列執行這項操作:

  kubectl patch dbclusters.alloydbomni.dbadmin.goog DB_CLUSTER_NAME -p '{"spec":{"primarySpec":{"isStopped":true}}}' --type=merge -n DB_CLUSTER_NAMESPACE

更改下列內容:

*   `DB_CLUSTER_NAME`: the name of this database cluster—for example, `my-db-cluster`.
*   `DB_CLUSTER_NAMESPACE` (Optional): the namespace where you created this database cluster—for example, `my-db-cluster-namespace`.

連線至在 Kubernetes 上執行的 AlloyDB Omni

AlloyDB Omni Kubernetes 運算子允許從同一個 Kubernetes 叢集內連線至資料庫叢集,並可選擇使用憑證進行驗證。

使用預先安裝的 psql 連線

您可以使用已安裝在執行資料庫的 Pod 上的 psql 用戶端,建立測試連線。

請執行下列指令來進行這項操作:

export DBPOD=`kubectl get pod --selector=alloydbomni.internal.dbadmin.goog/dbcluster=DB_CLUSTER_NAME,alloydbomni.internal.dbadmin.goog/task-type=database -n DB_CLUSTER_NAMESPACE -o jsonpath='{.items[0].metadata.name}'`
kubectl exec -ti $DBPOD -n DB_CLUSTER_NAMESPACE -c database -- psql -h localhost -U postgres

將 DB_CLUSTER_NAME 替換為資料庫叢集名稱。這與您建立資料庫叢集時宣告的名稱相同。

如果您是在預設命名空間中建立資料庫叢集,則可略過設定 DB_CLUSTER_NAMESPACE。

輸入指令後,資料庫伺服器會提示您輸入密碼。輸入您在建立資料庫叢集時,以 Kubernetes 密鑰形式提供的 Base64 編碼版本密碼。舉例來說,如果您建立資料庫叢集時使用的 Secret 是 Q2hhbmdlTWUxMjM=,則這裡要使用的登入密碼就是 ChangeMe123。

AlloyDB Omni 運算子會以 postgres 使用者角色連線至伺服器,並顯示 postgres=# 指令提示。現在可以執行 psql 指令和 SQL 查詢。

如要退出 psql,請執行 \q 指令。

從相同叢集中的其他 Pod 連線

根據預設,執行 AlloyDB Omni 資料庫叢集的 Pod 允許來自相同 Kubernetes 叢集內的連線。建議您使用 TLS 保護所有連至資料庫叢集的連線。

如要提供自己的伺服器 TLS 憑證,請在設定資料庫叢集時指定憑證密鑰。如未指定憑證密鑰,AlloyDB Omni Kubernetes 運算子會根據自行簽署憑證授權單位簽署的憑證,為您建立 TLS 憑證密鑰。無論是哪種情況,您都可以要求資料庫用戶端 Pod 在每次連線時驗證憑證,確保 TLS 安全。

如要使用 TLS 建立安全資料庫連線,請執行下列動作:

  • 在定義建立用戶端連線的 Pod 的資訊清單中,指定 TLS 憑證 Secret。可以是下列任一值:

    • 您已在 Kubernetes 叢集中建立的 TLS 憑證 Secret。如要進一步瞭解如何在 Kubernetes 中使用 TLS 憑證 Secret,請參閱「TLS Secret」。

    • 如果您未在資料庫叢集的資訊清單中指定 TLS 密鑰,AlloyDB Omni Kubernetes 運算子會為您建立預設憑證密鑰,名稱為 DB_CLUSTER_NAME-ca-cert。

  • 用戶端 Pod 連線至資料庫叢集時,必須先定義下列環境變數,再建立連線:

    • 將 PGSSLMODE 設為 "verify-ca"。

    • 將 PGSSLROOTCERT 設為用戶端 Pod 檔案系統上相關 ca.crt 檔案的絕對路徑。

下列資訊清單範例說明如何設定安裝官方 PostgreSQL 映像檔的 Pod,其中包含 psql 指令列用戶端。範例假設您未在定義資料庫叢集的資訊清單中指定任何 TLS 密鑰設定。因此,AlloyDB Omni Kubernetes 運算子會使用預設 TLS 密鑰,名稱為 dbs-al-cert-DB_CLUSTER_NAME。

apiVersion: v1
kind: Pod
metadata:
  name: postgres
  namespace: DB_CLUSTER_NAMESPACE
spec:
  containers:
  - image: "docker.io/library/postgres:latest"
    command:
      - "sleep"
      - "604800"
    imagePullPolicy: IfNotPresent
    name: db-client
    volumeMounts:
    - name: ca-cert
      mountPath: "/DB_CLUSTER_NAME-ca-cert"
      readOnly: true
  volumes:
  - name: ca-cert
    secret:
      secretName: dbs-al-cert-DB_CLUSTER_NAME
  restartPolicy: Always

更改下列內容:

  • DB_CLUSTER_NAME:資料庫叢集的名稱。也就是建立資料庫叢集時宣告的名稱。
  • DB_CLUSTER_NAMESPACE (選用):建立資料庫叢集的命名空間。

現在,您可以按照下列步驟,使用 Pod 安全地連線至資料庫叢集:

  1. 判斷資料庫叢集的內部 IP 位址:

    kubectl get dbclusters.alloydbomni.dbadmin.goog -n DB_CLUSTER_NAMESPACE

    輸出結果會與下列內容相似:

    NAME              PRIMARYENDPOINT   PRIMARYPHASE   DBCLUSTERPHASE
    DB_CLUSTER_NAME   IP_ADDRESS        Ready          DBClusterReady
    

    記下 IP_ADDRESS,並在後續步驟中使用。

  2. 使用 psql 從用戶端 Pod 連線至叢集,並設定環境變數,啟用及要求 TLS 憑證驗證:

    kubectl exec -it postgres -n DB_CLUSTER_NAMESPACE -- bash
    PGSSLMODE="verify-ca" PGSSLROOTCERT=/DB_CLUSTER_NAME-ca-cert/ca.crt psql -h IP_ADDRESS -p 5432 -U postgres -d postgres

    將 IP_ADDRESS 替換成您在上一個步驟中判斷的內部 IP 位址。

  3. 選用。自訂資料庫接受連入連線要求的通訊埠。如要覆寫預設通訊埠 5432,請使用 port 屬性。 值必須介於 1024 至 65535 之間。

    以下範例說明自訂資料庫通訊埠時,AlloyDB Omni 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.4.0"
      primarySpec:
        port: 6789
        adminUser:
          passwordRef:
            name: db-pw-dbcluster-sample
        resources:
          memory: 5Gi
          cpu: 1
          disks:
           - name: DataDisk
             size: 10Gi
    

後續步驟