第 4 章 使用 Helm Chart 在 air-gapped 环境中的受支持的 Kubernetes 平台上安装 Red Hat Developer Hub
如果您在完全断开连接的或部分断开连接的环境中使用受支持的 Kubernetes 平台,您可以使用 Helm Chart 安装 Red Hat Developer Hub。支持的 Kubernetes 平台包括:
- Microsoft Azure Kubernetes Service
- Amazon Elastic Kubernetes Service
- Google Kubernetes Engine
在没有互联网访问的环境中,完全断开连接的安装可确保 Red Hat Developer Hub 可以在没有外部依赖项的情况下可靠地运行。此方法涉及镜像镜像并将其手动传输到 air-gapped 环境。
先决条件
- 已安装 Skopeo 1.17 或更高版本
- 已安装 Yq 4.4 或更高版本
-
已向 registry.redhat.io 进行身份验证,以使用
skopeo login命令拉取镜像。 -
您可以访问配置了
kubectl的 Kubernetes 集群 - 您已在 air-gapped 主机上安装了 Helm 3.13 或更高版本
流程
在终端中,运行以下命令获取 Helm chart 值:
helm repo add <helm_chart_repo_name> https://charts.openshift.io/ helm repo update helm show values <helm_chart_repo_name>/redhat-developer-hub --version <rhdh_version> values.default.yaml helm pull <helm_chart_repo_name>/redhat-developer-hub --version <rhdh_version>其中
- <helm_chart_repo_name>
-
指定 Helm Chart 仓库的名称,如
openshift-helm-charts。 - <rhdh_version>
指定您要使用的 Red Hat Developer Hub 版本,如
1.7.3。注意helm pull & lt;helm_chart_repo_name> /redhat-developer-hub -- version <rhdh_version> 命令会自动创建 Helm Chart 归档文件,并将 Helm Chart 下载到当前工作目录。
运行以下命令来提取镜像摘要:
RHDH_IMAGE=$(yq '.upstream.backstage.image | .registry + "/" + .repository' values.default.yaml) RHDH_DIGEST=$(yq '.upstream.backstage.image.tag' values.default.yaml) PG_IMAGE=$(yq '.upstream.postgresql.image | .registry + "/" + .repository' values.default.yaml) PG_DIGEST=$(yq '.upstream.postgresql.image.tag' values.default.yaml)运行以下命令,将镜像镜像到您的本地归档:
skopeo login registry.redhat.io skopeo copy --all docker://${RHDH_IMAGE}:${RHDH_DIGEST} dir:./rhdh-hub skopeo copy --all docker://${PG_IMAGE}:${PG_DIGEST} dir:./postgresql将以下文件和目录传送到 air-gapped 环境中:
- rhdh-hub
- postgresql
-
Helm Chart 归档文件,如
redhat-developer-hub-1.7.3.tgz
运行以下命令,将镜像加载到 air-gapped 主机上:
skopeo copy --all dir:./rhdh-hub docker://<mirror_registry_name>/<rhdh_repo_name>:${RHDH_DIGEST} skopeo copy --all dir:./postgresql docker://<mirror_registry_name>/<postgresql_repo_name>:${PG_DIGEST}其中
- <mirror_registry_name>
-
指定要将镜像推送到的目标镜像 registry 的名称,如
registry.example.com。 - <rhdh_repo_name>
-
指定存储 Red Hat Developer Hub 镜像的存储库的名称,例如
rhdh/rhdh-hub-rhel9。这个值必须与加载到 air-gapped 主机的 Red Hat Developer Hub 镜像的名称匹配。 - <postgresql_repo_name>
-
指定存储 PostgreSQL 镜像的存储库的名称,如
rhdh/postgresql-15。
为您要使用的 Kubernetes 平台创建一个
values.yaml文件,并为该文件添加以下镜像引用以反映本地用途:upstream: backstage: image: registry: "<mirror_registry_name>" repository: <rhdh_repo_name> tag: "${RHDH_DIGEST}" postgresql: image: registry: "<mirror_registry_name>" repository: <postgresql_repo_name> tag: "${PG_DIGEST}"其中
- <mirror_registry_name>
-
指定要将镜像推送到的目标镜像 registry 的名称,如
registry.example.com。 - <rhdh_repo_name>
-
指定存储 Red Hat Developer Hub 镜像的存储库的名称,例如
rhdh/rhdh-hub-rhel9。这个值必须与加载到 air-gapped 主机的 Red Hat Developer Hub 镜像的名称匹配。 - <postgresql_repo_name>
指定存储 PostgreSQL 镜像的存储库的名称,如
rhdh/postgresql-15。对于 AKS,请使用以下
values.yaml文件模板:global: host: <app_address> route: enabled: false upstream: ingress: enabled: true className: webapprouting.kubernetes.azure.com host: backstage: image: pullSecrets: - rhdh-pull-secret podSecurityContext: fsGroup: 3000 postgresql: image: pullSecrets: - rhdh-pull-secret primary: podSecurityContext: enabled: true fsGroup: 3000 volumePermissions: enabled: true对于 EKS,请使用以下
values.yaml文件模板:global: # TODO: Set your application domain name. host: <my_developer_hub_domain> route: enabled: false upstream: service: # NodePort is required for the ALB to route to the Service type: NodePort ingress: enabled: true annotations: kubernetes.io/ingress.class: alb alb.ingress.kubernetes.io/scheme: internet-facing # TODO: Using an ALB HTTPS Listener requires a certificate for your own domain. Fill in the ARN of your certificate, e.g.: alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:xxx:xxxx:certificate/xxxxxx alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS":443}]' alb.ingress.kubernetes.io/ssl-redirect: '443' # TODO: Set your application domain name. external-dns.alpha.kubernetes.io/hostname: <your rhdh domain name> backstage: image: pullSecrets: - rhdh-pull-secret podSecurityContext: # you can assign any random value as fsGroup fsGroup: 2000 postgresql: image: pullSecrets: - rhdh-pull-secret primary: podSecurityContext: enabled: true # you can assign any random value as fsGroup fsGroup: 3000 volumePermissions: enabled: true对于 GKE,请使用以下
values.yaml文件模板:global: host: <rhdh_domain_name> route: enabled: false upstream: service: type: NodePort ingress: enabled: true annotations: kubernetes.io/ingress.class: gce kubernetes.io/ingress.global-static-ip-name: <ADDRESS_NAME> networking.gke.io/managed-certificates: <rhdh_certificate_name> networking.gke.io/v1beta1.FrontendConfig: <ingress_security_config> className: gce backstage: image: pullSecrets: - rhdh-pull-secret podSecurityContext: fsGroup: 2000 postgresql: image: pullSecrets: - rhdh-pull-secret primary: podSecurityContext: enabled: true fsGroup: 3000 volumePermissions: enabled: true
运行以下命令,在当前命名空间中安装 Helm Chart:
helm install rhdh ./<helm_chart_archive_file_name> -f values.yaml其中
- <helm_chart_archive_file_name>
-
指定 Helm Chart 归档文件的名称,如
redhat-developer-hub-1.4.0.tgz。