執行並連線至 AlloyDB Omni

選取說明文件版本:

本頁說明如何執行 AlloyDB Omni 並連線至該服務,前提是您已在本機安裝部署至 Kubernetes 叢集

本頁的 Kubernetes 專屬操作說明假設您已熟悉 Kubernetes 的運作方式。

執行 AlloyDB Omni

執行 AlloyDB Omni 的程序取決於您是在單一伺服器上的容器中執行 AlloyDB Omni,還是在 Kubernetes 叢集上執行。本節會根據這些部署方式,分別提供操作說明。

啟動 AlloyDB Omni

單一伺服器

如要啟動已停止的 AlloyDB Omni 容器,請執行docker container start 指令podman container start 指令

Docker

docker container start CONTAINER_NAME

CONTAINER_NAME 替換為您在安裝 AlloyDB Omni 容器時指派的名稱。

Podman

podman container start CONTAINER_NAME

CONTAINER_NAME 替換為您在安裝 AlloyDB Omni 容器時指派的名稱。

Kubernetes

如要啟動已停止的資料庫叢集,請在資訊清單定義中將 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 的狀態

單一伺服器

如要檢查所有執行中容器的狀態,請執行docker container ls 指令podman container ls 指令

Docker

docker container ls

Podman

podman container ls

如果 AlloyDB Omni 容器正在執行,輸出資料表的 NAMES 欄會顯示容器名稱。對應的資料列會摘要顯示容器的狀態。

如果容器名稱未顯示在 NAMES 欄中,表示 AlloyDB Omni 未執行。

Kubernetes

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

更改下列內容:

停止 AlloyDB Omni

單一伺服器

如要停止 AlloyDB Omni 容器,請執行docker container stop 指令podman container stop 指令

Docker

 docker container stop CONTAINER_NAME

CONTAINER_NAME 替換為您在安裝 AlloyDB Omni 容器時指派的名稱。

Podman

 podman container stop CONTAINER_NAME

CONTAINER_NAME 替換為您在安裝 AlloyDB Omni 容器時指派的名稱。

Kubernetes

如要停止資料庫叢集,請在資訊清單定義中將 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:這個資料庫叢集的名稱,例如 my-db-cluster
  • DB_CLUSTER_NAMESPACE (選用):您建立這個資料庫叢集的命名空間,例如 my-db-cluster-namespace

連線至在單一伺服器上執行的 AlloyDB Omni

AlloyDB Omni 容器包含自己的 psql 副本,可讓您開啟與資料庫伺服器的互動式 SQL Shell 工作階段。

您也可以使用所選的 PostgreSQL 相容軟體,從容器外部連線至 AlloyDB Omni。

如要瞭解如何連線至 Kubernetes 叢集上執行的 AlloyDB Omni 資料庫叢集,請參閱「連線至 Kubernetes 上執行的 AlloyDB Omni」。

使用容器化的 psql 建立連線

如要使用 psql 的容器化副本連線至 AlloyDB Omni 資料庫伺服器,請執行下列指令:

Docker

  docker exec -it CONTAINER_NAME psql -U postgres

CONTAINER_NAME 替換為您在安裝 AlloyDB Omni 容器時指派的名稱。

Podman

  podman exec -it CONTAINER_NAME psql -U postgres

CONTAINER_NAME 替換為您在安裝 AlloyDB Omni 容器時指派的名稱。

這項指令會以 postgres 使用者角色連線至伺服器,並顯示 postgres=# 命令提示字元。您現在可以執行 psql 指令和 SQL 查詢。

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

使用自己的應用程式連線

凡是能與 PostgreSQL 搭配使用的應用程式,也都能與 AlloyDB Omni 搭配使用,完全不需要修改。

如要連線至 AlloyDB Omni 資料庫伺服器,請在啟動 AlloyDB Omni 時,將 --network=host-p 5432:5432 新增至 docker runpodman run 指令,將 AlloyDB Omni Docker 容器的網路公開至主機。

如要選取自訂通訊埠編號,請在啟動 AlloyDB Omni 時使用 -p [HOST_PORT]:5432。然後使用任何與 PostgreSQL 相容的用戶端或程式碼程式庫,連線至通訊埠 5432 或您指定的自訂通訊埠編號。

連線至資料庫伺服器後,您可以使用標準 PostgreSQL 通訊協定,透過 DML 和 SQL 查詢定義、查詢及修改資料庫。

由於 AlloyDB Omni 是在您自己的環境中執行,因此您可以控管連線至 AlloyDB Omni 的方式。包括根據應用程式需求,允許或限制對這項服務的網路存取權,就像使用一般 PostgreSQL 伺服器一樣。

連線至 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 Secret 形式提供的 Base64 編碼密碼。舉例來說,如果您使用 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 憑證密碼。可以是下列其中一項:

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

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

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

    • PGSSLMODE 設為 "verify-ca"

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

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

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 位址。

後續步驟