devopscube,Devops魔方为个人公众号,主要用于一些有关Devops,容器,kubernetes,自动化运维,以及敏捷开发相关的分享。同时也会不定期的分享一些个人心得,比如推荐一些个人使用的办公小软件,对一些事件的评论等。欢迎大家关注交流。
在这里插入图片描述
上一篇文章请查看历史文章:kubernetes包管理工具 - Helm 3入门到实战(一)

五、 helm命令的介绍

核心操作
helm install

安装chart的命令

命令格式:
helm install [NAME] [CHART] [flags]

常用的两种方式指定变量输入:
# 使用-f指定自定义的value值的yaml文件作为输入(若有默认值,则使用values.yaml中的默认值)
$ helm install myredis ./redis -f myvalues.yaml 
# 使用--set指定输入的value值
$ helm install myredis ./redis --set name=prod 

如果多个文件,可以覆盖前一个文件指定的变量,覆盖是变量级别的,而不是文件级别的
$ helm install myredis ./redis -f myvalues.yaml -f override.yaml
如果多个--set,对同一个变量,取最后一个变量。
$ helm install myredis ./redis --set foo=bar --set foo=newbar

关于Chart的定义可以有多种方式

  1. chart 命名, 从helm repo中下载的chart可以直接使用,例如stable/jenkins
  2. chart打包后的路径, helm install mynginx ./nginx-1.2.3.tgz
  3. chart未打包的路径, helm install mynginx ./nginx
  4. chart的在线URL, helm install mynginx https://example.com/charts/nginx-1.2.3.tgz
helm uninstall

删除已经部署的release

命令语法:
helm uninstall RELEASE_NAME [flags]
helm upgrade

更新已经部署的release,会生成新的版本revision,语法同helm install

命令语法:
helm uninstall RELEASE_NAME [flags]
打包相关
helm create

创建一个包含chart架构的示例项目

$ helm create test
Creating test
$ tree test
test
├── charts
├── Chart.yaml
├── templates
│   ├── deployment.yaml
│   ├── _helpers.tpl
│   ├── ingress.yaml
│   ├── NOTES.txt
│   ├── serviceaccount.yaml
│   ├── service.yaml
│   └── tests
│       └── test-connection.yaml
└── values.yaml

3 directories, 9 files
helm package

打包chart,生成.tgz的压缩文件

命令格式:
helm package [CHART_PATH] [...] [flags]

$ helm package test
Successfully packaged chart and saved it to: /root/workspaces/test/test-0.1.0.tgz

然后就可以分发给其他人或者放到helm的chart仓库中

仓库相关
helm search

在helm添加的repo根据关键字搜索相应的chart,并不是在线搜索,儿是本地已经下载好了index信息,搜索的是本地的index内容。如果想更新本地的内容,使用helm repo update

命令格式:
helm search hub [keyword] [flags]
helm search repo [keyword] [flags]

# helm指定搜索hub,是指定在https://hub.helm.sh/charts/中取搜索
# 本地添加的repo,需要使用helm search repo

$ helm search repo stable/mysql
NAME                    CHART VERSION   APP VERSION     DESCRIPTION
stable/mysql            1.6.2           5.7.28          Fast, reliable, scalable, and easy to use open-...
stable/mysqldump        2.6.0           2.4.1           A Helm chart to help backup MySQL databases usi...
helm pull

从chart仓库中下载打包好的chart到本地存储

[aiops@3 test]$ helm pull stable/mysql
[aiops@3 test]$ ls
helloworld  mysql-1.6.2.tgz test  test-0.1.0.tgz
helm repo

helm有关仓库的操作。例如增删改查仓库的信息。

# 添加helm repo的信息
helm repo add [NAME] [URL] [flags]
# 列出helm repo
helm repo list [flags]
# 删除helm repo的信息
helm repo remove [NAME] [flags]
# 更新helm repo的信息,过程是需要在线获取chart仓库的index信息,然后更新到本地。
helm repo update [flags]

运行示例:

$ helm repo add minio http://192.168.100.4:9000/helm-repo
"minio" has been added to your repositories
$ helm repo list
NAME    URL
minio   http://192.168.100.4:9000/helm-repo
stable  https://kubernetes-charts.storage.googleapis.com/
gitlab  https://charts.gitlab.io/
$ helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "minio1" chart repository
...Successfully got an update from the "minio" chart repository
...Successfully got an update from the "gitlab" chart repository
...Successfully got an update from the "stable" chart repository
Update Complete. ⎈ Happy Helming!⎈
$ helm repo remove minio
"minio" has been removed from your repositories
Release相关
helm get

获取某个release的信息,例如已经暗转更好的release helloworld,查看其信息。

获取helloworld的所有信息
$ helm get all helloworld
只获取helloworld的value的定义信息。
$ helm get values helloworld
USER-SUPPLIED VALUES:
myvalue: helloworldfromcommand

有效的参数:
  all         获取所有信息
  hooks       只获取hooks的信息
  manifest    只获取manifest的信息
  notes       获取notes的信息
  values      获取value的信息
helm history

获取某个release历史的安装更新记录

$ helm history helloworld
REVISION        UPDATED                         STATUS          CHART                   APP VERSION     DESCRIPTION 
1               Tue Mar 31 15:08:11 2020        superseded      helloworld-0.1.0        1.16.0          Install complete
2               Tue Mar 31 15:12:10 2020        deployed        helloworld-0.1.0        1.16.0          Upgrade complete

helm list

查看集群中已经部署的release, 可以使用filter实现过滤功能

[aiops@3 test]$ helm list --filter 'spring*'
NAME            NAMESPACE       REVISION        UPDATED                                 STATUS          CHART               APP VERSION
springboot      default         3               2020-03-30 15:02:42.373758623 +0000 UTC deployed        springboot-0.1.0    1.16.0
[aiops@3 test]$ helm list --filter 'spring*'
NAME            NAMESPACE       REVISION        UPDATED                                 STATUS          CHART               APP VERSION
springboot      default         3               2020-03-30 15:02:42.373758623 +0000 UTC deployed        springboot-0.1.0    1.16.0
helm rollback

可以对已经部署的release进行回滚操作

命令格式:
helm rollback <RELEASE> [REVISION] [flags]

每Update一个版本,helm就会存储一个版本的信息,版本号是REVISION
如果回滚,指定具体是release的那个reivision,执行回滚操作后会生成新的revision但是目前的平台状态时在rollback所指定的那个revision的状态

例如:
[aiops@3 test]$ helm list
NAME            NAMESPACE       REVISION        UPDATED                                 STATUS          CHART               APP VERSION
helloworld      default         2               2020-03-31 15:12:10.042567459 +0800 CST deployed        helloworld-0.1.0    1.16.0
[aiops@3 test]$ helm rollback helloworld 1
Rollback was a success! Happy Helming!
[aiops@3 test]$ helm list
NAME            NAMESPACE       REVISION        UPDATED                                 STATUS          CHART               APP VERSION
helloworld      default         3               2020-04-01 12:04:27.235570943 +0800 CST deployed        helloworld-0.1.0    1.16.0
状态或信息查询
helm env

用于查看helm相关的环境变量

$ helm env
HELM_BIN="helm"
HELM_DEBUG="false"
HELM_KUBECONTEXT=""
HELM_NAMESPACE="default"
HELM_PLUGINS="/home/aiops/.local/share/helm/plugins"
HELM_REGISTRY_CONFIG="/home/aiops/.config/helm/registry.json"
HELM_REPOSITORY_CACHE="/home/aiops/.cache/helm/repository"
HELM_REPOSITORY_CONFIG="/home/aiops/.config/helm/repositories.yaml"
helm show

helm 查看chart的详细信息

命令格式:
helm show <commands> <chart name>

Available Commands:
  all         shows all information of the chart
  chart       shows the chart's definition
  readme      shows the chart's README
  values      shows the chart's values
helm status

查看当前的release的信息

命令格式:
helm status RELEASE_NAME [flags]

$ helm status helloworld
NAME: helloworld
LAST DEPLOYED: Wed Apr  1 12:04:27 2020
NAMESPACE: default
STATUS: deployed
REVISION: 3
TEST SUITE: None
helm completion

设置helm命令自动补全的功能,直接使用tab键就可以在输入命令的时候进行补全操作

$ helm completion bash
$ source <(helm completion bash)

六、 Helm 仓库

Helm仓库就是存储和分发chart的地方。

官方为我们提供了chart仓库例如:https://github.com/helm/charts

在stable目录可以查找你所需要的chart

这些chart也可以在https://hub.helm.sh/中找到。类似于dockerhub的地方。可以在线的搜索相应的chart。

除了官方的helm 仓库外,很多团队需要构建自己的helm仓库用于内部的内容分发。这就需要搭建自己的helm仓库并能够利用helm命令去交互。

一个chart仓库,可以是任意的http server,在某个目录下存储相应的打包好的charts以及存储这些charts信息的index文件。所以实现chart仓库的方案有很多,只要你是一个能够下载yaml和tar文件的http服务器。

首先chart仓库所需要的仓库的结构如下:

charts/
  |- index.yaml
  |- alpine-0.1.2.tgz
  |- alpine-0.1.2.tgz.prov

index.yaml文件时通过helm 命令生成的。

当你把所有的chart放到同一个目录下,然后在这个目录下运行一下命令,就会生成相应的index.yaml文件

helm repo index

可以作为仓库的平台或应用:

  • Google Cloud Storage
  • Jfrog Artifactory
  • Github pages
  • 常见的web server, apache或者时nginx
  • ChartMuseum Repository Server(一个用go写的开源的helm仓库)
  • 一些对象存储平台或软件,例如minio

七、 Helm2 与Helm 3的区别以及migration

Helm3版本较之前的版本有了很大的更新,主要体现在以下几个方面

  1. Helm3 删除了tiller。

​ tiller作为helm最初的设计,从最初问世以来就一直时一个标准的架构。 但是helm3壮士断腕,删除了这个组件。用客户端library的方式,利用kuberentes原生的client,实现tiller实现的功能。 helm最初也是独立在kuberetes之外的一个设计,tiller相当于代替客户端在集群内部部署应用资源。但是这会导致helm的权限和实际tiller的权限不一致。所以删除tiller会使得:

  • Helm使用与kubectl上下文相同的访问权限
  • 你无需再使用helm init来初始化Helm
  • Release Name 位于命名空间中
  1. 仓库选项
  • 预定义的中心仓库被移除,需要自己手动添加。
  • Helm Hub(一个发现分布式chart仓库的平台)被添加到helm search(helm search hub)
  1. 一些命令行的变化,删除和增加了一些命令行,详情请查看官方文档
  2. JSON Schema 验证,可以输入值进行validation。
Migration 迁移

https://github.com/helm/helm-2to3

官方提供了相应的工具插件,可以实现迁移。

这个插件主要可以做以下几件事情:

  • 迁移helm chart:https://github.com/helm/helm-2to3#migrate-helm-v2-configuration
  • 迁移helm release:https://github.com/helm/helm-2to3#migrate-helm-v2-releases
  • 清除 Helm v2 配置, 版本和Tiller的部署.

我们需要在helm v3的客户端安装相应的插件

$ helm plugin install https://github.com/helm/helm-2to3.git

具体的操作请查看官方文档

devopscube,Devops魔方为个人公众号,主要用于一些有关Devops,容器,kubernetes,自动化运维,以及敏捷开发相关的分享。同时也会不定期的分享一些个人心得,比如推荐一些个人使用的办公小软件,对一些事件的评论等。欢迎大家关注交流。

Logo

开源、云原生的融合云平台

更多推荐