前言

K8S上的应用对象, 都是由特定的资源描述组成, 包括deployment、 service等。 都保存各自文件中或者集中写到一个配置文件。 然后“kubectl apply – f”部署。 如果应用只由一个或几个这样的服务组成, 上面部署方式足够了。 而对于一个复杂的应用, 会有很多类似上面的资源描述文件, 例如微服务架构应用, 组成应用的服务可能多达十个、几十个。 如果有更新或回滚应用的需求, 可能要修改和维护所涉及的大量资源文件, 而这种组织和管理应用的方式就显得力不从心了。 且由于缺少对发布过的应用版本管理和控制, 使Kubernetes 上的应用维护和更新等面临诸多的挑战, 主要面临以下问题:

  1. 如何将这些服务作为一个整体管理。
  2. 这些资源文件如何高效复用。
  3. 不支持应用级别的版本管理。

    简介

    Helm是一个Kubernetes的包管理工具(The package managerfor Kubernetes), 就像Linux下的包管理器, 如yum/apt等, 可以很方便的将之前打包好的 yaml 文件部署到 kubernetes 上。Helm有3个重要概念:

  4. helm: 一个命令行客户端工具, 主要用于Kubernetes应用chart的创建、 打包、 发布和管理。

  5. Chart: 应用描述, 一系列用于描述k8s资源相关文件的集合。
  6. Release: 基于Chart的部署实体, 一个chart被Helm运行后将会生成对应的一个release; 将在k8s中创建出真实运行的资源对象 。

    Helm版本变更

    2019年11月13日, Helm团队发布Helm v3的第一个稳定版本。该版本主要变化如下:

  7. 最明显的变化是Tiller的删除。

  8. Release名称可以在不同命名空间重用。
  9. 支持将Chart推送至Docker镜像仓库中。
  10. 使用JSONSchema验证chart values。
  11. 其他。

image.png

Helm常用命令

命令 描述
dependency 管理chart依赖
get 下载一个release。 可用子命令: all、 hooks、 manifest、 notes、 values
history 获取release历史
install 安装一个chart
list 列出release
package 将 chart 目录打包到 chart 存档文件中
pull 从远程仓库中下载 chart 并解压到本地
$ helm pull stable/mysql —untar
repo 添加, 列出, 移除, 更新和索引 chart 仓库。 可用子命令: add、 index、
list、 remove、 update
rollback 从之前版本回滚
search 根据关键字搜索chart。 可用子命令: hub、 repo
show 查看chart详细信息。 可用子命令: all、 chart、 readme、 values
status 显示已命名版本的状态
template 本地呈现模板
uninstall 卸载一个release
upgrade 更新一个release
version 查看helm客户端版本