Red Hat OpenShift#

EDB Postgres Distributed for Kubernetesは、Webインターフェイスを使用してOpenShiftにインストールできる認定オペレーターです。

EDBプライベートレジストリへのアクセスの保証#

重要

オペレーターイメージとオペランドイメージの両方が保存されているプライベートEDBリポジトリへのアクセスが必要です。アクセスには、有効な EDB subscription plan が必要です。詳細は、 Accessing EDB private image registries を参照してください。

OpenShiftインストールは、プルシークレットを使用して、プライベートリポジトリに保持されているオペランドおよびオペレータイメージにアクセスします。

プライベートリポジトリへの資格情報を取得したら、 openshift-operators 名前空間に2つのプルシークレットを作成する必要があります。

  • EDB Postgres Distributed for Kubernetesオペレータイメージのpgd-operator-pull-secret

  • postgresql-operator-pull-secret Kubernetesオペレーターイメージの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@@"

そこで

オペレーターのインストール#

EDB Postgres Distributed for Kubernetesオペレーターは、OpenShiftダッシュボードからRed Hat OperatorHubで直接見つけることができます。

  1. ハンバーガーメニューから、 Operators > OperatorHub を選択します。

  2. Webコンソールで、検索ボックスを使用してリストをフィルタリングします。たとえば、 EDB またはpgd と入力します。

Install OperatorHub

Install OperatorHub#

  1. オペレーターに関する情報を読み、 Install を選択します。

  2. 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で証明書を作成および管理することをお勧めします。

  1. 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
  1. しばらくして、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
  1. これらのシークレット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
  1. コンテキストを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
  1. 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グループ用に作成されるサービスの名前です。

  1. region-a PGDグループYAMLを適用します。

oc apply -f region-a.yaml -n pgd-group
  1. コンテキストを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
  1. region-b PGDグループYAMLを適用します。

oc apply -f region-b.yaml -n pgd-group
  1. コンテキストを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
  1. region-c PGDグループ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 データベースに書き込むことができます。データは他のデータノードに複製されます。

チャンネル#

EDB Postgres Distributed for Kubernetesオペレーターは、単一の OLM channel で利用できます

v1.0.0からstable という名前になりました。すべてのリリースはこのチャンネルで利用できます。

依存関係#

OpenShiftのEDB Postgres Distributed for KubernetesオペレーターPGD4Kには、次の依存関係があります。

  • KubernetesオペレーターPG4K用EDB Postgresリリースv1.0.1以降では、 PGD4KはPG4KのLTSリリースを使用するように制約されます。

  • cert-manager リリースv1.1.1以降では、Red Hat OpenShiftのcert-managerオペレーターとCommunityのcert-managerオペレーターの両方がサポートされています。

各リリースでサポートされているバージョンの詳細については、 サポートされているバージョン を参照してください。これらの依存関係が満たされる場合にのみ、PGD4Kオペレーターをインストールまたはアップグレードできることに注意してください。