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 实例。
流程
可选:创建一个证书 secret 来使用 TLS 连接配置 PostgreSQL 实例:
cat <<EOF | oc -n <your-namespace> create -f - apiVersion: v1 kind: Secret metadata: name: {my-product-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
创建凭证 secret 以与 PostgreSQL 实例连接:
cat <<EOF | oc -n <your-namespace> create -f - apiVersion: v1 kind: Secret metadata: name: {my-product-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
- 1
- 提供凭证 secret 的名称。
- 2
- 提供用于连接 PostgreSQL 实例的凭证数据。
- 3
- 可选:根据所需的 安全套接字层(SSL)模式提供值。
- 4
- 可选: 只有在需要 PostgreSQL 实例的 TLS 连接时才提供值。
在名为
values.yaml
的 Helm 配置文件中配置 PostgreSQL 实例:# ... upstream: postgresql: enabled: false # disable PostgreSQL instance creation 1 auth: existingSecret: {my-product-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-product-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: dynamic-plugins-npmrc - name: postgres-crt secret: secretName: {my-product-database-certificates-secrets} 7 # ...
在名为
values.yaml
的 Helm 配置文件中应用配置更改:helm upgrade -n <your-namespace> <your-deploy-name> openshift-helm-charts/redhat-developer-hub -f values.yaml --version 1.4.0