1.2. 可选:在 Tekton Hub 中使用自定义数据库

集群管理员可以将自定义数据库用于 Tekton Hub,而不是 Operator 安装的默认 PostgreSQL 数据库。您可以在安装时关联自定义数据库,并将其与 Tekton Hub 提供的 db-migrationapiui 接口一起使用。或者,即使安装了默认数据库,也可以将自定义数据库与 Tekton Hub 关联。

流程

  1. 在目标命名空间中创建名为 tekton-hub-db 的 secret,其键如下:

    • POSTGRES_HOST
    • POSTGRES_DB
    • POSTGRES_USER
    • POSTGRES_PASSWORD
    • POSTGRES_PORT

      示例:自定义数据库 secret

      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>
      ...

      注意

      默认目标命名空间是 openshift-pipelines

  2. TektonHub CR 中,将 database secret 属性的值设置为 tekton-hub-db

    示例:添加自定义数据库 secret

    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 可能需要一些时间才能获得 steady 状态。

    $ 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。
  • 创建一个 Postgres 实例,用于启动 Crunchy 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 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 主机的 secret 值。

    示例:对 Crunchy Postgres 主机的 secret 值进行编码

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

  8. 在目标命名空间中创建名为 tekton-hub-db 的 secret,其键如下:

    • POSTGRES_HOST
    • POSTGRES_DB
    • POSTGRES_USER
    • POSTGRES_PASSWORD
    • POSTGRES_PORT

      示例:自定义数据库 secret

      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'
      ...

    注意

    默认目标命名空间是 openshift-pipelines

  9. TektonHub CR 中,将 database secret 属性的值设置为 tekton-hub-db

    示例:添加自定义数据库 secret

    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 可能需要一些时间才能获得 steady 状态。

    $ 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>

    Example

    $ 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>

    Example

    $ 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>

    Example

    $ 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 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. 验证目标命名空间中名为 tekton-hub-db 的 secret 具有以下键:

    • POSTGRES_HOST
    • POSTGRES_DB
    • POSTGRES_USER
    • POSTGRES_PASSWORD
    • POSTGRES_PORT

      示例:自定义数据库 secret

      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 字段的值编码为 secret。您可以使用以下示例解码 Crunchy Postgres 主机的值。

      示例:对 Crunchy Postgres 主机的 secret 值进行编码

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

  12. 验证在 TektonHub CR 中,数据库 secret 属性的值是否为 tekton-hub-db

    示例: TektonHub CR,带有数据库 secret 的名称

    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 可能需要一些时间才能获得 steady 状态。

    $ 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/