AlloyDB Omni を実行して接続する

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

始める前に

単一サーバー

このページのコマンドのほとんどは、AlloyDB Omni CLI を使用します。

このコマンドライン ツールをマシンにインストールするには、AlloyDB Omni CLI をインストールするをご覧ください。

Kubernetes

このページで説明するタスクを実行するには、Kubernetes クラスタに AlloyDB Omni Kubernetes オペレーターをインストールする必要があります。

このページの Kubernetes 固有の手順は、Kubernetes の操作に関する基本的な知識があることを前提としています。

AlloyDB Omni を実行する

AlloyDB Omni の実行手順は、AlloyDB Omni を単一サーバーのコンテナで実行するか、Kubernetes クラスタで実行するかによって異なります。このセクションでは、これらのデプロイ スタイルに応じて手順を説明します。

単一サーバー

AlloyDB Omni をインストールすると、alloydb-dataplane というシステム サービスが設定されます。このサービスは、マシンが起動するたびに起動するように構成されています。

AlloyDB Omni の基本的な制御とモニタリングには、次のセクションで説明するように sudo alloydb コマンドを使用します。

Kubernetes

AlloyDB Omni を制御してモニタリングするには、次のセクションで説明するように、Kubernetes クラスタのマニフェストを更新します。

AlloyDB Omni を起動する

単一サーバー

sudo alloydb database-server start

テスト接続を実行するには、コンテナ化された psql を使用して接続するをご覧ください。

Kubernetes

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

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

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

AlloyDB Omni のステータスを確認する

単一サーバー

sudo alloydb database-server status

Kubernetes

kubectl get dbclusters.alloydbomni.dbadmin.goog DB_CLUSTER_NAME

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

AlloyDB Omni を停止する

単一サーバー

sudo alloydb database-server stop

Kubernetes

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

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

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

起動時の起動を無効にする

次のコマンドを実行すると、マシンの起動時に AlloyDB Omni が自動的に起動しなくなります。

単一サーバー

sudo systemctl disable alloydb-dataplane

Kubernetes

このタスクは、AlloyDB Omni Kubernetes オペレーターを使用する場合は適用されません。

起動時の起動を再度有効にする

単一サーバー

sudo systemctl enable alloydb-dataplane

Kubernetes

このタスクは、AlloyDB Omni Kubernetes オペレーターを使用する場合は適用されません。

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

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

任意の PostgreSQL 互換ソフトウェアを使用して、コンテナの外部から AlloyDB Omni に接続することもできます。

Kubernetes クラスタで実行されている AlloyDB Omni データベース クラスタに接続する方法については、Kubernetes で実行されている AlloyDB Omni に接続するをご覧ください。

コンテナ化された psql を使用して接続する

独自のコンテナ化された psql のコピーを使用して AlloyDB Omni データベース サーバーに接続するには、次のコマンドを実行します。

単一サーバー

docker exec -it pg-service psql -h localhost -U postgres

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

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

独自のアプリケーションを使用して接続する

PostgreSQL で動作するアプリケーションは、変更なしで AlloyDB Omni でも動作します。

AlloyDB Omni データベース サーバーに接続するには、PostgreSQL 互換のクライアントまたはコード ライブラリを使用して、AlloyDB Omni を実行しているマシンのポート 5432(デフォルトの PostgreSQL データベース サーバー ポート)に接続します。

これは、AlloyDB Omni コンテナが、実行されているマシンの同じポートに独自のポート 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 -- /bin/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 アドレスに置き換えます。

次のステップ