配置 Red Hat Developer Hub


Red Hat Developer Hub 1.6

添加自定义配置映射和 secret 以将 Red Hat Developer Hub 实例配置为在您的 IT 生态系统中工作

Red Hat Customer Content Services

摘要

了解如何通过添加自定义配置映射和 secret,为生产环境配置 Red Hat Developer Hub (RHDH)以在您的 IT 生态系统中进行工作。

前言

了解如何通过添加自定义配置映射和 secret,为生产环境配置 Red Hat Developer Hub (RHDH)以在您的 IT 生态系统中进行工作。

要配置 Red Hat Developer Hub,请使用以下方法,它们被广泛用来配置 Red Hat OpenShift Container Platform 应用程序:

  • 使用配置映射挂载文件和目录。
  • 使用机密注入环境变量。

学习如何将这些方法应用到 Developer Hub:

1.1. 置备自定义 Red Hat Developer Hub 配置

要配置 Red Hat Developer Hub,在运行 Red Hat Developer Hub 前,将自定义 Red Hat Developer Hub 配置映射和 secret 置备为 Red Hat OpenShift Container Platform。

提示

您可以跳过这一步,以使用默认配置映射和 secret 运行 Developer Hub。在 Developer Hub 重启时,您对此配置的更改可能会恢复。

先决条件

  • 通过使用 OpenShift CLI (oc),您可以访问开发人员权限,可以访问一个旨在包含 Developer Hub 实例的 OpenShift Container Platform 集群。

流程

  1. 编写自定义 & lt;my_product_secrets > .txt 文件,将 secret 置备为 OpenShift Container Platform secret 中的环境变量值,而不是在配置文件中清除文本。它以 KEY=value 形式每行包含一个 secret。

  2. 编写自定义 app-config.yaml 文件。这是主要的 Developer Hub 配置文件。您需要自定义 app-config.yaml 文件来避免 Developer Hub 安装程序在升级过程中恢复用户编辑。当自定义 app-config.yaml 文件为空时,Developer Hub 将使用默认值。

    • 要在 OpenShift Container Platform 上使用 Red Hat Developer Hub Operator 准备部署,您可以从一个空文件开始。
    • 要使用 Red Hat Developer Hub Helm Chart 或 Kubernetes 准备部署,请在 app-config.yaml 文件中的相关字段中输入 Developer Hub 基础 URL,以确保 Developer Hub 正常工作。基本 URL 是 Developer Hub 用户在访问 Developer Hub 时看到的内容。相关字段在 appbackend 部分中是 baseUrl,在 backend.cors 子部分中是 origin

      例 1.1. 在 app-config.yaml中配置 baseUrl

      app:
        title: Red Hat Developer Hub
        baseUrl: https://<my_developer_hub_url>
      
      backend:
        auth:
          externalAccess:
            - type: legacy
              options:
                subject: legacy-default-config
                secret: "${BACKEND_SECRET}"
        baseUrl: https://<my_developer_hub_url>
        cors:
          origin: https://<my_developer_hub_url>
      Copy to Clipboard Toggle word wrap
    • 另外,还可输入您的配置,例如:

  3. 为 OpenShift Container Platform 集群置备自定义配置文件。

    1. 创建包含 Developer Hub 实例的 < my-rhdh-project > 项目。

      $ oc create namespace my-rhdh-project
      Copy to Clipboard Toggle word wrap

      或者,使用 Web 控制台创建项目

    2. 将您的 app-config.yaml 文件置备到 <my-rhdh- project> 项目中的 my-rhdh-app- config 配置映射。

      $ oc create configmap my-rhdh-app-config --from-file=app-config.yaml --namespace=my-rhdh-project
      Copy to Clipboard Toggle word wrap

      或者,使用 Web 控制台创建配置映射

    3. 将 &lt ;my_product_secrets&gt; .txt 文件置备为 & lt;my -rhdh-project> 项目中的 <my_product_secrets &gt; secret。

      $ oc create secret generic <my_product_secrets> --from-file=<my_product_secrets>.txt --namespace=my-rhdh-project
      Copy to Clipboard Toggle word wrap

      或者,使用 Web 控制台创建机密

注意

<my_product_secrets > 是您首选的 Developer Hub secret 名称,在 Developer Hub 中指定 secret 配置的标识符。

后续步骤

考虑置备额外的配置映射和 secret:

要使用 Developer Hub Operator 使用自定义配置运行 Red Hat Developer Hub,请创建 Backstage 自定义资源(CR):

  • 挂载自定义配置映射中置备的文件。
  • 注入自定义 secret 中置备的环境变量。

先决条件

流程

  1. my-rhdh-custom-resource.yaml 文件中编写您的 Backstage CR,以使用您的自定义配置映射和 secret。

    例 1.2. 最少的 my-rhdh-custom-resource.yaml 自定义资源示例

    apiVersion: rhdh.redhat.com/v1alpha3
    kind: Backstage
    metadata:
      name: my-rhdh-custom-resource
    spec:
      application:
        appConfig:
          mountPath: /opt/app-root/src
          configMaps:
             - name: my-rhdh-app-config
        extraEnvs:
          secrets:
             - name: <my_product_secrets>
        extraFiles:
          mountPath: /opt/app-root/src
        route:
          enabled: true
      database:
        enableLocalDb: true
    Copy to Clipboard Toggle word wrap

    例 1.3. my-rhdh-custom-resource.yaml 自定义资源示例,带有动态插件和 RBAC 策略配置映射,以及外部 PostgreSQL 数据库 secret。

    apiVersion: rhdh.redhat.com/v1alpha3
    kind: Backstage
    metadata:
      name: <my-rhdh-custom-resource>
    spec:
      application:
        appConfig:
          mountPath: /opt/app-root/src
          configMaps:
             - name: my-rhdh-app-config
             - name: rbac-policies
        dynamicPluginsConfigMapName: dynamic-plugins-rhdh
        extraEnvs:
          secrets:
             - name: <my_product_secrets>
             - name: my-rhdh-database-secrets
        extraFiles:
          mountPath: /opt/app-root/src
          secrets:
            - name: my-rhdh-database-certificates-secrets
              key: postgres-crt.pem, postgres-ca.pem, postgres-key.key
        route:
          enabled: true
      database:
        enableLocalDb: false
    Copy to Clipboard Toggle word wrap
    必填字段
    不需要字段。您可以创建一个空的 Backstage CR,并使用默认配置运行 Developer Hub。
    可选字段
    spec.application.appConfig.configMaps
    输入您的配置映射名称列表。

    .mount 文件在 my-rhdh-app-config 配置映射中。

    spec:
      application:
        appConfig:
          mountPath: /opt/app-root/src
          configMaps:
             - name: my-rhdh-app-config
    Copy to Clipboard Toggle word wrap

    例 1.4. 在 my-rhdh-app-configrbac-policies 配置映射中挂载文件。

    spec:
      application:
        appConfig:
          mountPath: /opt/app-root/src
          configMaps:
             - name: my-rhdh-app-config
             - name: rbac-policies
    Copy to Clipboard Toggle word wrap
    spec.application.extraEnvs.envs

    (可选)输入不是 secret 的额外环境变量,如 代理环境变量

    例 1.5. 注入 HTTP_PROXYHTTPS_PROXYNO_PROXY 环境变量。

    spec:
      application:
        extraEnvs:
          envs:
            - name: HTTP_PROXY
              value: 'http://10.10.10.105:3128'
            - name: HTTPS_PROXY
              value: 'http://10.10.10.106:3128'
            - name: NO_PROXY
              value: 'localhost,example.org'
    Copy to Clipboard Toggle word wrap
    spec.application.extraEnvs.secrets

    输入环境变量 secret 名称列表。

    例 1.6. 在 Red Hat Developer Hub secret 中注入环境变量

    spec:
      application:
        extraEnvs:
          secrets:
             - name: <my_product_secrets>
    Copy to Clipboard Toggle word wrap

    例 1.7. 在 Red Hat Developer Hub 和 my-rhdh-database-secrets secret 中注入环境变量

    spec:
      application:
        extraEnvs:
          secrets:
             - name: <my_product_secrets>
             - name: my-rhdh-database-secrets
    Copy to Clipboard Toggle word wrap
注意

<my_product_secrets > 是您首选的 Developer Hub secret 名称,在 Developer Hub 中指定 secret 配置的标识符。

spec.application.extraFiles.secrets

输入您的证书文件 secret 名称和文件列表。

挂载 postgres-crt.pempostgres-ca.pempostgres-key.key 文件,该文件包含在 my-rhdh-database-certificates-secrets secret 中

spec:
  application:
    extraFiles:
      mountPath: /opt/app-root/src
      secrets:
        - name: my-rhdh-database-certificates-secrets
          key: postgres-crt.pem, postgres-ca.pem, postgres-key.key
Copy to Clipboard Toggle word wrap

spec.database.enableLocalDb

启用或禁用本地 PostgreSQL 数据库。

禁用本地 PostgreSQL 数据库生成以使用外部 postgreSQL 数据库

spec:
  database:
    enableLocalDb: false
Copy to Clipboard Toggle word wrap

在开发环境中,使用本地 PostgreSQL 数据库

spec:
  database:
    enableLocalDb: true
Copy to Clipboard Toggle word wrap

spec.deployment

(可选) 输入您的部署配置

  1. 应用 Backstage CR 来启动或更新 Developer Hub 实例。

    $ oc apply --filename=my-rhdh-custom-resource.yaml --namespace=my-rhdh-project
    Copy to Clipboard Toggle word wrap

您可以使用 Developer Hub Operator 将额外文件(如 ConfigMap 或 Secret)挂载到首选位置的容器。

mountPath 字段指定 ConfigMap 或 Secret 挂载的位置。mount 的行为(无论是包含还是排除 subPath )取决于 keymountPath 字段的规格。

  • 如果没有指定 keymountPath :每个键或值都挂载为带有 subPath 的文件名或内容。
  • 如果使用或不使用 mountPath 指定密钥:指定的 key 或 value 使用 subPath 挂载。
  • 如果只指定 mountPath :包含所有键或值的目录,但没有 subPath
注意
  • OpenShift Container Platform 不会自动更新使用 subPath 挂载的卷。默认情况下,RHDH Operator 会监控这些 ConfigMap 或 Secret,并在发生更改时刷新 RHDH Pod。
  • 为了安全起见,Red Hat Developer Hub 不授予 Operator Service Account 对 Secret 的读取访问权限。因此,不支持在不指定 mountPath 和 key 的情况下挂载 Secret 的文件。

先决条件

流程

  1. 在 OpenShift Container Platform 中,使用以下 YAML 代码创建 ConfigMap 或 Secret:

    例 1.8. 最小 my-project-configmap ConfigMap 示例

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: my-project-configmap
    data:
      file11.txt: |
        My file11 content
      file 12.txt: |
        My file12 content
    Copy to Clipboard Toggle word wrap

    例 1.9. 最小 Red Hat Developer Hub Secret 示例

    apiVersion: v1
    kind: Secret
    metadata:
      name: <my_product_secrets>
    StringData:
      secret11.txt: |
        secret-content
    Copy to Clipboard Toggle word wrap

    如需更多信息,请参阅置备和使用您的自定义 Red Hat Developer Hub 配置

  2. configMaps 名称的值设置为 ConfigMap 或 secret 名称,设置为 Backstage CR 中的 Secret 名称。例如:

    spec:
      application:
        extraFiles:
          mountPath: /my/path
          configMaps:
            - name: my-project-configmap
              key: file12.txt
              mountPath: /my/my-rhdh-config-map/path
          secrets:
            - name: <my_product_secrets>
              key: secret11.txt
              mountPath: /my/my-rhdh-secret/path
    Copy to Clipboard Toggle word wrap
注意

<my_product_secrets > 是您首选的 Developer Hub secret 名称,在 Developer Hub 中指定 secret 配置的标识符。

您可以使用 Red Hat Developer Hub Helm Chart 将自定义应用程序配置文件添加到 OpenShift Container Platform 实例中。

先决条件

流程

  1. 将 Helm 配置为使用 Developer Hub 中的自定义配置文件。

    1. 进入 Helm 选项卡查看 Helm 发行版本列表。
    2. 点击您要使用的 Helm 发行版本上的 overflow 菜单,然后选择 Upgrade
    3. 使用 YAML 视图来 编辑 Helm 配置。
    4. 设置 upstream.backstage.extraAppConfig.configMapRefupstream.backstage.extraAppConfig.filename 参数的值,如下所示:

      Helm 配置摘录

      upstream:
        backstage:
          extraAppConfig:
            - configMapRef: my-rhdh-app-config
              filename: app-config.yaml
      Copy to Clipboard Toggle word wrap

    5. 单击 Upgrade

后续步骤

  • 使用 Helm 安装 Developer Hub。

第 2 章 配置外部 PostgreSQL 数据库

作为管理员,您可以在 Red Hat Developer Hub 中配置和使用外部 PostgreSQL 数据库。您可以使用 PostgreSQL 证书文件使用 Operator 或 Helm Chart 配置外部 PostgreSQL 实例。

注意

Developer Hub 支持外部 PostgreSQL 数据库的配置。您可以执行维护活动,如备份数据或为外部 PostgreSQL 数据库配置高可用性(HA)。

默认情况下,Red Hat Developer Hub operator 或 Helm Chart 会创建一个本地 PostgreSQL 数据库。但是,此配置不适用于生产环境。对于生产环境部署,禁用创建本地数据库,并将 Developer Hub 配置为改为连接到外部 PostgreSQL 实例。

2.1. 使用 Operator 配置外部 PostgreSQL 实例

您可以使用 Red Hat Developer Hub Operator 配置外部 PostgreSQL 实例。默认情况下,Operator 会在部署 RHDH 实例的同一命名空间中创建和管理一个 PostgreSQL 本地实例。但是,您可以更改此默认设置来配置外部 PostgreSQL 数据库服务器,例如 Amazon Web Services (AWS)相关数据库服务(RDS)或 Azure 数据库。

先决条件

  • 您使用受支持的 PostgreSQL 版本。如需更多信息,请参阅 产品生命周期页面
  • 您有以下详情:

    • db-host :注意 PostgreSQL 实例域名系统(DNS)或 IP 地址
    • db-port :注意 PostgreSQL 实例端口号,如 5432
    • 用户名 :注意要连接到 PostgreSQL 实例的用户名
    • 密码 :注意连接到 PostgreSQL 实例的密码
  • 已安装 Red Hat Developer Hub Operator。
  • 可选: 您有一个 CA 证书、传输层安全(TLS)私钥和 TLS 证书,以便您可以使用 TLS 协议保护数据库连接。如需更多信息,请参阅 PostgreSQL 供应商文档。
注意

默认情况下,Developer Hub 为每个插件使用一个数据库,并在未找到时自动创建它。除了 PSQL Database 特权外,您可能需要 Create Database 特权来配置外部 PostgreSQL 实例。

流程

  1. 可选:创建一个证书 secret 来使用 TLS 连接配置 PostgreSQL 实例:

    cat <<EOF | oc -n my-rhdh-project create -f -
    apiVersion: v1
    kind: Secret
    metadata:
     name: my-rhdh-database-certificates-secrets 
    1
    
    type: Opaque
    stringData:
     postgres-ca.pem: |-
      -----BEGIN CERTIFICATE-----
      <ca-certificate-key> 
    2
    
     postgres-key.key: |-
      -----BEGIN CERTIFICATE-----
      <tls-private-key> 
    3
    
     postgres-crt.pem: |-
      -----BEGIN CERTIFICATE-----
      <tls-certificate-key> 
    4
    
      # ...
    EOF
    Copy to Clipboard Toggle word wrap
    1
    提供证书 secret 的名称。
    2
    提供 CA 证书密钥。
    3
    可选:提供 TLS 私钥。
    4
    可选:提供 TLS 证书密钥。
  2. 创建凭证 secret 以与 PostgreSQL 实例连接:

    cat <<EOF | oc -n my-rhdh-project create -f -
    apiVersion: v1
    kind: Secret
    metadata:
     name: my-rhdh-database-secrets 
    1
    
    type: Opaque
    stringData: 
    2
    
     POSTGRES_PASSWORD: <password>
     POSTGRES_PORT: "<db-port>"
     POSTGRES_USER: <username>
     POSTGRES_HOST: <db-host>
     PGSSLMODE: <ssl-mode> # for TLS connection 
    3
    
     NODE_EXTRA_CA_CERTS: <abs-path-to-pem-file> # for TLS connection, e.g. /opt/app-root/src/postgres-crt.pem 
    4
    
    EOF
    Copy to Clipboard Toggle word wrap
    1
    提供凭证 secret 的名称。
    2
    提供用于连接 PostgreSQL 实例的凭证数据。
    3
    可选:根据所需的 安全套接字层(SSL)模式提供值
    4
    可选: 只有在需要 PostgreSQL 实例的 TLS 连接时才提供值。
  3. 创建 Backstage 自定义资源(CR):

    cat <<EOF | oc -n my-rhdh-project create -f -
    apiVersion: rhdh.redhat.com/v1alpha3
    kind: Backstage
    metadata:
      name: <backstage-instance-name>
    spec:
      database:
        enableLocalDb: false 
    1
    
      application:
        extraFiles:
          mountPath: <path> # e g /opt/app-root/src
          secrets:
            - name: my-rhdh-database-certificates-secrets 
    2
    
              key: postgres-crt.pem, postgres-ca.pem, postgres-key.key # key name as in my-rhdh-database-certificates-secrets Secret
        extraEnvs:
          secrets:
            - name: my-rhdh-database-secrets 
    3
    
            # ...
    Copy to Clipboard Toggle word wrap
    1
    enableLocalDb 参数的值设置为 false,以禁用创建本地 PostgreSQL 实例。
    2
    如果您配置了 TLS 连接,请提供证书 secret 的名称。
    3
    提供您创建的凭证 secret 的名称。
    注意

    Backstage CR 中列出的环境变量与 Operator 默认配置一起工作。如果更改了 Operator 默认配置,您必须相应地重新配置 Backstage CR。

  4. Backstage CR 应用到已部署 Developer Hub 实例的命名空间。

2.2. 使用 Helm Chart 配置外部 PostgreSQL 实例

您可以使用 Helm Chart 配置外部 PostgreSQL 实例。默认情况下,Helm Chart 会在部署 RHDH 实例的同一命名空间中创建和管理 PostgreSQL 本地实例。但是,您可以更改此默认设置来配置外部 PostgreSQL 数据库服务器,例如 Amazon Web Services (AWS)相关数据库服务(RDS)或 Azure 数据库。

先决条件

  • 您使用受支持的 PostgreSQL 版本。如需更多信息,请参阅 产品生命周期页面
  • 您有以下详情:

    • db-host :注意 PostgreSQL 实例域名系统(DNS)或 IP 地址
    • db-port :注意 PostgreSQL 实例端口号,如 5432
    • 用户名 :注意要连接到 PostgreSQL 实例的用户名
    • 密码 :注意连接到 PostgreSQL 实例的密码
  • 已使用 Helm Chart 安装 RHDH 应用程序。
  • 可选: 您有一个 CA 证书、传输层安全(TLS)私钥和 TLS 证书,以便您可以使用 TLS 协议保护数据库连接。如需更多信息,请参阅 PostgreSQL 供应商文档。
注意

默认情况下,Developer Hub 为每个插件使用一个数据库,并在未找到时自动创建它。除了 PSQL Database 特权外,您可能需要 Create Database 特权来配置外部 PostgreSQL 实例。

流程

  1. 可选:创建一个证书 secret 来使用 TLS 连接配置 PostgreSQL 实例:

    cat <<EOF | oc -n <your-namespace> create -f -
    apiVersion: v1
    kind: Secret
    metadata:
     name: my-rhdh-database-certificates-secrets 
    1
    
    type: Opaque
    stringData:
     postgres-ca.pem: |-
      -----BEGIN CERTIFICATE-----
      <ca-certificate-key> 
    2
    
     postgres-key.key: |-
      -----BEGIN CERTIFICATE-----
      <tls-private-key> 
    3
    
     postgres-crt.pem: |-
      -----BEGIN CERTIFICATE-----
      <tls-certificate-key> 
    4
    
      # ...
    EOF
    Copy to Clipboard Toggle word wrap
    1
    提供证书 secret 的名称。
    2
    提供 CA 证书密钥。
    3
    可选:提供 TLS 私钥。
    4
    可选:提供 TLS 证书密钥。
  2. 创建凭证 secret 以与 PostgreSQL 实例连接:

    cat <<EOF | oc -n <your-namespace> create -f -
    apiVersion: v1
    kind: Secret
    metadata:
     name: my-rhdh-database-secrets 
    1
    
    type: Opaque
    stringData: 
    2
    
     POSTGRES_PASSWORD: <password>
     POSTGRES_PORT: "<db-port>"
     POSTGRES_USER: <username>
     POSTGRES_HOST: <db-host>
     PGSSLMODE: <ssl-mode> # for TLS connection 
    3
    
     NODE_EXTRA_CA_CERTS: <abs-path-to-pem-file> # for TLS connection, e.g. /opt/app-root/src/postgres-crt.pem 
    4
    
    EOF
    Copy to Clipboard Toggle word wrap
    1
    提供凭证 secret 的名称。
    2
    提供用于连接 PostgreSQL 实例的凭证数据。
    3
    可选:根据所需的 安全套接字层(SSL)模式提供值
    4
    可选: 只有在需要 PostgreSQL 实例的 TLS 连接时才提供值。
  3. 在名为 values.yaml 的 Helm 配置文件中配置 PostgreSQL 实例:

    # ...
    upstream:
      postgresql:
        enabled: false  # disable PostgreSQL instance creation 
    1
    
        auth:
          existingSecret: my-rhdh-database-secrets # inject credentials secret to Backstage 
    2
    
      backstage:
        appConfig:
          backend:
            database:
              connection:  # configure Backstage DB connection parameters
                host: ${POSTGRES_HOST}
                port: ${POSTGRES_PORT}
                user: ${POSTGRES_USER}
                password: ${POSTGRES_PASSWORD}
                ssl:
                  rejectUnauthorized: true,
                  ca:
                    $file: /opt/app-root/src/postgres-ca.pem
                  key:
                    $file: /opt/app-root/src/postgres-key.key
                  cert:
                    $file: /opt/app-root/src/postgres-crt.pem
      extraEnvVarsSecrets:
        - my-rhdh-database-secrets # inject credentials secret to Backstage 
    3
    
      extraEnvVars:
        - name: BACKEND_SECRET
          valueFrom:
            secretKeyRef:
              key: backend-secret
              name: '{{ include "janus-idp.backend-secret-name" $ }}'
      extraVolumeMounts:
        - mountPath: /opt/app-root/src/dynamic-plugins-root
          name: dynamic-plugins-root
        - mountPath: /opt/app-root/src/postgres-crt.pem
          name: postgres-crt # inject TLS certificate to Backstage cont. 
    4
    
          subPath: postgres-crt.pem
        - mountPath: /opt/app-root/src/postgres-ca.pem
          name: postgres-ca # inject CA certificate to Backstage cont. 
    5
    
          subPath: postgres-ca.pem
        - mountPath: /opt/app-root/src/postgres-key.key
          name: postgres-key # inject TLS private key to Backstage cont. 
    6
    
          subPath: postgres-key.key
      extraVolumes:
        - ephemeral:
            volumeClaimTemplate:
              spec:
                accessModes:
                  - ReadWriteOnce
                resources:
                  requests:
                    storage: 1Gi
          name: dynamic-plugins-root
        - configMap:
            defaultMode: 420
            name: dynamic-plugins
            optional: true
          name: dynamic-plugins
        - name: dynamic-plugins-npmrc
          secret:
            defaultMode: 420
            optional: true
            secretName: '{{ printf "%s-dynamic-plugins-npmrc" .Release.Name }}'
        - name: postgres-crt
          secret:
            secretName: my-rhdh-database-certificates-secrets 
    7
    
            # ...
    Copy to Clipboard Toggle word wrap
    1
    upstream.postgresql.enabled 参数的值设置为 false,以禁用创建本地 PostgreSQL 实例。
    2
    提供凭证 secret 的名称。
    3
    提供凭证 secret 的名称。
    4
    可选:仅为 TLS 连接提供 TLS 证书的名称。
    5
    可选:仅为 TLS 连接提供 CA 证书的名称。
    6
    可选:仅在 TLS 连接需要私钥时提供 TLS 私钥的名称。
    7
    如果您配置了 TLS 连接,请提供证书 secret 的名称。
  4. 在名为 values.yaml 的 Helm 配置文件中应用配置更改:

    helm upgrade -n <your-namespace> <your-deploy-name> openshift-helm-charts/redhat-developer-hub -f values.yaml --version 1.6.3
    Copy to Clipboard Toggle word wrap

默认情况下,Red Hat Developer Hub 在 PostgreSQL 数据库中托管每个插件的数据。当您获取数据库列表时,您可能会看到基于 Developer Hub 中配置的插件数量的多个数据库。您可以将托管在本地 PostgreSQL 服务器上的 RHDH 实例迁移到外部 PostgreSQL 服务,如 AWS RDS、Azure 数据库或 Crunchy 数据库。要从每个 RHDH 实例迁移数据,您可以使用 PostgreSQL 工具,如 pg_dumppsqlpgAdmin

注意

以下流程使用数据库复制脚本进行快速迁移。

先决条件

  • 您已在本地机器上安装了 pg_dumppsql 工具。
  • 对于数据导出,您有 PGSQL 用户特权,以便对本地数据库进行完整的转储。
  • 对于数据导入,您有 PGSQL admin 特权来创建外部数据库,并使用数据库转储填充。

流程

  1. 在终端中运行以下命令,为本地 PostgreSQL 数据库 pod 配置端口转发:

    oc port-forward -n <your-namespace> <pgsql-pod-name> <forward-to-port>:<forward-from-port>
    Copy to Clipboard Toggle word wrap

    其中:

    • & lt;pgsql-pod-name& gt; 变量表示 PostgreSQL pod 的名称,格式为 backstage-psql-<deployment-name>-<_index>
    • & lt;forward-to-port > 变量表示您选择的端口将 PostgreSQL 数据转发到。
    • & lt;forward-from-port > 变量表示本地 PostgreSQL 实例端口,如 5432

      示例:配置端口转发

      oc port-forward -n developer-hub backstage-psql-developer-hub-0 15432:5432
      Copy to Clipboard Toggle word wrap

  2. 复制以下 db_copy.sh 脚本,并根据您的配置编辑详情:

    #!/bin/bash
    
    to_host=<db-service-host> 
    1
    
    to_port=5432 
    2
    
    to_user=postgres 
    3
    
    
    from_host=127.0.0.1 
    4
    
    from_port=15432 
    5
    
    from_user=postgres 
    6
    
    
    allDB=("backstage_plugin_app" "backstage_plugin_auth" "backstage_plugin_catalog" "backstage_plugin_permission" "backstage_plugin_scaffolder" "backstage_plugin_search") 
    7
    
    
    for db in ${!allDB[@]};
    do
      db=${allDB[$db]}
      echo Copying database: $db
      PGPASSWORD=$TO_PSW psql -h $to_host -p $to_port -U $to_user -c "create database $db;"
      pg_dump -h $from_host -p $from_port -U $from_user -d $db | PGPASSWORD=$TO_PSW psql -h $to_host -p $to_port -U $to_user -d $db
    done
    Copy to Clipboard Toggle word wrap
    1
    目标主机名,例如 < db-instance-name>.rds.amazonaws.com
    2
    目的地端口,如 5432
    3
    目标服务器用户名,例如 postgres
    4
    源主机名,如 127.0.0.1
    5
    源端口号,如 < forward-to-port> 变量。
    6
    源服务器用户名,如 postgres
    7
    要使用双引号导入的数据库名称,例如:"backstage_plugin_ app" "backstage_plugin_auth" "backstage_plugin_catalog" "backstage_plugin_permission" "backstage_plugin_permission" "backstage_plugin_scaffolder" "backstage_plugin_search")
  3. 创建用于复制数据的目的地数据库:

    /bin/bash TO_PSW=<destination-db-password> /path/to/db_copy.sh 
    1
    Copy to Clipboard Toggle word wrap
    1
    & lt;destination-db-password > 变量表示要连接到目标数据库的密码。
    注意

    当数据复制完成后,您可以停止端口转发。有关处理大型数据库和使用压缩工具的更多信息,请参阅 PostgreSQL 网站上的 Handling Large Databases 部分。

  4. 重新配置 Backstage 自定义资源(CR)。如需更多信息,请参阅使用 Operator 配置外部 PostgreSQL 实例
  5. 在重新配置后,检查 Backstage CR 的末尾是否存在以下代码:

    # ...
    spec:
      database:
        enableLocalDb: false
      application:
      # ...
        extraFiles:
          secrets:
            - name: my-rhdh-database-certificates-secrets
              key: postgres-crt.pem # key name as in my-rhdh-database-certificates-secrets Secret
        extraEnvs:
          secrets:
            - name: my-rhdh-database-secrets
    # ...
    Copy to Clipboard Toggle word wrap
    注意

    重新配置 Backstage CR 会删除对应的 StatefulSetPod 对象,但不删除 PersistenceVolumeClaim 对象。使用以下命令删除本地 PersistenceVolumeClaim 对象:

    oc -n developer-hub delete pvc <local-psql-pvc-name>
    Copy to Clipboard Toggle word wrap

    其中,&lt ;local-psql-pvc-name&gt; 变量采用 data-<psql-pod-name> 格式。

  6. 应用配置更改。

验证

  1. 运行以下命令,验证您的 RHDH 实例是否使用迁移的数据运行,且不包含本地 PostgreSQL 数据库:

    oc get pods -n <your-namespace>
    Copy to Clipboard Toggle word wrap
  2. 检查以下详情的输出:

    • backstage-developer-hub-xxx pod 处于 running 状态。
    • backstage-psql-developer-hub-0 pod 不可用。

      您还可以使用 OpenShift Container Platform Web 控制台中的 Topology 视图来验证这些详情。

Red Hat Developer Hub Operator 会公开其自定义资源(CR)的 rhdh.redhat.com/v1alpha3 API 版本。此 CR 会公开一个通用的 spec.deployment.patch 字段,它可让您完全控制 Developer Hub Deployment 资源。此字段可以是标准 apps.Deployment Kubernetes 对象的一个片段。

流程

  1. 使用以下字段创建 Backstage CR:

Example

apiVersion: rhdh.redhat.com/v1alpha3
kind: Backstage
metadata:
  name: developer-hub
spec:
  deployment:
    patch:
      spec:
        template:
Copy to Clipboard Toggle word wrap

labels

为 Developer Hub pod 添加标签。

添加标签 my=true示例

apiVersion: rhdh.redhat.com/v1alpha3
kind: Backstage
metadata:
  name: developer-hub
spec:
  deployment:
    patch:
      spec:
        template:
          metadata:
            labels:
              my: true
Copy to Clipboard Toggle word wrap

添加名为 my-volume 的额外卷,并将它挂载到 Developer Hub 应用程序容器中的 /my/path 下。

附加卷示例

apiVersion: rhdh.redhat.com/v1alpha3
kind: Backstage
metadata:
  name: developer-hub
spec:
  deployment:
    patch:
      spec:
        template:
          spec:
            containers:
              - name: backstage-backend
                volumeMounts:
                  - mountPath: /my/path
                    name: my-volume
            volumes:
              - ephemeral:
                  volumeClaimTemplate:
                    spec:
                      storageClassName: "special"
                name: my-volume
Copy to Clipboard Toggle word wrap

将默认的 dynamic-plugins-root 卷替换为名为 dynamic-plugins-root 的持久性卷声明(PVC)。请注意 $patch: replace 指令,否则将添加新卷。

dynamic-plugins-root 卷替换示例

apiVersion: rhdh.redhat.com/v1alpha3
kind: Backstage
metadata:
  name: developer-hub
spec:
  deployment:
    patch:
      spec:
        template:
          spec:
            volumes:
              - $patch: replace
                name: dynamic-plugins-root
                persistentVolumeClaim:
                  claimName: dynamic-plugins-root
Copy to Clipboard Toggle word wrap

CPU 请求

将 Developer Hub 应用程序容器的 CPU 请求设置为 250m。

CPU 请求示例

apiVersion: rhdh.redhat.com/v1alpha3
kind: Backstage
metadata:
  name: developer-hub
spec:
  deployment:
    patch:
      spec:
        template:
          spec:
            containers:
              - name: backstage-backend
                resources:
                  requests:
                    cpu: 250m
Copy to Clipboard Toggle word wrap

my-sidecar 容器

在 Developer Hub Pod 中添加新的 my-sidecar sidecar 容器。

side car 容器示例

apiVersion: rhdh.redhat.com/v1alpha3
kind: Backstage
metadata:
  name: developer-hub
spec:
  deployment:
    patch:
      spec:
        template:
          spec:
            containers:
              - name: my-sidecar
                image: quay.io/my-org/my-sidecar:latest
Copy to Clipboard Toggle word wrap

Red Hat Developer Hub 部署由两个容器组成:一个 initContainer,用于安装 Dynamic Plugins,以及一个运行应用程序的后端容器。initContainer 默认启用 readOnlyRootFilesystem 选项。要在后端容器上启用这个选项,您必须有权通过 Helm 部署资源,或为 Operator 支持的部署创建或更新 CR。您可以使用以下方法在后端容器上手动配置 readOnlyRootFilesystem 选项:

  • Red Hat Developer Hub Operator
  • Red Hat Developer Hub Helm chart

当使用 Operator 部署 Developer Hub 时,您必须在 Backstage 自定义资源(CR)中为 部署 指定一个 补丁,它将 readOnlyRootFilesystem 选项应用到 Developer Hub 后端容器中的 securityContext 部分。

流程

  1. Backstage CR 中,添加 securityContext 规格。例如:

    spec:
      deployment:
        patch:
          spec:
            template:
              spec:
                containers:
                  - name: backstage-backend 
    1
    
                    securityContext:
                      readOnlyRootFilesystem: true
    Copy to Clipboard Toggle word wrap
    1
    Operator 默认配置中定义的主容器的名称。

流程

  1. values.yaml 文件中,将 readOnlyRootFilesystem: true 行添加到 containerSecurityContext 部分。例如:

    upstream:
      backstage:
        containerSecurityContext:
          readOnlyRootFilesystem: true
    Copy to Clipboard Toggle word wrap

第 5 章 在 Red Hat Developer Hub 中配置高可用性

高可用性(HA)是一种系统设计方法,通过消除单点故障来确保服务持续访问,即使在各个组件出现故障期间也是如此。它引入了冗余和故障转移机制,以最大程度缩短停机时间并保持运行连续性。

Red Hat Developer Hub 支持 Red Hat OpenShift Container Platform 和 Azure Kubernetes Service 上的 HA 部署。HA 部署在支持的环境中支持更具弹性和可靠的服务可用性。

在单一实例部署中,如果发生失败,无论是因为软件崩溃、硬件问题或其他意外中断,它会导致整个服务不可用、中断开发工作流和对关键资源的访问。

启用 HA 后,您可以扩展后端副本数来引入冗余。此设置可确保如果一个 pod 或组件失败,则其他组件将继续在不中断的情况下为请求提供服务。内置负载均衡器管理入口流量,并在可用的 pod 之间分发负载。同时,RHDH 后端管理并发请求,并有效地解决资源级别的冲突。

作为管理员,您可以通过调整配置文件中的副本值来配置高可用性:

  • 如果使用 Operator 安装,请在 Backstage 自定义资源中配置副本值。
  • 如果使用 Helm Chart,请在 Helm 配置中设置副本值。

使用 Operator 部署的 RHDH 实例使用 Backstage 自定义资源中的配置。在 Backstage 自定义资源中,replicas 字段的默认值为 1。如果要为高可用性配置 RHDH 实例,您必须将 副本设置为 大于 1 的值。

流程

  • Backstage 自定义资源中,将 replicas 设置为一个大于 1 的值。例如:

    apiVersion: rhdh.redhat.com/v1alpha3
    kind: Backstage
    metadata:
      name: <your_yaml_file>
    spec:
      deployment:
        patch:
          spec:
            ...
            replicas: <replicas_value> 
    1
    
            ...
    Copy to Clipboard Toggle word wrap
    1
    根据您要配置的备份实例数量来设置副本数量。

当使用 Helm Chart 部署 Developer Hub 时,您必须将 replicas 设置为在 Helm Chart 中大于 1 的值。副本 的默认值为 1

流程

要为 Developer Hub Helm Chart 配置高可用性,请完成以下步骤:

  • 在 Helm Chart 配置文件中,将 replicas 设置为一个大于 1 的值。例如:

    upstream:
      backstage:
        replicas: <replicas_value> 
    1
    Copy to Clipboard Toggle word wrap
    1
    根据您要配置的备份实例数量来设置副本数量。

在网络受限环境中,将 Red Hat Developer Hub 配置为使用代理访问远程网络资源。

您可以在启动应用程序前设置以下任意环境变量,在企业代理后面运行 Developer Hub 应用程序:

HTTP_PROXY
表示用于 HTTP 请求的代理。
HTTPS_PROXY
表示用于 HTTPS 请求的代理。
NO_PROXY
将环境变量设置为绕过特定域的代理。变量值是一个以逗号分隔的主机名或 IP 地址列表,无需代理即可访问,即使指定了代理也是如此。

6.1. 了解 NO_PROXY 排除规则

NO_PROXY 是主机名或 IP 地址的逗号分隔列表,带有可选的端口号。如果输入 URL 与 NO_PROXY 中列出的任何条目匹配,则直接请求获取该 URL,例如绕过代理设置。

注意

RHDH 中的 NO_PROXY 的默认值为 localhost,127.0.0.1。如果要覆盖它,请在列表中至少包含 localhostlocalhost:7007。否则,RHDH 后端可能会失败。

匹配遵循以下规则:

  • NO_PROXY swig 将绕过所有请求的代理。
  • 空格和逗号可以分隔 NO_PROXY 列表中的条目。例如: NO_PROXY="localhost,example.com"NO_PROXY="localhost example.com", 或 NO_PROXY="localhost, example.com" 将具有相同的效果。
  • 如果 NO_PROXY 不包含条目,配置 HTTP (S)_PROXY 设置会导致后端通过代理发送所有请求。
  • 后端不会执行 DNS 查找来确定请求是否应该绕过代理。例如,如果 DNS 将 example.com 解析为 1.2.3.4,设置 NO_PROXY=1.2.3.4 不会影响发送到 example.com 的请求。只有发送到 IP 地址 1.2.3.4 的请求才会绕过代理。
  • 如果在主机名或 IP 地址后添加端口,请求必须与 host/IP 和端口匹配,才能绕过代理。例如: NO_PROXY=example.com:1234 会将请求的代理绕过到 http (s)://example.com:1234,但不用于其他端口上的请求,如 http (s)://example.com
  • 如果您没有在主机名或 IP 地址后指定端口,则到该主机/IP 地址的所有请求都将绕过代理,而不考虑端口。例如,NO_PROXY=localhost 将绕过发送到 URL 的请求的代理,如 http (s)://localhost:7077http (s)://localhost:8888
  • CIDR 标记中的 IP 地址块无法正常工作。因此,设置 NO_PROXY=10.11.0.0/16 不会有任何效果,即使后端向该块中的 IP 地址发送请求。
  • 仅支持 IPv4 地址。::1 等 IPv6 地址将无法正常工作。
  • 通常,只有在主机名与 NO_PROXY 列表中的条目完全匹配时才会绕过代理。唯一的例外是以句点(.)或通配符(*)开头的条目。在这种情况下,如果主机名以 条目结尾,则绕过代理。
注意

如果要排除给定域及其所有子域,请列出域和通配符域。例如,您可以设置 NO_PROXY=example.com,.example.com 以绕过发送到 http (s)://example.comhttp (s)://subdomain.example.com 的请求的代理。

6.2. 在 Operator 部署中配置代理信息

对于基于 Operator 的部署,用于代理配置的方法取决于您的角色:

  • 作为有权访问 Operator 命名空间的集群管理员,您可以在 Operator 的默认 ConfigMap 文件中配置代理变量。此配置会将代理设置应用到 Operator 的所有用户。
  • 作为开发人员,您可以在自定义资源(CR)文件中配置代理变量。此配置会将代理设置应用到从 CR 创建的 RHDH 应用程序。

先决条件

  • 已安装 Red Hat Developer Hub 应用程序。

流程

  1. 根据您的角色执行以下步骤之一:

    • 作为管理员,在 Operator 的默认 ConfigMap 文件中设置代理信息:

      1. 在 default 命名空间 rhdh-operator 中搜索名为 backstage-default-config 的 ConfigMap 文件并打开它。
      2. 查找 deployment.yaml 密钥。
      3. Deployment spec 中设置 HTTP_PROXYHTTPS_PROXYNO_PROXY 环境变量的值,如下例所示:

        示例:在 ConfigMap 文件中设置代理变量

        # Other fields omitted
          deployment.yaml: |-
            apiVersion: apps/v1
            kind: Deployment
            spec:
              template:
                spec:
                  # Other fields omitted
                  initContainers:
                    - name: install-dynamic-plugins
                      # command omitted
                      env:
                        - name: NPM_CONFIG_USERCONFIG
                          value: /opt/app-root/src/.npmrc.dynamic-plugins
                        - name: HTTP_PROXY
                          value: 'http://10.10.10.105:3128'
                        - name: HTTPS_PROXY
                          value: 'http://10.10.10.106:3128'
                        - name: NO_PROXY
                          value: 'localhost,example.org'
                      # Other fields omitted
                  containers:
                    - name: backstage-backend
                      # Other fields omitted
                      env:
                        - name: APP_CONFIG_backend_listen_port
                          value: "7007"
                        - name: HTTP_PROXY
                          value: 'http://10.10.10.105:3128'
                        - name: HTTPS_PROXY
                          value: 'http://10.10.10.106:3128'
                        - name: NO_PROXY
                          value: 'localhost,example.org'
        Copy to Clipboard Toggle word wrap

    • 作为开发人员,在 Backstage CR 文件中设置代理信息,如下例所示:

      示例:在 CR 文件中设置代理变量

      spec:
        # Other fields omitted
        application:
          extraEnvs:
            envs:
              - name: HTTP_PROXY
                value: 'http://10.10.10.105:3128'
              - name: HTTPS_PROXY
                value: 'http://10.10.10.106:3128'
              - name: NO_PROXY
                value: 'localhost,example.org'
      Copy to Clipboard Toggle word wrap

  2. 保存配置更改。

6.3. 在 Helm 部署中配置代理信息

对于基于 Helm 的部署,开发人员或具有在集群中创建资源的集群管理员都可以在 values.yaml Helm 配置文件中配置代理变量。

先决条件

  • 已安装 Red Hat Developer Hub 应用程序。

流程

  1. 在 Helm 配置文件中设置代理信息:

    upstream:
      backstage:
        extraEnvVars:
          - name: HTTP_PROXY
            value: '<http_proxy_url>'
          - name: HTTPS_PROXY
            value: '<https_proxy_url>'
          - name: NO_PROXY
            value: '<no_proxy_settings>'
    Copy to Clipboard Toggle word wrap

    其中,

    <http_proxy_url>
    表示必须替换为 HTTP 代理 URL 的变量。
    <https_proxy_url>
    表示必须替换为 HTTPS 代理 URL 的变量。
    <no_proxy_settings>

    表示必须使用逗号分隔的 URL 替换变量,该变量要从代理中排除,如 foo.com,baz.com

    示例:使用 Helm Chart 设置代理变量

    upstream:
      backstage:
        extraEnvVars:
          - name: HTTP_PROXY
            value: 'http://10.10.10.105:3128'
          - name: HTTPS_PROXY
            value: 'http://10.10.10.106:3128'
          - name: NO_PROXY
            value: 'localhost,example.org'
    Copy to Clipboard Toggle word wrap

  2. 保存配置更改。

您可以在 Kubernetes 集群中配置带有传输层安全(TLS)连接的 RHDH 实例,如 Azure Red Hat OpenShift (ARO)集群、支持的云供应商中的任何集群,或者具有正确配置自己的集群。传输层安全性(TLS)可确保与其他实体(如第三方应用程序或外部数据库)的 RHDH 实例的安全连接。但是,您必须使用公共证书颁发机构(CA)签名证书来配置 Kubernetes 集群。

先决条件

  • 您已使用公共 CA 签名证书设置了 Azure Red Hat OpenShift (ARO)集群。有关获取 CA 证书的更多信息,请参阅您的厂商文档。
  • 您已创建了命名空间并设置对资源具有正确读取权限的服务帐户。

    示例:用于基于角色的访问控制的 Kubernetes 清单

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      name: backstage-read-only
    rules:
      - apiGroups:
          - '*'
        resources:
          - pods
          - configmaps
          - services
          - deployments
          - replicasets
          - horizontalpodautoscalers
          - ingresses
          - statefulsets
          - limitranges
          - resourcequotas
          - daemonsets
        verbs:
          - get
          - list
          - watch
    #...
    Copy to Clipboard Toggle word wrap

  • 您已获取与服务帐户关联的 secret 和服务 CA 证书。
  • 您已创建了一些资源并为其添加注解,以便 Kubernetes 插件可以发现这些资源。您可以应用这些 Kubernetes 注解:

    • backstage.io/kubernetes-id to label components
    • backstage.io/kubernetes-namespace 以标记命名空间

流程

  1. dynamic-plugins-rhdh.yaml 文件中启用 Kubernetes 插件:

    kind: ConfigMap
    apiVersion: v1
    metadata:
      name: dynamic-plugins-rhdh
    data:
      dynamic-plugins.yaml: |
        includes:
          - dynamic-plugins.default.yaml
        plugins:
          - package: ./dynamic-plugins/dist/backstage-plugin-kubernetes-backend-dynamic
            disabled: false 
    1
    
          - package: ./dynamic-plugins/dist/backstage-plugin-kubernetes
            disabled: false 
    2
    
            # ...
    Copy to Clipboard Toggle word wrap
    1
    将值设为 false 以启用 backstage-plugin-kubernetes-backend-dynamic 插件。
    2
    将值设为 false 以启用 backstage-plugin-kubernetes 插件。
    注意

    backstage-plugin-kubernetes 插件 当前还只是一个技术预览。作为替代方案,您可以使用 ./dynamic-plugins/dist/backstage-plugin-topology-dynamic 插件,该插件正式发布(GA)。

  2. 设置 Kubernetes 集群详情并在 app-config.yaml 配置文件中配置 目录同步选项。

    kind: ConfigMap
    apiVersion: v1
    metadata:
      name: my-rhdh-app-config
    data:
      "app-config.yaml": |
      # ...
      catalog:
        rules:
          - allow: [Component, System, API, Resource, Location]
        providers:
          kubernetes:
            openshift:
              cluster: openshift
              processor:
                namespaceOverride: default
                defaultOwner: guests
              schedule:
                frequency:
                  seconds: 30
                timeout:
                  seconds: 5
      kubernetes:
        serviceLocatorMethod:
          type: 'multiTenant'
        clusterLocatorMethods:
          - type: 'config'
            clusters:
              - url: <target-cluster-api-server-url> 
    1
    
                name: openshift
                authProvider: 'serviceAccount'
                skipTLSVerify: false 
    2
    
                skipMetricsLookup: true
                dashboardUrl: <target-cluster-console-url> 
    3
    
                dashboardApp: openshift
                serviceAccountToken: ${K8S_SERVICE_ACCOUNT_TOKEN} 
    4
    
                caData: ${K8S_CONFIG_CA_DATA} 
    5
    
                # ...
    Copy to Clipboard Toggle word wrap
    1
    Kubernetes control plane 的基本 URL。您可以运行 kubectl cluster-info 命令来获取基本 URL。
    2
    将此参数的值设置为 false,以启用 TLS 证书的验证。
    3
    可选:管理 ARO 集群的 Kubernetes 仪表板的链接。
    4
    可选:使用您在 < my_product_secrets> secret 中定义的 K8S_SERVICE_ACCOUNT_ TOKEN 环境变量传递服务帐户令牌。
    5
    使用您在 < my_product_secrets> secret 中定义的 K8S_CONFIG_CA_ DATA 环境变量传递 CA 数据。
  3. 保存配置更改。

验证

  1. 运行 RHDH 应用程序来导入您的目录:

    kubectl -n rhdh-operator get pods -w
    Copy to Clipboard Toggle word wrap
  2. 验证 pod 日志是否没有显示您的配置错误。
  3. 进入 Catalog 并检查 Developer Hub 实例中的组件页面,以验证集群连接以及您的创建的资源是否存在。
注意

如果您遇到连接错误,如证书问题或权限,请在组件页面中选中消息框或查看 pod 的日志。

第 8 章 使用动态插件缓存

8.1. 使用动态插件缓存

Red Hat Developer Hub (RHDH)中的动态插件缓存通过存储之前安装的插件来增强安装过程并减少平台引导时间。如果配置保持不变,则这个功能会阻止在以后的引导中重新下载插件。

当您启用动态插件缓存时:

  • 系统计算每个插件的 YAML 配置的校验和(不包括 pluginConfig)。
  • checksum 存储在插件目录中名为 dynamic-plugin-config.hash 的文件中。
  • 在启动过程中,如果插件的软件包引用与之前的安装匹配,并且校验和保持不变,则会跳过下载。
  • 由于上一次引导而禁用的插件会被自动删除。
注意

要在 RHDH 中启用动态插件缓存,plugins 目录 dynamic-plugins-root 必须是持久性卷。

8.2. 使用 Operator 为动态插件缓存创建 PVC

对于基于 operator 的安装,您必须手动创建持久性卷声明(PVC),方法是将默认的 dynamic-plugins-root 卷替换为名为 dynamic-plugins-root 的 PVC。

先决条件

  • 已使用 Red Hat Developer Hub Operator 在 OpenShift Container Platform 上安装 Red Hat Developer Hub。
  • 已安装 OpenShift CLI(oc)。

流程

  1. 创建持久性卷定义并将其保存到文件中,如 pvc.yaml。例如:

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: dynamic-plugins-root
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 5Gi
    Copy to Clipboard Toggle word wrap
    注意

    本例使用 ReadWriteOnce 作为访问模式,这可防止多个副本在不同节点间共享 PVC。要在不同节点上运行多个副本,具体取决于您的存储驱动程序,您必须使用一个访问模式,如 ReadWriteMany

  2. 要将此 PVC 应用到集群,请运行以下命令:

    oc apply -f pvc.yaml
    Copy to Clipboard Toggle word wrap
  3. 将默认的 dynamic-plugins-root 卷替换为名为 dynamic-plugins-root 的 PVC。例如:

    apiVersion: rhdh.redhat.com/v1alpha3
    kind: Backstage
    metadata:
      name: developer-hub
    spec:
      deployment:
        patch:
          spec:
            template:
              spec:
                volumes:
                  - $patch: replace
                    name: dynamic-plugins-root
                    persistentVolumeClaim:
                      claimName: dynamic-plugins-root
    Copy to Clipboard Toggle word wrap
    注意

    要避免添加新卷,您必须使用 $patch: replace 指令。

8.3. 使用 Helm Chart 为动态插件缓存创建 PVC

对于 Helm Chart 安装,如果您需要在 pod 重启后保留动态插件缓存,您必须创建一个持久性卷声明(PVC)并配置 Helm chart 来使用它。

先决条件

  • 已使用 Helm Chart 安装 Red Hat Developer Hub。
  • 已安装 OpenShift CLI(oc)。

流程

  1. 创建持久性卷定义。例如:

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: dynamic-plugins-root
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 5Gi
    Copy to Clipboard Toggle word wrap
    注意

    本例使用 ReadWriteOnce 作为访问模式,这可防止多个副本在不同节点间共享 PVC。要在不同节点上运行多个副本,具体取决于您的存储驱动程序,您必须使用一个访问模式,如 ReadWriteMany

  2. 要将此 PVC 应用到集群,请运行以下命令:

    oc apply -f pvc.yaml
    Copy to Clipboard Toggle word wrap
  3. 将 Helm Chart 配置为使用 PVC。例如:

    upstream:
      backstage:
        extraVolumes:
          - name: dynamic-plugins-root
            persistentVolumeClaim:
              claimName: dynamic-plugins-root
          - name: dynamic-plugins
            configMap:
              defaultMode: 420
              name: '{{ printf "%s-dynamic-plugins" .Release.Name }}'
              optional: true
          - name: dynamic-plugins-npmrc
            secret:
              defaultMode: 420
              optional: true
              secretName: '{{ printf "%s-dynamic-plugins-npmrc" .Release.Name }}'
          - name: dynamic-plugins-registry-auth
            secret:
              defaultMode: 416
              optional: true
              secretName: '{{ printf "%s-dynamic-plugins-registry-auth" .Release.Name }}'
          - name: npmcacache
            emptyDir: {}
          - name: temp
            emptyDir: {}
    Copy to Clipboard Toggle word wrap
    注意

    当您将 Helm Chart 配置为使用 PVC 时,还必须包括默认 Helm Chart 中定义的 extraVolumes

8.4. 配置动态插件缓存

您可以在 dynamic-plugins.yaml 文件中设置以下可选动态插件缓存参数:

  • forceDownload :将值设置为 true 以强制重新安装插件,绕过缓存。默认值为 false
  • PullPolicy :与 forceDownload 参数类似,并与其他镜像容器平台一致。对于这个键,您可以使用以下值之一:

    • Always: 这个值比较远程 registry 中的镜像摘要,并下载工件(如果之前下载了插件)。
    • IfNotPresent: 如果工件还没有存在于 dynamic-plugins-root 文件夹中,如果没有检查镜像摘要,则下载工件。

      注意

      pullPolicy 设置也应用于 NPM 下载方法,但 Always 将下载远程工件,而无需摘要检查。现有的 forceDownload 选项仍可以正常工作,但 pullPolicy 选项具有优先权。在以后的 Developer Hub 发行版本中可能会弃用 forceDownload 选项。

在没有摘要检查的情况下下载远程工件的 dynamic-plugins.yaml 文件配置示例:

plugins:
  - disabled: false
    pullPolicy: Always
    package: 'oci://quay.io/example-org/example-plugin:v1.0.0!internal-backstage-plugin-example'
Copy to Clipboard Toggle word wrap

第 9 章 为 Secret 和 PVC 配置默认挂载

您可以在 Red Hat Developer Hub 部署中配置持久性卷声明(PVC)和 Secret 挂载。使用注解定义自定义挂载路径,并指定要将其挂载到的容器。

9.1. 为 Secret 和 PVC 配置挂载路径

默认情况下,挂载路径是 Developer Hub 容器的工作目录。如果没有定义挂载路径,则默认为 /opt/app-root/src

流程

  1. 要指定 PVC 挂载路径,请在配置文件中添加 rhdh.redhat.com/mount-path 注解,如下例所示:

    指定 PVC 挂载的位置示例

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: <my_claim>
      annotations:
        rhdh.redhat.com/mount-path: /mount/path/from/annotation
    Copy to Clipboard Toggle word wrap

    其中:

    rhdh.redhat.com/mount-path
    指定 PVC 挂载到哪个挂载路径(本例中为 /mount/path/from/annotation 目录)。
    <my_claim>
    指定要挂载的 PVC。
  2. 要指定 Secret 挂载路径,请在配置文件中添加 rhdh.redhat.com/mount-path 注解,如下例所示:

    指定 Secret 挂载的位置示例

    apiVersion: v1
    kind: Secret
    metadata:
      name: <my_secret>
      annotations:
        rhdh.redhat.com/mount-path: /mount/path/from/annotation
    Copy to Clipboard Toggle word wrap

    其中:

    <my_secret>
    指定 Secret 名称。

9.2. 将 Secret 和 PVC 挂载到特定容器

默认情况下,Secret 和 PVC 仅挂载到 Red Hat Developer Hub backstage-backend 容器。您可以将 rhdh.redhat.com/containers 注解添加到配置文件中,以指定要挂载到的容器。

流程

  1. 要将 Secret 挂载到 所有容器,请在配置文件中将 rhdh.redhat.com/containers 注解设置为 *

    挂载到所有容器的示例

    apiVersion: v1
    kind: Secret
    metadata:
      name: <my_secret>
      annotations:
        rhdh.redhat.com/containers: *
    Copy to Clipboard Toggle word wrap

    重要

    rhdh.redhat.com/containers 设置为 *,将它挂载到部署中的所有容器。

  2. 要挂载到特定容器,请使用逗号分隔名称:

    分离容器列表的示例

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: <my_claim>
      annotations:
        rhdh.redhat.com/containers: "init-dynamic-plugins,backstage-backend"
    Copy to Clipboard Toggle word wrap

    注意

    此配置将 &lt ;my_claim& gt; PVC 挂载到 init-dynamic-pluginsbackstage-backend 容器。

默认情况下,Red Hat Developer Hub 不缓存插件资产。您可以使用 Redis 缓存存储来提高 Developer Hub 性能和可靠性。在 Developer Hub 中配置插件会接收专用缓存连接,这些连接由 Keyv Redis 客户端驱动。

先决条件

  • 已安装 Red Hat Developer Hub。
  • 您有一个活跃的 Redis 服务器。有关设置外部 Redis 服务器的更多信息,请参阅官方 Redis 文档

流程

  1. 通过将 Redis 定义为 cache 存储类型并在 app-config.yaml 文件中输入 Redis 服务器连接 URL 来启用 Developer Hub 缓存。

    app-config.yaml 文件片段

    backend:
      cache:
        store: redis
        connection: redis://user:pass@cache.example.com:6379
    Copy to Clipboard Toggle word wrap

  2. 通过在 app-config.yaml 文件中添加 HEKETI.cache.ttl 设置来启用 Techdocs缓存。此设置指定静态构建资产应保留在缓存中的时间(以毫秒为单位)。

    app-config.yaml 文件片段

    techdocs:
      cache:
        ttl: 3600000
    Copy to Clipboard Toggle word wrap

提示

另外,还可为支持此功能的不支持插件启用缓存。详情请查看对应的文档。

法律通告

Copyright © 2025 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部