Helm基础知识

  1. Chart Chart 是 Helm 中的核心概念之一,它表示一个预先定义好的 Kubernetes 应用程序的包。Chart 包含应用程序的定义、依赖项、默认配置等信息。一个 Chart 可以包含多个 Kubernetes 资源对象,例如 Deployment、Service、ConfigMap 等。
  2. Release Release 表示通过 Chart 安装的运行中的应用程序实例。当用户使用 Chart 安装应用程序时,Helm 会生成一个 Release 实例。Release 包含应用程序的状态信息、配置选项等内容。一个 Chart 可以生成多个 Release 实例,每个实例都可以具有不同的配置和状态。
  3. Repository Repository 是 Helm Chart 存储和分享的位置。Chart 开发人员可以将 Chart 打包为 tar 包并上传到 Repository 中,其他用户可以从 Repository 中获取 Chart 并使用 Helm 安装它们。Helm 默认包含一个官方 Chart 仓库,开发人员也可以创建自己的私有 Chart 仓库。

             +-----------------------+
             |                       |
             |       Repository      |
             |                       |
             +-----------+-----------+
                         |
                Chart    |   Release
                         |
             +-----------v-----------+
             |                       |
             |        Helm           |
             |                       |
             +-----------------------+
    

​ 该命令会在 Kubernetes 集群中安装 Tiller(Helm 2.x 版本),或者在客户端本地生成 ~/.kube/config 文件和 Tiller 实例(Helm 3.x 版本)。

​ 配置权限和 RBAC:在 Kubernetes 中需要配置 RBAC 角色和权限,以便 Helm 客户端可以访问 Kubernetes API Server。可以通过创建一个 service account 并为其配置一个 ClusterRoleBinding 或 RoleBinding,来授予 Helm 客户端所需的权限。例如,以下是创建一个 service account 和 ClusterRoleBinding 的示例:

kubectl create serviceaccount --namespace kube-system tiller

kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller

 title=

Chart 开发和管理

Chart 的结构和文件

一个 Chart 通常包含了一组描述 Kubernetes 资源的 YAML 文件和一个名为 Chart.yaml 的描述 Chart 信息的 YAML 文件,以及一个或多个模板文件,可以使用模板文件动态生成 Kubernetes 资源文件。

一个典型的 Chart 目录结构如下:

my-chart/
  Chart.yaml          # 包含了 Chart 的基本信息,如名称、版本等
  README.md           # Chart 的说明文档
  values.yaml         # 用于配置 Chart 的默认值
  values.schema.json  # 用于验证 values.yaml 的格式
  templates/          # 包含了模板文件和 Kubernetes 资源文件
  charts/             # 包含了 Chart 的依赖 Chart

下面是一个包含了多个云原生应用和依赖关系的 Chart 示例:

my-app-chart/
  Chart.yaml
  README.md
  values.yaml
  templates/
    deployment.yaml
    service.yaml
    ingress.yaml
    configMap.yaml
    secrets.yaml
    _helpers.tpl
    my-app-1/
      Chart.yaml
      README.md
      values.yaml
      templates/
        deployment.yaml
        service.yaml
        configMap.yaml
        _helpers.tpl
    my-app-2/
      Chart.yaml
      README.md
      values.yaml
      templates/
        deployment.yaml
        service.yaml
        configMap.yaml
        _helpers.tpl
  charts/
    my-app-1/
      Chart.yaml
      README.md
      values.yaml
      templates/
        deployment.yaml
        service.yaml
        configMap.yaml
        _helpers.tpl
    my-app-2/
      Chart.yaml
      README.md
      values.yaml
      templates/
        deployment.yaml
        service.yaml
        configMap.yaml
        _helpers.tpl
    my-dependency/
      Chart.yaml
      README.md
      values.yaml
      templates/
        deployment.yaml
        service.yaml
        configMap.yaml
        _helpers.tpl

Release 管理和操作

Helm 与 Kubernetes 的集成

Kubernetes 和 Helm 的关系

                                  +------------------+
                                  |                  |
                                  |   Kubernetes     |
                                  |                  |
                                  +------------------+
                                           ^
                                           |
                                           |
                                           |
                                +-----------------------+
                                |                       |
                          +------------+       +------------+
                          |  Helm CLI  |       |  Tiller    |
                          +------------+       +------------+
                                |                       |
                                +-----------------------+
                                           ^
                                           |
                                           |
                                           |
                                           |
                                  +------------------+
                                  |                  |
                                  |   Chart Repo     |
                                  |                  |
                                  +------------------+

Kubernetes 是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。它提供了一组 API 和工具,用于管理容器、存储、网络和部署。

Helm 是一个 Kubernetes 应用程序包管理器,用于简化 Kubernetes 应用程序的部署和管理。它使用 Charts 来描述 Kubernetes 资源文件的集合,并使用 Tiller 来将 Charts 安装到 Kubernetes 集群中。Helm CLI 是 Helm 的命令行接口,用于创建、打包、安装、升级和删除 Charts。Chart Repo 是一个用于存储和共享 Charts 的仓库。

Tiller 是 Helm 的服务端组件,用于在 Kubernetes 集群中管理 Charts。它负责将 Charts 转换为 Kubernetes 资源文件,并将它们安装到 Kubernetes 集群中。Tiller 运行在 Kubernetes 集群中,可以访问 Kubernetes API Server,并使用 Kubernetes RBAC(Role-Based Access Control)来限制用户对 Kubernetes 资源的访问权限。

Helm 的最佳实践

以一个包含多个云原生应用的电子商务应用为例,来演示如何使用 Helm 对其进行管理。

  1. 创建 Helm Chart 文件

我们可以使用 Helm CLI 的 create 命令创建一个基本的 Helm Chart,例如:

$ helm create ecommerce-app

这将创建一个名为 ecommerce-app 的目录,并在其中生成一些默认的文件,例如 values.yamlChart.yamltemplates 目录等。然后,我们可以根据需要修改这些文件以适应电子商务应用的需求,例如:

  1. 打包 Helm Chart

一旦我们创建了 Helm Chart 文件,就可以使用 Helm CLI 的 package 命令将其打包为一个 tar 包,例如:

  1. 打包 Helm Chart

一旦我们创建了 Helm Chart 文件,就可以使用 Helm CLI 的 package 命令将其打包为一个 tar 包,例如:

goCopy code
$ helm package ecommerce-app

这将在当前目录中生成一个名为 ecommerce-app-0.1.0.tgz 的 tar 包,其中 0.1.0 是 Chart 的版本号。

  1. 部署 Helm Chart

在部署 Helm Chart 之前,我们需要将其上传到一个私有化的 Chart 仓库中。假设我们已经在 Kubernetes 集群中部署了一个私有化的 Chart 仓库,其 URL 为 http://my-chart-repo,我们可以使用 Helm CLI 的 push 命令将 Helm Chart 上传到该仓库中,例如:

perlCopy code
$ helm push ecommerce-app-0.1.0.tgz my-chart-repo

这将把 ecommerce-app-0.1.0.tgz 上传到名为 my-chart-repo 的 Chart 仓库中。

一旦 Helm Chart 已经上传到 Chart 仓库中,我们可以使用 Helm CLI 的 install 命令将其安装到 Kubernetes 集群中,例如:

cssCopy code
$ helm install --name ecommerce-app --namespace ecommerce --set database.username=admin, database.password=secret my-chart-repo/ecommerce-app

这将在名为 ecommerce 的命名空间中安装名为 ecommerce-app 的 Helm Release,其中 --set 参数用于设置应用程序的参数,例如数据库用户名和密码。

  1. 检查 Helm Release

一旦 Helm Release 安装成功,我们可以使用 Helm CLI 的 list 命令来查看已安装的 Helm Release,例如:

rubyCopy code
$ helm list

这将列出所有已安装的 Helm Release。我们也可以使用 status 命令来检查 Helm Release 的状态,例如:

luaCopy code
$ helm status ecommerce-app

这将输出名为 ecommerce-app 的 Helm Release 的详细信息。

总的来说,使用 Helm 对包含多个云原生应用的电子商务应用进行管理,可以提高应用程序的部