このページでは、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
マニフェスト定義で isStopped
を false
に設定して、停止したデータベース クラスタを起動します。
これは、コマンドラインで 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
データベース クラスタを停止するには、マニフェスト定義で isStopped
を true
に設定します。
これは、コマンドラインで 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 を使用してデータベース クラスタに安全に接続できます。
データベース クラスタの内部 IP アドレスを確認します。
kubectl get dbclusters.alloydbomni.dbadmin.goog
出力は次のようになります。
NAME PRIMARYENDPOINT PRIMARYPHASE DBCLUSTERPHASE DB_CLUSTER_NAME IP_ADDRESS Ready DBClusterReady
IP_ADDRESS
をメモして、次のステップで使用します。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 アドレスに置き換えます。