×

您可以使用以下方法在OpenShift Container Platform集群上创建Helm发行版

  • 命令行界面。

  • Web控制台的**开发者**视角。

Web控制台**开发者**视角中的**开发者目录**显示集群中可用的Helm图表。默认情况下,它列出了来自Red Hat OpenShift Helm图表存储库的Helm图表。有关图表的列表,请参阅Red Hat Helm index文件

作为集群管理员,您可以添加多个集群范围和命名空间范围的Helm图表存储库(与默认的集群范围Helm存储库分开),并在**开发者目录**中显示这些存储库中的Helm图表。

作为具有相应基于角色的访问控制(RBAC)权限的普通用户或项目成员,您可以添加多个命名空间范围的Helm图表存储库(与默认的集群范围Helm存储库分开),并在**开发者目录**中显示这些存储库中的Helm图表。

在Web控制台的**开发者**视角中,您可以使用**Helm**页面来

  • 使用**创建**按钮创建Helm发行版和存储库。

  • 创建、更新或删除集群范围或命名空间范围的Helm图表存储库。

  • 查看“存储库”选项卡中现有Helm图表存储库的列表,这些存储库也可以轻松区分是集群范围还是命名空间范围。

在OpenShift Container Platform集群上安装Helm图表

先决条件
  • 您有一个正在运行的OpenShift Container Platform集群,并且您已登录到该集群。

  • 您已安装Helm。

步骤
  1. 创建一个新项目

    $ oc new-project vault
  2. 将Helm图表的存储库添加到您的本地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. 验证图表是否已成功安装

    $ 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

使用开发者视角创建Helm发行版

您可以使用Web控制台中的**开发者**视角或命令行界面从**开发者目录**中列出的Helm图表中选择并创建一个发行版。您可以通过安装Helm图表来创建Helm发行版,并在Web控制台的**开发者**视角中查看它们。

先决条件
步骤

要从**开发者目录**中提供的Helm图表创建Helm发行版

  1. 在**开发者**视角中,导航到**+添加**视图并选择一个项目。然后点击**Helm图表**选项以查看**开发者目录**中的所有Helm图表。

  2. 选择一个图表并阅读该图表的描述、自述文件和其他详细信息。

  3. 点击**创建**。

    odc helm chart devcatalog new
    图1. 开发者目录中的Helm图表
  4. 在**创建Helm发行版**页面中

    1. 在**发行版名称**字段中输入发行版的唯一名称。

    2. 从**图表版本**下拉列表中选择所需的图表版本。

    3. 使用**表单视图**或**YAML视图**配置您的 Helm chart。

      在可用情况下,您可以在**YAML视图**和**表单视图**之间切换。在视图之间切换时,数据会持久保存。

    4. 单击**创建**以创建 Helm 版本。Web 控制台会在**拓扑**视图中显示新版本。

      如果 Helm chart 包含发行说明,Web 控制台将显示它们。

      如果 Helm chart 创建工作负载,Web 控制台会在**拓扑**或**Helm 版本详细信息**页面上显示它们。工作负载包括DaemonSetCronJobPodDeploymentDeploymentConfig

    5. 在**Helm 版本**页面查看新创建的 Helm 版本。

您可以使用侧面板上的**操作**按钮或右键单击 Helm 版本来升级、回滚或删除 Helm 版本。

在 Web 终端中使用 Helm

您可以在 Web 控制台的**开发者**视角中访问 Web 终端来使用 Helm。

在 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 根据语义版本控制 (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. 验证图表是否已成功安装

    $ 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

添加自定义 Helm chart 仓库

作为集群管理员,您可以向集群添加自定义 Helm chart 仓库,并在**开发者目录**中启用对这些仓库中 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 控制台中的**开发者目录**,以验证是否显示了来自 chart 仓库的 Helm chart。

    例如,使用**Chart 仓库**过滤器搜索来自仓库的 Helm chart。

    odc helm chart repo filter
    图 2. Chart 仓库过滤器

    如果集群管理员删除所有 chart 仓库,则您将无法在**+添加**视图、**开发者目录**和左侧导航面板中查看 Helm 选项。

添加命名空间范围的自定义 Helm chart 仓库

用于 Helm 仓库的集群范围HelmChartRepository自定义资源定义 (CRD) 使管理员能够将 Helm 仓库添加为自定义资源。命名空间范围的ProjectHelmChartRepository CRD 允许具有相应基于角色的访问控制 (RBAC) 权限的项目成员创建他们选择的 Helm 仓库资源,但范围限于其命名空间。此类项目成员可以查看来自集群范围和命名空间范围 Helm 仓库资源的 chart。

  • 管理员可以限制用户创建命名空间范围的 Helm 仓库资源。通过限制用户,管理员可以灵活地通过命名空间角色而不是集群角色来控制 RBAC。这避免了用户的权限过度提升,并防止访问未经授权的服务或应用程序。

  • 添加命名空间范围的 Helm 仓库不会影响现有集群范围 Helm 仓库的行为。

作为具有相应 RBAC 权限的普通用户或项目成员,您可以向集群添加自定义命名空间范围的 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 仓库 CR

    示例输出
    projecthelmchartrepository.helm.openshift.io/azure-sample-repo created
  2. 导航到 Web 控制台中的**开发者目录**,以验证是否在您的my-namespace命名空间中显示了来自 chart 仓库的 Helm chart。

    例如,使用**Chart 仓库**过滤器搜索来自仓库的 Helm chart。

    odc namespace helm chart repo filter
    图 3. 命名空间中的 Chart 仓库过滤器

    或者,运行

    $ oc get projecthelmchartrepositories --namespace my-namespace
    示例输出
    NAME                     AGE
    azure-sample-repo        1m

    如果集群管理员或具有相应 RBAC 权限的普通用户删除特定命名空间中的所有 chart 仓库,则您将无法在该特定命名空间的**+添加**视图、**开发者目录**和左侧导航面板中查看 Helm 选项。

创建凭据和 CA 证书以添加 Helm 仓库

某些 Helm chart 仓库需要凭据和自定义证书颁发机构 (CA) 证书才能连接到它。您可以使用 Web 控制台以及 CLI 来添加凭据和证书。

步骤

要配置凭据和证书,然后使用 CLI 添加 Helm chart 仓库

  1. openshift-config命名空间中,创建一个包含 PEM 编码格式自定义 CA 证书的ConfigMap对象,并将其存储在 config map 中的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 config map 和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

按认证级别过滤 Helm Charts

您可以在**开发者目录**中根据其认证级别过滤 Helm chart。

步骤
  1. 开发者视角中,导航到+添加视图并选择一个项目。

  2. 开发者目录磁贴中,选择Helm Chart选项以查看开发者目录中的所有Helm图表。

  3. 使用Helm图表列表左侧的过滤器来筛选所需的图表。

    • 使用图表仓库过滤器来筛选由Red Hat认证图表OpenShift Helm图表提供的图表。

    • 使用来源过滤器来筛选来自合作伙伴社区Red Hat的图表。经过认证的图表用以下图标表示:(odc verified icon)。

当只有一个提供程序类型时,来源过滤器将不可见。

您现在可以选择所需的图表并安装它。

禁用Helm图表仓库

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

步骤
  • 要使用CLI禁用Helm图表仓库,请将disabled: true标志添加到自定义资源。例如,要删除Azure示例图表仓库,请运行

    $ 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图表仓库

    1. 转到自定义资源定义并搜索HelmChartRepository自定义资源。

    2. 转到实例,找到要禁用的仓库,然后单击其名称。

    3. 转到YAML选项卡,在spec部分添加disabled: true标志,然后单击保存

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

      该仓库现在已禁用,并且不会出现在目录中。