7.3. 配置自定义 Helm Chart 仓库

您可以使用以下方法在 OpenShift Container Platform 集群上安装 Helm chart:

  • CLI。
  • Web 控制台的 Developer 视角。

在 web 控制台的 Developer 视角中, Developer Catalog 显示集群中可用的 Helm chart。默认情况下,它会从 Red Hat OpenShift Helm Chart 仓库中列出 Helm chart。如需 chart 列表,请参阅 Red Hat Helm index 文件

作为集群管理员,您可以添加多个集群范围的 Helm Chart 仓库,与默认的集群范围 Helm 仓库分开,并在 Developer Catalog 中显示这些仓库中的 Helm chart。

作为具有适当基于角色的访问控制(RBAC)权限的普通用户或项目成员,您可以添加多个命名空间范围的 Helm Chart 仓库,除了默认的集群范围的 Helm 仓库,并在 Developer Catalog 中显示这些仓库中的 Helm chart。

在 web 控制台的 Developer 视角中,您可以使用 Helm 页面:

  • 使用 Create 按钮创建 Helm Releases 和 Repositories。
  • 创建、更新或删除集群范围的 Helm Chart 仓库。
  • 在 Repositories 选项卡中查看现有 Helm Chart 仓库列表,它也可以作为集群范围或命名空间范围轻松区分。

7.3.1. 在 OpenShift Container Platform 集群中安装 Helm chart

先决条件

  • 您有一个正在运行的 OpenShift Container Platform 集群,并已登录该集群。
  • 您已安装 Helm。

流程

  1. 创建一个新项目:

    $ oc new-project vault
  2. 将一个 Helm chart 存储库添加到本地 Helm 客户端:

    $ helm repo add openshift-helm-charts https://charts.openshift.io/

    输出示例

    "openshift-helm-charts" has been added to your repositories

  3. 更新存储库:

    $ helm repo update
  4. 安装 HashiCorp Vault 示例:

    $ helm install example-vault openshift-helm-charts/hashicorp-vault

    输出示例

    NAME: example-vault
    LAST DEPLOYED: Fri Mar 11 12:02:12 2022
    NAMESPACE: vault
    STATUS: deployed
    REVISION: 1
    NOTES:
    Thank you for installing HashiCorp Vault!

  5. 验证 chart 是否已成功安装:

    $ helm list

    输出示例

    NAME         	NAMESPACE	REVISION	UPDATED                                	STATUS  	CHART       	APP VERSION
    example-vault	vault    	1       	2022-03-11 12:02:12.296226673 +0530 IST	deployed	vault-0.19.0	1.9.2

7.3.2. 使用 Developer 视角安装 Helm chart

您可以使用 web 控制台中的 Developer 视角或 CLI 从 Developer Catalog 中列出的 Helm chart 中选择并安装 chart。您可以通过安装 Helm chart 来创建 Helm 发行版本,并在 web 控制台的 Developer 视角中查看它们。

先决条件

流程

通过 Developer Catalog 提供的 Helm chart 来创建 Helm 发行版本:

  1. Developer 视角中,进入 +Add 视图并选择一个项目。然后点击 Helm Chart 选项来查看 Developer Catalog 中的所有 Helm Chart。
  2. 选择一个 chart,查看它的描述信息、README 和其他与之相关的信息。
  3. Install Helm Chart

    图 7.1. Developer Catalog 中的 Helm chart

    odc helm chart devcatalog
  4. Install Helm Chart 页面中:

    1. Release Name 项中输入 release 的唯一名称。
    2. Chart Version 下拉列表中选择所需的 chart 版本。
    3. 使用 Form ViewYAML View 配置 Helm Chart。

      注意

      在可用情况下,您可以在 YAML ViewForm View 间切换。在不同视图间切换时数据会被保留。

    4. 点击 Install 创建 Helm release。Topology 视图将会显示,其中包括了发行版本。如果 Helm chart 带有发行注记,则 chart 会被预先选择,右侧面板会显示该发行版本的发行注记。
    5. Helm Releases 页面中查看新创建的 Helm 发行版本。

您可以使用侧面面板上的 Actions 按钮或右键点击 Helm 发行版本来升级、回滚或卸载 Helm 发行版本。

7.3.3. 在 web 终端中使用 Helm

您可以通过在 web 控制台的 Developer 视角中访问 web 终端 来使用 Helm。

7.3.4. 在 OpenShift Container Platform 上创建自定义 Helm chart

流程

  1. 创建一个新项目:

    $ oc new-project nodejs-ex-k
  2. 下载包含 OpenShift Container Platform 对象的示例 Node.js chart:

    $ git clone https://github.com/redhat-developer/redhat-helm-charts
  3. 进入包含 chart 示例的目录:

    $ cd redhat-helm-charts/alpha/nodejs-ex-k/
  4. 编辑 Chart.yaml 文件并添加 chart 描述:

    apiVersion: v2 1
    name: nodejs-ex-k 2
    description: A Helm chart for OpenShift 3
    icon: https://static.redhat.com/libs/redhat/brand-assets/latest/corp/logo.svg 4
    version: 0.2.1 5
    1
    Chart API 版本。对于至少需要 Helm 3 的 Helm Chart,它应该是 v2
    2
    chart 的名称。
    3
    chart 的描述。
    4
    用作图标的图形的 URL。
    5
    根据 Semantic Versioning(SemVer)2.0.0 规范,您的 chart 的版本。
  5. 验证 chart 格式是否正确:

    $ helm lint

    输出示例

    [INFO] Chart.yaml: icon is recommended
    
    1 chart(s) linted, 0 chart(s) failed

  6. 前往上一个目录级别:

    $ cd ..
  7. 安装 chart:

    $ helm install nodejs-chart nodejs-ex-k
  8. 验证 chart 是否已成功安装:

    $ helm list

    输出示例

    NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
    nodejs-chart nodejs-ex-k 1 2019-12-05 15:06:51.379134163 -0500 EST deployed nodejs-0.1.0  1.16.0

7.3.5. 添加自定义 Helm Chart 仓库

作为集群管理员,您可以将自定义 Helm Chart 存储库添加到集群中,并在 Developer Catalog 中启用从这些仓库中获得 Helm chart 的访问权限。

流程

  1. 要添加新的 Helm Chart 仓库,您必须将 Helm Chart 仓库自定义资源(CR)添加到集群中。

    Helm Chart 仓库 CR 示例

    apiVersion: helm.openshift.io/v1beta1
    kind: HelmChartRepository
    metadata:
      name: <name>
    spec:
     # optional name that might be used by console
     # name: <chart-display-name>
      connectionConfig:
        url: <helm-chart-repository-url>

    例如,要添加 Azure 示例 chart 存储库,请运行:

    $ cat <<EOF | oc apply -f -
    apiVersion: helm.openshift.io/v1beta1
    kind: HelmChartRepository
    metadata:
      name: azure-sample-repo
    spec:
      name: azure-sample-repo
      connectionConfig:
        url: https://raw.githubusercontent.com/Azure-Samples/helm-charts/master/docs
    EOF
  2. 导航到 web 控制台中的 Developer Catalog,以验证是否已显示 Helm chart 存储库中的 Helm chart。

    例如,使用 Chart 仓库 过滤器从仓库搜索 Helm chart。

    图 7.2. Chart 软件仓库过滤器

    ODC helm chart 仓库过滤器
    注意

    如果集群管理员删除了所有 chart 仓库,则无法在 +Add 视图、Developer Catalog 和左面的导航面板中查看 Helm 选项。

7.3.6. 添加命名空间范围的自定义 Helm Chart 仓库

Helm 仓库的集群范围的 HelmChartRepository 自定义资源定义(CRD)可帮助管理员将 Helm 仓库添加为自定义资源。命名空间范围的 ProjectHelmChartRepository CRD 允许具有适当基于角色的访问控制(RBAC)权限的项目成员创建其所选 Helm 仓库资源,但仅限于其命名空间。此项目成员可从集群范围和命名空间范围 Helm 仓库资源中看到 chart。

注意
  • 管理员可以限制用户创建命名空间范围的 Helm 仓库资源。通过限制用户,管理员具有通过命名空间角色而不是集群角色来控制 RBAC 的灵活性。这可避免用户不必要的权限,并防止访问未经授权的服务或应用程序。
  • 添加命名空间范围的 Helm 仓库不会影响现有集群范围的 Helm 仓库的行为。

作为具有适当 RBAC 权限的普通用户或项目成员,您可以在集群中添加自定义命名空间范围的 Helm Chart 仓库,并在 Developer Catalog 中启用这些仓库中的 Helm chart 访问 Helm chart。

流程

  1. 要添加新的命名空间范围的 Helm Chart 仓库,您必须将 Helm Chart 仓库自定义资源(CR)添加到命名空间中。

    命名空间范围的 Helm Chart 仓库 CR 示例

    apiVersion: helm.openshift.io/v1beta1
    kind: ProjectHelmChartRepository
    metadata:
      name: <name>
    spec:
      url: https://my.chart-repo.org/stable
    
      # optional name that might be used by console
      name: <chart-repo-display-name>
    
      # optional and only needed for UI purposes
      description: <My private chart repo>
    
      # required: chart repository URL
      connectionConfig:
        url: <helm-chart-repository-url>

    例如,要将 Azure 示例 chart 存储库添加到 my-namespace 命名空间,请运行:

    $ cat <<EOF | oc apply --namespace my-namespace -f -
    apiVersion: helm.openshift.io/v1beta1
    kind: ProjectHelmChartRepository
    metadata:
      name: azure-sample-repo
    spec:
      name: azure-sample-repo
      connectionConfig:
        url: https://raw.githubusercontent.com/Azure-Samples/helm-charts/master/docs
    EOF

    检查输出来验证是否创建了命名空间范围的 Helm Chart Repository CR:

    输出示例

    projecthelmchartrepository.helm.openshift.io/azure-sample-repo created

  2. 导航到 web 控制台中的 Developer Catalog,以验证 my-namespace 命名空间中是否显示了来自 Chart 仓库的 Helm chart。

    例如,使用 Chart 仓库 过滤器从仓库搜索 Helm chart。

    图 7.3. 命名空间中的 Chart 软件仓库过滤器

    odc 命名空间 helm chart 仓库过滤器

    或者,运行:

    $ oc get projecthelmchartrepositories --namespace my-namespace

    输出示例

    NAME                     AGE
    azure-sample-repo        1m

    注意

    如果集群管理员或具有适当 RBAC 权限的常规用户删除特定命名空间中的所有 chart 存储库,那么您无法查看 +Add 视图、Developer Catalog 以及用于该特定命名空间的左侧导航面板中的 Helm 选项。

7.3.7. 创建凭证和 CA 证书以添加 Helm Chart 仓库

有些 Helm Chart 仓库需要凭证和自定义证书颁发机构(CA)证书才能与其连接。您可以使用 Web 控制台和 CLI 添加凭证和证书。

流程

配置凭证和证书,然后使用 CLI 添加 Helm Chart 仓库:

  1. openshift-config 命名空间中,使用 PEM 编码格式的自定义 CA 证书创建一个 configmap,并将它存储在配置映射中的 ca-bundle.crt 键下:

    $ oc create configmap helm-ca-cert \
    --from-file=ca-bundle.crt=/path/to/certs/ca.crt \
    -n openshift-config
  2. openshift-config 命名空间中,创建一个 Secret 对象来添加客户端 TLS 配置:

    $ oc create secret tls helm-tls-configs \
    --cert=/path/to/certs/client.crt \
    --key=/path/to/certs/client.key \
    -n openshift-config

    请注意:客户端证书和密钥必须采用 PEM 编码格式,并分别保存在 tls.crttls.key 密钥中。

  3. 按如下所示添加 Helm 仓库:

    $ cat <<EOF | oc apply -f -
    apiVersion: helm.openshift.io/v1beta1
    kind: HelmChartRepository
    metadata:
      name: <helm-repository>
    spec:
      name: <helm-repository>
      connectionConfig:
        url: <URL for the Helm repository>
        tlsConfig:
            name: helm-tls-configs
        ca:
    	name: helm-ca-cert
    EOF

    ConfigMapSecret 使用 tlsConfigca 字段在 HelmChartRepository CR 中消耗。这些证书用于连接 Helm 仓库 URL。

  4. 默认情况下,所有经过身份验证的用户都可以访问所有配置的 chart。但是,对于需要证书的 Chart 仓库,您必须为用户提供对 openshift-config 命名空间中 helm-ca-cert 配置映射和 helm-tls-configs secret 的读取访问权限,如下所示:

    $ cat <<EOF | kubectl apply -f -
    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      namespace: openshift-config
      name: helm-chartrepos-tls-conf-viewer
    rules:
    - apiGroups: [""]
      resources: ["configmaps"]
      resourceNames: ["helm-ca-cert"]
      verbs: ["get"]
    - apiGroups: [""]
      resources: ["secrets"]
      resourceNames: ["helm-tls-configs"]
      verbs: ["get"]
    ---
    kind: RoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      namespace: openshift-config
      name: helm-chartrepos-tls-conf-viewer
    subjects:
      - kind: Group
        apiGroup: rbac.authorization.k8s.io
        name: 'system:authenticated'
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: Role
      name: helm-chartrepos-tls-conf-viewer
    EOF

7.3.8. 根据它们的认证级别过滤 Helm Chart

您可以在 Developer Catalog 中根据它们的认证级别过滤 Helm chart。

流程

  1. Developer 视角中,进入 +Add 视图并选择一个项目。
  2. Developer Catalog 标题中,选择 Helm Chart 选项来查看 Developer Catalog 中的所有 Helm chart。
  3. 使用 Helm chart 列表左侧的过滤器过滤所需的 chart:

    • 使用 Chart Repositories 过滤器过滤由 Red Hat Certification ChartsOpenShift Helm Charts 提供的 chart。
    • 使用 Source 过滤器过滤来自 合作伙伴、 社区红帽 的 chart。认证图表显示为( odc verified icon )图标。
注意

如果只有一个供应商类型,则 Source 过滤器不可见。

现在,您可以选择所需的 chart 并安装它。

7.3.9. 禁用 Helm Chart 仓库

您可以通过将 HelmChartRepository 自定义资源中的 disabled 属性设置为 true,从目录中的特定 Helm Chart 仓库禁用 Helm Charts。

流程

  • 要通过 CLI 禁用 Helm Chart 仓库,将 disabled: true 标志添加到自定义资源中。例如,要删除 Azure 示例 chart 存储库,请运行:

    $ cat <<EOF | oc apply -f -
    apiVersion: helm.openshift.io/v1beta1
    kind: HelmChartRepository
    metadata:
      name: azure-sample-repo
    spec:
      connectionConfig:
       url:https://raw.githubusercontent.com/Azure-Samples/helm-charts/master/docs
      disabled: true
    EOF
  • 使用 Web 控制台禁用最近添加的 Helm Chart 仓库:

    1. 进入 自定义资源定义 并搜索 HelmChartRepository 自定义资源。
    2. 进入 实例,找到您要禁用的存储库,并点击其名称。
    3. 进入 YAML 选项卡,在 spec 部分添加 disabled: true 标志,点 Save

      Example

      spec:
        connectionConfig:
          url: <url-of-the-repositoru-to-be-disabled>
        disabled: true

      现在,这个仓库已被禁用,并不会出现在目录中。