このページでは、Kubernetes クラスタにデプロイした後の AlloyDB Omni の実行方法と接続方法について説明します。
このページの Kubernetes 特有の手順は、Kubernetes の操作に関する基本的な知識があることを前提としています。
AlloyDB Omni を実行する
AlloyDB Omni の実行手順は、AlloyDB Omni を Kubernetes クラスタで実行するかどうかによって異なります。
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
(省略可): このデータベース クラスタを作成した Namespace(例:my-db-cluster-namespace
)。
AlloyDB Omni のステータスを確認する
kubectl get dbclusters.alloydbomni.dbadmin.goog DB_CLUSTER_NAME -n DB_CLUSTER_NAMESPACE
次のように置き換えます。
DB_CLUSTER_NAME
: データベース クラスタの名前。DB_CLUSTER_NAMESPACE
(省略可): データベース クラスタを作成した 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
は、実際のデータベース クラスタの名前に置き換えます。これは、作成時に宣言したデータベース クラスタ名と同じです。
デフォルトの Namespace にデータベース クラスタを作成した場合は、DB_CLUSTER_NAMESPACE
の設定をスキップできます。
コマンドを入力すると、データベース サーバーがパスワードを要求します。データベース クラスタを作成するときに Kubernetes Secret として指定した Base64 でエンコードされたパスワードを入力します。たとえば、Q2hhbmdlTWUxMjM=
の Secret を使用してデータベース クラスタを作成した場合、ここで使用するログイン パスワードは ChangeMe123
です。
AlloyDB Omni オペレーターにより、postgres
ユーザーロールとしてサーバーに接続され、postgres=#
コマンド プロンプトが表示されます。これで、psql
コマンドと SQL クエリを実行できるようになりました。
psql
を終了するには、\q
コマンドを実行します。
同じクラスタ内の別の Pod から接続する
AlloyDB Omni データベース クラスタを実行している Pod は、デフォルトで同じ Kubernetes クラスタ内からの接続を許可します。ベスト プラクティスとして、TLS を使用してデータベース クラスタへのすべての接続を保護することをおすすめします。
独自のサーバー TLS 証明書を指定するには、データベース クラスタを構成するときに証明書 Secret を指定します。証明書 Secret を指定しない場合、AlloyDB Omni Kubernetes オペレーターは、自己署名認証局によって署名された証明書に基づいて TLS 証明書 Secret を作成します。どちらの場合も、データベース クライアント Pod ですべての接続で証明書の検証を必須にすることで、TLS セキュリティを確保できます。
TLS を使用して安全なデータベース接続を確立するには、次の操作を行います。
クライアント接続を行う Pod を定義するマニフェストで、TLS 証明書 Secret を指定します。これは次のいずれかになります。
Kubernetes クラスタですでに作成した TLS 証明書 Secret。Kubernetes で TLS 証明書 Secret を操作する方法については、TLS Secret をご覧ください。
データベース クラスタのマニフェストの一部として TLS Secret を指定しない場合、AlloyDB Omni Kubernetes オペレーターが作成するデフォルトの証明書 Secret(
DB_CLUSTER_NAME-ca-cert
という名前)。
クライアント Pod がデータベース クラスタに接続するたびに、接続を確立する前に次の環境変数を定義する必要があります。
PGSSLMODE
を"verify-ca"
に設定します。PGSSLROOTCERT
を、関連するca.crt
ファイルのクライアント Pod のファイルシステム上の絶対パスに設定します。
次のマニフェストの例は、psql
コマンドライン クライアントを含む公式の PostgreSQL イメージをインストールする Pod の構成方法を示しています。この例では、データベース クラスタを定義するマニフェストに TLS Secret 構成を指定していないことを前提としています。したがって、AlloyDB Omni Kubernetes オペレーターは、dbs-al-cert-DB_CLUSTER_NAME
という名前のデフォルトの TLS Secret を使用します。
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
(省略可): データベース クラスタを作成した Namespace。
これで、次の手順で Pod を使用してデータベース クラスタに安全に接続できるようになりました。
データベース クラスタの内部 IP アドレスを確認します。
kubectl get dbclusters.alloydbomni.dbadmin.goog -n DB_CLUSTER_NAMESPACE
出力は次のようになります。
NAME PRIMARYENDPOINT PRIMARYPHASE DBCLUSTERPHASE DB_CLUSTER_NAME IP_ADDRESS Ready DBClusterReady
IP_ADDRESS
をメモします。これは、次のステップで使用します。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 アドレスに置き換えます。