1.2. オプション: Tekton Hub でのカスタムデータベースの使用

クラスター管理者は、Operator によってインストールされたデフォルトの PostgreSQL データベースの代わりに、カスタムデータベースを Tekton Hub で使用できます。インストール時にカスタムデータベースを関連付けて、Tekton Hub が提供する db-migrationapi、および ui インターフェイスで使用できます。または、デフォルトデータベースでのインストールが完了した後でも、カスタムデータベースを Tekton Hub に関連付けることができます。

手順

  1. 次のキーを使用して、ターゲット namespace に tekton-hub-db という名前のシークレットを作成します。

    • POSTGRES_HOST
    • POSTGRES_DB
    • POSTGRES_USER
    • POSTGRES_PASSWORD
    • POSTGRES_PORT

      例: カスタムデータベースシークレット

      apiVersion: v1
      kind: Secret
      metadata:
        name: tekton-hub-db
        labels:
          app: tekton-hub-db
      type: Opaque
      stringData:
        POSTGRES_HOST: <The name of the host of the database>
        POSTGRES_DB: <Name of the database>
        POSTGRES_USER: <username>
        POSTGRES_PASSWORD: <password>
        POSTGRES_PORT: <The port that the database is listening on>
      ...

      注記

      デフォルトのターゲット namespace は openshift-pipelines です。

  2. TektonHub CR で、データベースのシークレット属性の値を tekton-hub-db に設定します。

    例: カスタムデータベースシークレットの追加

    apiVersion: operator.tekton.dev/v1alpha1
    kind: TektonHub
    metadata:
      name: hub
    spec:
      targetNamespace: openshift-pipelines
      db:
        secret: tekton-hub-db
      api:
        hubConfigUrl: https://raw.githubusercontent.com/tektoncd/hub/main/config.yaml
        catalogRefreshInterval: 30m
    ...

  3. 更新された TektonHub CR を使用して、カスタムデータベースを Tekton Hub に関連付けます。

    1. クラスターに Tekton Hub をインストールするときにカスタムデータベースを関連付ける場合は、更新された TektonHub CR を適用します。

      $ oc apply -f <tekton-hub-cr>.yaml
    2. または、Tekton Hub のインストールが完了した後にカスタムデータベースを関連付ける場合は、既存の TektonHub CR を更新された TektonHub CR に置き換えます。

      $ oc replace -f <tekton-hub-cr>.yaml
  4. インストールのステータスを確認します。TektonHub CR が安定状態になるまでに時間がかかる場合があります。

    $ oc get tektonhub.operator.tekton.dev

    出力例

    NAME   VERSION   READY   REASON   APIURL                    UIURL
    hub    v1.9.0    True             https://api.route.url/    https://ui.route.url/

1.2.1. オプション: Crunchy Postgres データベースと Tekton Hub のインストール

クラスター管理者は、Crunchy Postgres データベースをインストールし、デフォルトデータベースの代わりにそれを使用するように、Tekton Hub を設定できます。

前提条件

  • Operator Hub から Crunchy Postgres Operator をインストールする。
  • Crunchy Postgres データベースを起動する Postgres インスタンスを作成する。

手順

  1. Crunchy Postgres Pod に入ります。

    例: test-instance1-m7hh-0 Pod に入ります

    $ oc exec -it -n openshift-operators test-instance1-m7hh-0 -- /bin/sh
    
    Defaulting container name to database.
    Use 'oc describe pod/test-instance1-m7hh-0 -n openshift-operators' to see all of the containers in this pod.
    sh-4.4$ psql -U postgres
    psql (14.4)
    Type "help" for help.

  2. pg_hba.conf ファイルを見つけます。

    postgres=# SHOW hba_file;
             hba_file
    --------------------------
     /pgdata/pg14/pg_hba.conf
    (1 row)
    
    postgres=#
  3. データベースを終了します。
  4. pg_hba.conf ファイルに、すべての受信接続にアクセスするために必要なエントリー host all all 0.0.0.0/0 md5 があるかどうかを確認します。さらに、pg_hba.conf ファイルの末尾にエントリーを追加します。

    例: pg_hba.conf ファイル

    sh-4.4$ cat /pgdata/pg14/pg_hba.conf
    
    # Do not edit this file manually!
    # It will be overwritten by Patroni!
    local all "postgres" peer
    hostssl replication "_crunchyrepl" all cert
    hostssl "postgres" "_crunchyrepl" all cert
    host all "_crunchyrepl" all reject
    hostssl all all all md5
    host  all  all 0.0.0.0/0 md5

  5. pg_hba.conf ファイルを保存し、データベースをリロードします。

    sh-4.4$ psql -U postgres
    psql (14.4)
    Type "help" for help.
    
    postgres=# SHOW hba_file;
             hba_file
    --------------------------
     /pgdata/pg14/pg_hba.conf
    (1 row)
    
    postgres=# SELECT pg_reload_conf();
     pg_reload_conf
    ----------------
     t
    (1 row)
  6. データベースを終了します。
  7. Crunchy Postgres ホストのシークレット値をデコードします。

    例: Crunchy Postgres ホストのシークレット値をデコードします

    $ echo 'aGlwcG8tcHJpbWFyeS5vcGVuc2hpZnQtb3BlcmF0b3JzLnN2YyA=' | base64 --decode
    test-primary.openshift-operators.svc

  8. 次のキーを使用して、ターゲット namespace に tekton-hub-db という名前のシークレットを作成します。

    • POSTGRES_HOST
    • POSTGRES_DB
    • POSTGRES_USER
    • POSTGRES_PASSWORD
    • POSTGRES_PORT

      例: カスタムデータベースシークレット

      apiVersion: v1
      kind: Secret
      metadata:
        name: tekton-hub-db
        labels:
          app: tekton-hub-db
      type: Opaque
      stringData:
        POSTGRES_HOST: test-primary.openshift-operators.svc
        POSTGRES_DB: test
        POSTGRES_USER: <username>
        POSTGRES_PASSWORD: <password>
        POSTGRES_PORT: '5432'
      ...

    注記

    デフォルトのターゲット namespace は openshift-pipelines です。

  9. TektonHub CR で、データベースのシークレット属性の値を tekton-hub-db に設定します。

    例: カスタムデータベースシークレットの追加

    apiVersion: operator.tekton.dev/v1alpha1
    kind: TektonHub
    metadata:
      name: hub
    spec:
      targetNamespace: openshift-pipelines
      db:
        secret: tekton-hub-db
    ...

  10. 更新された TektonHub CR を使用して、カスタムデータベースを Tekton Hub に関連付けます。

    $ oc apply -f <tekton-hub-cr>.yaml
  11. インストールのステータスを確認します。TektonHub CR が安定状態になるまでは、時間がかかる場合があります。

    $ oc get tektonhub.operator.tekton.dev

    出力例

    NAME   VERSION   READY   REASON   APIURL                    UIURL
    hub    v1.9.0    True             https://api.route.url/    https://ui.route.url/

1.2.2. オプション: Tekton Hub データを既存の Crunchy Postgres データベースに移行する

Tekton Hub は、カスタムデータベースとして Crunchy Postgres の使用をサポートしています。デフォルトデータベースを備えたプリインストールされた Tekton Hub の場合、クラスター管理者は、Tekton Hub データを内部またはデフォルトのデータベースから外部の Crunchy Postgres データベースに移行した後、Crunchy Postgres をカスタムデータベースとして使用できます。

手順

  1. 内部またはデフォルトのデータベースから Pod 内のファイルに既存のデータをダンプします。

    例: データのダンプ

    $ pg_dump -Ft -h localhost -U postgres hub -f /tmp/hub.dump

  2. データダンプを含むファイルをローカルシステムにコピーします。

    コマンドの形式

    $ oc cp -n <namespace> <podName>:<path-to-hub.dump> <path-to-local-system>

    $ oc cp -n openshift-pipelines tekton-hub-db-7d6d888c67-p7mdr:/tmp/hub.dump /home/test_user/Downloads/hub.dump

  3. データダンプを含むファイルをローカルシステムから外部の Crunchy Postgres データベースを実行している Pod にコピーします。

    コマンドの形式

    $ oc cp -n <namespace> <path-to-local-system> <podName>:<path-to-hub.dump>

    $ oc cp -n openshift-operators /home/test_user/Downloads/hub.dump test-instance1-spnz-0:/tmp/hub.dump

  4. Crunchy Postgres データベース内のデータを復元します。

    コマンドの形式

    $ pg_restore -d <database-name> -h localhost -U postgres <path-where-file-is-copied>

    $ pg_restore -d test -h localhost -U postgres /tmp/hub.dump

  5. Crunchy Postgres Pod に入ります。例: test-instance1-m7hh-0 Pod に入ります

    $ oc exec -it -n openshift-operators test-instance1-m7hh-0 -- /bin/sh
    
    Defaulting container name to database.
    Use 'oc describe pod/test-instance1-m7hh-0 -n openshift-operators' to see all of the containers in this pod.
    sh-4.4$ psql -U postgres
    psql (14.4)
    Type "help" for help.
  6. pg_hba.conf ファイルを見つけます。

    postgres=# SHOW hba_file;
             hba_file
    --------------------------
     /pgdata/pg14/pg_hba.conf
    (1 row)
    
    postgres=#
  7. データベースを終了します。
  8. pg_hba.conf ファイルに、すべての受信接続にアクセスするために必要なエントリー host all all 0.0.0.0/0 md5 があるか確認します。必要に応じて、pg_hba.conf ファイルの末尾にエントリーを追加します。

    例: pg_hba.conf ファイル

    sh-4.4$ cat /pgdata/pg14/pg_hba.conf
    
    # Do not edit this file manually!
    # It will be overwritten by Patroni!
    local all "postgres" peer
    hostssl replication "_crunchyrepl" all cert
    hostssl "postgres" "_crunchyrepl" all cert
    host all "_crunchyrepl" all reject
    hostssl all all all md5
    host  all  all 0.0.0.0/0 md5

  9. pg_hba.conf ファイルを保存し、データベースをリロードします。

    sh-4.4$ psql -U postgres
    psql (14.4)
    Type "help" for help.
    
    postgres=# SHOW hba_file;
             hba_file
    --------------------------
     /pgdata/pg14/pg_hba.conf
    (1 row)
    
    postgres=# SELECT pg_reload_conf();
     pg_reload_conf
    ----------------
     t
    (1 row)
  10. データベースを終了します。
  11. ターゲット namespace の tekton-hub-db という名前のシークレットに次のキーがあることを確認します。

    • POSTGRES_HOST
    • POSTGRES_DB
    • POSTGRES_USER
    • POSTGRES_PASSWORD
    • POSTGRES_PORT

      例: カスタムデータベースシークレット

      apiVersion: v1
      kind: Secret
      metadata:
        name: tekton-hub-db
        labels:
          app: tekton-hub-db
      type: Opaque
      stringData:
        POSTGRES_HOST: test-primary.openshift-operators.svc
        POSTGRES_DB: test
        POSTGRES_USER: test
        POSTGRES_PASSWORD: woXOisU5>ocJiTF7y{{;1[Q(
        POSTGRES_PORT: '5432'
      ...

      注記

      POSTGRES_HOST フィールドの値はシークレットとしてエンコードされます。次の例を使用して、Crunchy Postgres ホストの値をデコードできます。

      例: Crunchy Postgres ホストのシークレット値をデコードします

      $ echo 'aGlwcG8tcHJpbWFyeS5vcGVuc2hpZnQtb3BlcmF0b3JzLnN2YyA=' | base64 --decode
      test-primary.openshift-operators.svc

  12. TektonHub CR で、データベースのシークレット属性の値が tekton-hub-db であることを確認します。

    例: データベースシークレットの名前を含む TektonHub CR

    apiVersion: operator.tekton.dev/v1alpha1
    kind: TektonHub
    metadata:
      name: hub
    spec:
      targetNamespace: openshift-pipelines
      db:
        secret: tekton-hub-db
    ...

  13. 外部の Crunchy Postgres データベースを Tekton Hub に関連付けるには、既存の TektonHub CR を更新された TektonHub CR に置き換えます。

    $ oc replace -f <updated-tekton-hub-cr>.yaml
  14. Tekton Hub のステータスを確認します。更新された TektonHub CR が安定状態になるまでに時間がかかる場合があります。

    $ oc get tektonhub.operator.tekton.dev

    出力例

    NAME   VERSION   READY   REASON   APIURL                    UIURL
    hub    v1.9.0    True             https://api.route.url/    https://ui.route.url/