Red Hat OpenShift#
EDB Postgres Distributed for Kubernetesは、Webインターフェイスを使用してOpenShiftにインストールできる認定オペレーターです。
EDBプライベートレジストリへのアクセスの保証#
重要
オペレーターイメージとオペランドイメージの両方が保存されているプライベートEDBリポジトリへのアクセスが必要です。アクセスには、有効な EDB subscription plan が必要です。詳細は、 EDB's private image registries を参照してください。
OpenShiftインストールは、プルシークレットを使用して、プライベートリポジトリに保持されているオペランドおよびオペレータイメージにアクセスします。
プライベートリポジトリへの資格情報を取得したら、 openshift-operators
名前空間に2つのプルシークレットを作成する必要があります。
EDB Postgres Distributed for Kubernetesオペレータイメージの
pgd-operator-pull-secretpostgresql-operator-pull-secretKubernetesオペレーターイメージのEDB Postgresの場合
oc create コマンドを使用して、各シークレットを作成できます。
oc create secret docker-registry pgd-operator-pull-secret \
-n openshift-operators --docker-server=docker.enterprisedb.com \
--docker-username="@@REPOSITORY@@" \
--docker-password="@@TOKEN@@"
oc create secret docker-registry postgresql-operator-pull-secret \
-n openshift-operators --docker-server=docker.enterprisedb.com \
--docker-username="@@REPOSITORY@@" \
--docker-password="@@TOKEN@@"
そこで
@@REPOSITORY@@は、 Which repository to choose? で説明したように、リポジトリの名前です。@@TOKEN@@は、 トークンの取得方法 で説明したように、EDBアカウントのリポジトリトークンです。
オペレーターのインストール#
EDB Postgres Distributed for Kubernetesオペレーターは、OpenShiftダッシュボードからRed Hat OperatorHubで直接見つけることができます。
ハンバーガーメニューから、 Operators > OperatorHub を選択します。
Webコンソールで、検索ボックスを使用してリストをフィルタリングします。たとえば、
EDBまたはpgdと入力します。
Install OperatorHub#
オペレーターに関する情報を読み、 Install を選択します。
Operator Installationページで、次を選択します。
インストールモード。 クラスター全体のインストール は、現在唯一のモードです。
更新チャンネル現在 プレビュー
Red Hatによって認定された、オペレーターの新しいリリースのマーケットプレイスでの入手可能性後の承認戦略
自動 : OLMは、実行中のオペレーターを新しいバージョンにアップグレードします。
マニュアル OpenShiftは、 Installed Operators セクションでの承認を必要とすることにより、人間の介入を待機します。
クラスター全体のインストール#
クラスター全体のインストールでは、オペレーターをデフォルトのopenshift-operators
名前空間にインストールし、クラスター内のすべてのプロジェクトで使用できるようにOpenShiftに指示します。これは、Kubernetes用のEDB
Postgres
Distributedをインストールするためのデフォルトであり、通常推奨されるアプローチです。
Webコンソールから、 インストールモード で、 クラスター上のすべての名前空間デフォルト) を選択します。
インストールすると、オペレーターはすべての名前空間で可視されます。インストール中に問題が発生した場合は、他のOpenShiftオペレーターの場合と同様に、
Workloads > Pods ページのopenshift-operators
プロジェクトのポッドのログを確認します。
PGDクラスターの作成#
OpenShiftによるインストール後、オペレーターのデプロイメントはopenshift-operators
名前空間にあります。 EDB Postgres for
Kubernetesオペレーターpostgresql-operator-controller-manager
と同様に、cert-managerオペレーターもインストールされたことに注意してください。
$ oc get deployments -n openshift-operators
NAME READY UP-TO-DATE AVAILABLE AGE
cert-manager-operator 1/1 1 1 11m
pgd-operator-controller-manager 1/1 1 1 11m
postgresql-operator-controller-manager-1-20-0 1/1 1 1 23h
…
pgd-operator-controller-manager
展開の準備ができていることを確認した後、PGDクラスターの作成を開始できます。
EDB Postgres Distributed for
Kubernetesリポジトリには、いくつかの役立つサンプルファイルが含まれています。
PGDクラスターは、専用の名前空間/プロジェクトに展開する必要があります。デフォルトの名前空間は予約されています。
最初に、新しい名前空間を作成し、 self-signed certificate `Issuer <Examples of configuration>` をデプロイします
その中で
oc create ns my-namespace
oc apply -n my-namespace -f \
https://raw.githubusercontent.com/EnterpriseDB/edb-postgres-for-kubernetes-charts/main/hack/samples/issuer-selfsigned.yaml
単一リージョンの単一のOpenShiftクラスターでPGDを使用する#
これで、2つのデータグループと1つの監視グループを含むフレキシブル3リージョンなどのPGDクラスターを展開できるようになりました。ファイルにYAMLマニフェストがあります。
apiVersion: pgd.k8s.enterprisedb.io/v1beta1
kind: PGDGroup
metadata:
name: region-a
spec:
instances: 2
proxyInstances: 2
witnessInstances: 1
pgd:
parentGroup:
name: world
create: true
discovery:
- host: region-a-group
- host: region-b-group
- host: region-c-group
cnp:
storage:
size: 1Gi
connectivity:
dns:
additional:
- domain: alternate.domain
- domain: my.domain
hostSuffix: -dc1
tls:
mode: verify-ca
clientCert:
caCertSecret: client-ca-key-pair
certManager:
spec:
issuerRef:
name: client-ca-issuer
kind: Issuer
group: cert-manager.io
serverCert:
caCertSecret: server-ca-key-pair
certManager:
spec:
issuerRef:
name: server-ca-issuer
kind: Issuer
group: cert-manager.io
- --
apiVersion: pgd.k8s.enterprisedb.io/v1beta1
kind: PGDGroup
metadata:
name: region-b
spec:
instances: 2
proxyInstances: 2
witnessInstances: 1
pgd:
parentGroup:
name: world
discovery:
- host: region-a-group
- host: region-b-group
- host: region-c-group
cnp:
storage:
size: 1Gi
connectivity:
tls:
mode: verify-ca
clientCert:
caCertSecret: client-ca-key-pair
certManager:
spec:
issuerRef:
name: client-ca-issuer
kind: Issuer
group: cert-manager.io
serverCert:
caCertSecret: server-ca-key-pair
certManager:
spec:
issuerRef:
name: server-ca-issuer
kind: Issuer
group: cert-manager.io
- --
apiVersion: pgd.k8s.enterprisedb.io/v1beta1
kind: PGDGroup
metadata:
name: region-c
spec:
instances: 0
proxyInstances: 0
witnessInstances: 1
pgd:
parentGroup:
name: world
discovery:
- host: region-a-group
- host: region-b-group
- host: region-c-group
cnp:
storage:
size: 1Gi
connectivity:
tls:
mode: verify-ca
clientCert:
caCertSecret: client-ca-key-pair
certManager:
spec:
issuerRef:
name: client-ca-issuer
kind: Issuer
group: cert-manager.io
serverCert:
caCertSecret: server-ca-key-pair
certManager:
spec:
issuerRef:
name: server-ca-issuer
kind: Issuer
group: cert-manager.io
oc apply -f flexible_3regions.yaml -n my-namespace
PGDグループが表示され始めます。
$ oc get pgdgroups -n my-namespace
NAME DATA INSTANCES WITNESS INSTANCES PHASE PHASE DETAILS AGE
region-a 2 1 PGDGroup - Healthy 23m
region-b 2 1 PGDGroup - Healthy 23m
region-c 0 1 PGDGroup - Healthy 23m
複数のリージョンの複数のOpenShiftクラスターでPGDを使用する#
複数のリージョンの複数のOpenShiftクラスターにPGDをデプロイするには、最初にPGDグループが相互に通信する方法を確立する必要があります。複数のOpenShiftクラスターでこれを実現する推奨方法は、 Submariner を使用することです。接続の構成は、このドキュメントの範囲外です。ただし、OpenShiftクラスター間の接続を確立すると、互いに同期したPGDグループを展開できます。
警告
この例では、各OpenShiftクラスターに1つずつ、3つのPGDグループを展開し、Submarinerを使用してOpenShiftクラスター間の接続を確立していることを前提としています。
単一リージョンの単一のOpenShiftクラスターでPGDを使用する と同様に、この例では、2つのデータPGDグループと1つの監視グループを作成します。その例とは対照的に、各グループは別のOpenShiftクラスターに存在します。
OpenShiftクラスター間の基本的な接続に加えて、各OpenShiftクラスターに、他のOpenShiftクラスターによって信頼される認証局が含まれていることを確認する必要があります。この条件は、PGDグループが相互に通信するために必要です。
OpenShiftクラスターはすべて同じ認証局を使用するか、各クラスターが独自の認証局を持つことができます。いずれの場合も、各OpenShiftクラスターの証明書が他のOpenShiftクラスターの認証局を信頼していることを確認する必要があります。
この例では、すべてのOpenShiftクラスターのすべての証明書に使用される単一の認証局を持つ自己署名証明書を使用します。
この例では、OpenShiftクラスターをOpenShift Cluster A
、OpenShift Cluster B 、およびOpenShift Cluster C
として参照します。 OpenShiftでは、OperatorHubからのEDB Postgres
Distributed for
Kubernetesオペレーターのインストールに、cert-managerオペレーターのインストールが含まれます。
cert-managerで証明書を作成および管理することをお勧めします。
OpenShift Cluster Aを保持する名前空間を作成し、その中に自己署名証明書に必要なオブジェクトも作成します。 PGDオペレーターとcert-managerがインストールされていると仮定して、 self-signed certificate `Issuer <Examples of configuration>`
その名前空間で。
oc create ns pgd-group
oc apply -n pgd-group -f \
https://raw.githubusercontent.com/EnterpriseDB/edb-postgres-for-kubernetes-charts/main/hack/samples/issuer-selfsigned.yaml
しばらくして、cert-managerは発行者と証明書を作成します。
pgd-group名前空間には、server-ca-key-pairおよびclient-ca-key-pairの2つのシークレットがあります。これらのシークレットには、サーバーおよびクライアント認証局の証明書とプライベートキーが含まれています。issuer-selfsigned.yamlマニフェストを適用する前に、これらのシークレットを他のOpenShiftクラスターにコピーする必要があります。oc get secretコマンドを使用して、シークレットの内容を取得できます。
oc get secret server-ca-key-pair -n pgd-group -o yaml > server-ca-key-pair.yaml
oc get secret client-ca-key-pair -n pgd-group -o yaml > client-ca-key-pair.yaml
これらのシークレットuid、リソースバージョン、タイムスタンプなどから
OpenShift Cluster Aに固有のコンテンツを削除した後、コンテキストをOpenShift Cluster Bに切り替えることができます。次に、名前空間を作成し、その中にシークレットを作成して、のみにissuer-selfsigned.yamlファイルを適用します。
oc create ns pgd-group
oc apply -n pgd-group -f server-ca-key-pair.yaml
oc apply -n pgd-group -f client-ca-key-pair.yaml
oc apply -n pgd-group -f \
https://raw.githubusercontent.com/EnterpriseDB/edb-postgres-for-kubernetes-charts/main/hack/samples/issuer-selfsigned.yaml
コンテキストを
OpenShift Cluster Cに切り替え、クラスターBで従った同じプロセスを繰り返すことができます。
oc create ns pgd-group
oc apply -n pgd-group -f server-ca-key-pair.yaml
oc apply -n pgd-group -f client-ca-key-pair.yaml
oc apply -n pgd-group -f \
https://raw.githubusercontent.com/EnterpriseDB/edb-postgres-for-kubernetes-charts/main/hack/samples/issuer-selfsigned.yaml
OpenShift Cluster Aで、region-aと呼ばれる最初のPGDグループを作成できます。 PGDグループのYAMLマニフェストは次のとおりです。
apiVersion: pgd.k8s.enterprisedb.io/v1beta1
kind: PGDGroup
metadata:
name: region-a
spec:
instances: 2
proxyInstances: 2
witnessInstances: 1
pgd:
parentGroup:
name: world
create: true
discovery:
- host: region-a-group.pgd-group.svc.clusterset.local
- host: region-b-group.pgd-group.svc.clusterset.local
- host: region-c-group.pgd-group.svc.clusterset.local
cnp:
storage:
size: 1Gi
connectivity:
dns:
domain: "pgd-group.svc.clusterset.local"
additional:
- domain: alternate.domain
- domain: my.domain
hostSuffix: -dc1
tls:
mode: verify-ca
clientCert:
caCertSecret: client-ca-key-pair
certManager:
spec:
issuerRef:
name: client-ca-issuer
kind: Issuer
group: cert-manager.io
serverCert:
caCertSecret: server-ca-key-pair
certManager:
spec:
issuerRef:
name: server-ca-issuer
kind: Issuer
group: cert-manager.io
重要
discovery セクションのホスト名の形式は、単一クラスターの例とは異なります。これは、SubmarinerがOpenShiftクラスターの接続に使用されており、Submarinerが`<service>.<ns>.svc.clusterset.local` ドメインを使用してOpenShiftクラスター間のトラフィックをルーティングするためです。 region-a-group は、 region-a という名前のPGDグループ用に作成されるサービスの名前です。
region-aPGDグループYAMLを適用します。
oc apply -f region-a.yaml -n pgd-group
コンテキストを
OpenShift Cluster Bに切り替え、2番目のPGDグループを作成できます。クラスターBのPGDグループのYAMLは次のとおりです。唯一の違いはmetadata.nameです。
apiVersion: pgd.k8s.enterprisedb.io/v1beta1
kind: PGDGroup
metadata:
name: region-b
spec:
instances: 2
proxyInstances: 2
witnessInstances: 1
pgd:
parentGroup:
name: world
discovery:
- host: region-a-group.pgd-group.svc.clusterset.local
- host: region-b-group.pgd-group.svc.clusterset.local
- host: region-c-group.pgd-group.svc.clusterset.local
cnp:
storage:
size: 1Gi
connectivity:
dns:
domain: "pgd-group.svc.clusterset.local"
tls:
mode: verify-ca
clientCert:
caCertSecret: client-ca-key-pair
certManager:
spec:
issuerRef:
name: client-ca-issuer
kind: Issuer
group: cert-manager.io
serverCert:
caCertSecret: server-ca-key-pair
certManager:
spec:
issuerRef:
name: server-ca-issuer
kind: Issuer
group: cert-manager.io
region-bPGDグループYAMLを適用します。
oc apply -f region-b.yaml -n pgd-group
コンテキストを
OpenShift Cluster Cに切り替え、3番目のPGDグループを作成できます。 PGDグループのYAMLは次のとおりです。
apiVersion: pgd.k8s.enterprisedb.io/v1beta1
kind: PGDGroup
metadata:
name: region-c
spec:
instances: 0
proxyInstances: 0
witnessInstances: 1
pgd:
parentGroup:
name: world
discovery:
- host: region-a-group.pgd-group.svc.clusterset.local
- host: region-b-group.pgd-group.svc.clusterset.local
- host: region-c-group.pgd-group.svc.clusterset.local
cnp:
storage:
size: 1Gi
connectivity:
dns:
domain: "pgd-group.svc.clusterset.local"
tls:
mode: verify-ca
clientCert:
caCertSecret: client-ca-key-pair
certManager:
spec:
issuerRef:
name: client-ca-issuer
kind: Issuer
group: cert-manager.io
serverCert:
caCertSecret: server-ca-key-pair
certManager:
spec:
issuerRef:
name: server-ca-issuer
kind: Issuer
group: cert-manager.io
region-cPGDグループYAMLを適用します。
oc apply -f region-c.yaml -n pgd-group
これで、コンテキストをOpenShift Cluster A
に戻し、そこでPGDグループのステータスを確認できます。
oc get pgdgroup region-a -n pgd-group
PGDグループはフェーズPGD - Waiting for node discovery にあります。
各OpenShiftクラスターでPGDグループを作成し、各ノードのサービスを作成した後、サービスを他のOpenShiftクラスターに公開する必要があります。これはさまざまな方法で行うことができます。
- サブマリーナーを使用している場合、
subctl を使用して行うことができます
コマンド。 -group または-node
サフィックスを持つpgd-group 名前空間のサービスごとに
subctl export service
コマンドを実行します。これは、各クラスターで次のbash for
ループを実行することにより実行できます。
for service in $(oc get svc -n pgd-group --no-headers -o custom-columns="NAME:.metadata.name" | grep -E (-group|-node)$); do
subctl export service $service -n pgd-group
done
数分後、ステータスはPGDグループが正常であることを示します。各PGDグループが正常な状態になると、2つのデータノード
region-a またはregion-b のいずれかでapp
データベースに書き込むことができます。データは他のデータノードに複製されます。