devopscube,Devops魔方为个人公众号,主要用于一些有关Devops,容器,kubernetes,自动化运维,以及敏捷开发相关的分享。同时也会不定期的分享一些个人心得,比如推荐一些个人使用的办公小软件,对一些事件的评论等。欢迎大家关注交流。
上一篇文章请查看历史文章:kubernetes包管理工具 - Helm 3入门到实战(一)
安装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的定义可以有多种方式
删除已经部署的release
命令语法:
helm uninstall RELEASE_NAME [flags]
更新已经部署的release,会生成新的版本revision,语法同helm install
命令语法:
helm uninstall RELEASE_NAME [flags]
创建一个包含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
打包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添加的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...
从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有关仓库的操作。例如增删改查仓库的信息。
# 添加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的信息,例如已经暗转更好的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的信息
获取某个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
查看集群中已经部署的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
可以对已经部署的release进行回滚操作
命令格式:
helm rollback [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相关的环境变量
$ 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 查看chart的详细信息
命令格式:
helm show
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
查看当前的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命令自动补全的功能,直接使用tab键就可以在输入命令的时候进行补全操作
$ helm completion bash
$ source <(helm completion bash)
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
可以作为仓库的平台或应用:
Helm3版本较之前的版本有了很大的更新,主要体现在以下几个方面
tiller作为helm最初的设计,从最初问世以来就一直时一个标准的架构。 但是helm3壮士断腕,删除了这个组件。用客户端library的方式,利用kuberentes原生的client,实现tiller实现的功能。 helm最初也是独立在kuberetes之外的一个设计,tiller相当于代替客户端在集群内部部署应用资源。但是这会导致helm的权限和实际tiller的权限不一致。所以删除tiller会使得:
https://github.com/helm/helm-2to3
官方提供了相应的工具插件,可以实现迁移。
这个插件主要可以做以下几件事情:
我们需要在helm v3的客户端安装相应的插件
$ helm plugin install https://github.com/helm/helm-2to3.git
具体的操作请查看官方文档
devopscube,Devops魔方为个人公众号,主要用于一些有关Devops,容器,kubernetes,自动化运维,以及敏捷开发相关的分享。同时也会不定期的分享一些个人心得,比如推荐一些个人使用的办公小软件,对一些事件的评论等。欢迎大家关注交流。