AlloyDB Omni を実行して接続する

このページでは、AlloyDB Omni をマシンにインストールするか、Kubernetes クラスタにデプロイした後に、AlloyDB Omni を実行して接続する方法について説明します。

このページの 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

マニフェスト定義で isStoppedfalse に設定して、停止したデータベース クラスタを起動します。

これは、コマンドラインで kubectl を使用して実行できます。

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

DB_CLUSTER_NAME は、このデータベース クラスタの名前に置き換えます(例: my-db-cluster)。

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

DB_CLUSTER_NAME は、データベース クラスタの名前に置き換えます。

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

データベース クラスタを停止するには、マニフェスト定義で isStoppedtrue に設定します。

これは、コマンドラインで kubectl を使用して実行できます。

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

DB_CLUSTER_NAME は、このデータベース クラスタの名前に置き換えます(例: my-db-cluster)。

単一サーバーで実行されている AlloyDB Omni に接続する

AlloyDB Omni コンテナには、データベース サーバーを使用してインタラクティブな SQL シェル セッションを開くことができる psql のコピーが含まれています。

任意の 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 の起動時に docker run または podman run コマンドに --network=host または -p 5432:5432 を追加して、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 -o jsonpath='{.items[0].metadata.name}'`
kubectl exec -ti $DBPOD -c database -- psql -h localhost -U postgres

DB_CLUSTER_NAME は、データベース クラスタの名前に置き換えます。これは、作成時に宣言したデータベース クラスタ名と同じです。

コマンドを入力すると、データベース サーバーがパスワードを要求します。データベース クラスタを作成するときに Kubernetes Secret として指定した Base64 でエンコードされたパスワードを入力します。たとえば、Q2hhbmdlTWUxMjM= のシークレットを使用してデータベース クラスタを作成した場合、ここで使用するログイン パスワードは ChangeMe123 です。

AlloyDB Omni オペレーターは、postgres ユーザーロールとしてサーバーに接続し、postgres=# コマンド プロンプトを表示します。これで、psql コマンドと SQL クエリを実行できるようになりました。

psql を終了するには、\q コマンドを実行します。

同じクラスタ内の別の Pod から接続する

AlloyDB Omni データベース クラスタを実行している Pod は、デフォルトで同じ Kubernetes クラスタ内からの接続を許可します。ベスト プラクティスとして、TLS を使用してデータベース クラスタへのすべての接続を保護することをおすすめします。

独自のサーバー TLS 証明書を指定するには、データベース クラスタを構成するときに証明書シークレットを指定します。証明書シークレットを指定しない場合、AlloyDB Omni Kubernetes Operator は、自己署名認証局によって署名された証明書に基づいて TLS 証明書シークレットを作成します。どちらの場合も、データベース クライアント Pod ですべての接続で証明書の検証を必須にすることで、TLS セキュリティを確保できます。

TLS を使用して安全なデータベース接続を確立するには、次の操作を行います。

  • クライアント接続を行う Pod を定義するマニフェストで、TLS 証明書シークレットを指定します。これは次のいずれかになります。

    • Kubernetes クラスタですでに作成した TLS 証明書シークレット。Kubernetes で TLS 証明書シークレットを操作する方法については、TLS Secret をご覧ください。

    • データベース クラスタのマニフェストの一部として TLS Secret を指定しない場合、AlloyDB Omni Kubernetes Operator が作成するデフォルトの証明書 Secret(DB_CLUSTER_NAME-ca-cert という名前)。

  • クライアント Pod がデータベース クラスタに接続するたびに、接続を確立する前に次の環境変数を定義する必要があります。

    • PGSSLMODE"verify-ca" に設定する。

    • PGSSLROOTCERT を、関連する ca.crt ファイルのクライアント Pod のファイル システム上の絶対パスに設定します。

次のマニフェストの例は、psql コマンドライン クライアントを含む公式の PostgreSQL イメージをインストールする Pod を構成する方法を示しています。この例では、データベース クラスタを定義するマニフェストに TLS シークレット構成を指定していないことを前提としています。したがって、AlloyDB Omni Kubernetes オペレーターは、dbs-al-cert-DB_CLUSTER_NAME という名前のデフォルトの TLS Secret を使用します。

apiVersion: v1
kind: Pod
metadata:
  name: postgres
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 は、データベース クラスタの名前に置き換えます。これは、作成時に宣言したデータベース クラスタ名と同じです。

次の手順で、Pod を使用してデータベース クラスタに安全に接続できます。

  1. データベース クラスタの内部 IP アドレスを確認します。

    kubectl get dbclusters.alloydbomni.dbadmin.goog

    出力は次のようになります。

    NAME              PRIMARYENDPOINT   PRIMARYPHASE   DBCLUSTERPHASE
    DB_CLUSTER_NAME   IP_ADDRESS        Ready          DBClusterReady
    

    IP_ADDRESS をメモして、次のステップで使用します。

  2. psql を使用してクライアント Pod からクラスタに接続し、TLS 証明書の検証を有効にして必要な環境変数を設定します。

    kubectl exec -it postgres -- 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 アドレスに置き換えます。

次のステップ