一个计算机技术爱好者与学习者

0%

Helm入门篇

1. Helm简介

Helm is the best way to find, share, and use software built for Kubernetes.

helm是k8s的包管理工具,就像yum之于centos,apt之于ubuntu。不同的是,yum管理的是软件包,helm管理的是配置好的k8s资源包。这种配置好的k8s资源包,按照chart的包格式进行包装。以下是wordpress的chart包结构:

1
2
3
4
5
6
7
8
9
10
wordpress/
Chart.yaml # A YAML file containing information about the chart
LICENSE # OPTIONAL: A plain text file containing the license for the chart
README.md # OPTIONAL: A human-readable README file
requirements.yaml # OPTIONAL: A YAML file listing dependencies for the chart
values.yaml # The default configuration values for this chart
charts/ # A directory containing any charts upon which this chart depends.
templates/ # A directory of templates that, when combined with values,
# will generate valid Kubernetes manifest files.
templates/NOTES.txt # OPTIONAL: A plain text file containing short usage notes

Helm2包括两个组件:客户端(Helm Client)和服务端(Tiller)。Helm发送指令给Tiller(gRPC协议),Tiller主要用于管理各种应用发布的版本,并且与k8s进行交互。
不过,在 Helm3 中 Tiller 被移除掉了,Helm直接与k8s进行交互,版本相关的数据存储在k8s中。

Helm3中命令也发生了变化:

  • helm delete 更名为 helm uninstall
  • helm inspect 更名为 helm show
  • helm fetch 更名为 helm pull

旧的命令依然可以使用。

参考文档:

2. 体验Helm

越来越喜欢用katacoda来学习新技能,Helm也可以在上面通过实践学习。

Helm相关教程:

3. 安装Helm

参考 Installing Helm,安装helm。

3.1. macos

1
2
brew install helm
helm version

3.2. linux

1、查找需要的release版本

2、下载并安装

1
2
3
4
5
wget https://get.helm.sh/helm-v3.2.4-linux-amd64.tar.gz
tar -xzvf helm-v3.2.4-linux-amd64.tar.gz
mv linux-amd64/helm /usr/local/bin/helm
ln -s /usr/local/bin/helm /usr/bin/helm
helm version

4. Helm常用命令

4.1. 使用条件

helm命令使用条件:

  • 安装配置好k8s集群
  • 安装配置好kubectl,可以正常访问k8s
  • 安装好helm

helm和kubectl一样,可以在一台机器上管理多个k8s集群,使用kubectl config use-context xxx切换一下集群即可。

4.2. 查看帮助

1
2
helm -h
helm get -h

4.3. 从 Artifact Hub 查找chart

1
helm search hub mysql

Artifact Hub中存放了大量不同的仓库。

4.4. 添加chart仓库到本地

1
2
3
4
5
6
# helm repo add stable https://kubernetes-charts.storage.googleapis.com/
# helm repo add stable https://charts.helm.sh/stable
# helm repo remove stable
helm repo add stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
helm repo update
helm repo list

执行helm repo add,实际上是在本地创建或更新一个名为repositories.yaml的文件,该文件存储了所有已添加的仓库的详细信息,包括名称和URL。

repositories.yaml 文件路径为:

  • 在Linux上:$HOME/.config/helm
  • 在macOS上:$HOME/Library/Preferences/helm
  • 在Windows上:%USERPROFILE%\AppData\Roaming\Helm

4.5. 本地查找chart列表

1
2
3
helm search repo stable
helm search repo stable/mysql
helm search repo stable/mysql -l

4.6. 查看chart详情

1
2
helm show chart stable/mysql
helm show all stable/mysql

4.7. 查看chart渲染后的yaml

1
helm template mysql stable/mysql

4.8. 模拟安装软件

1
helm install mysql stable/mysql --version 0.3.5 --debug --dry-run

4.9. 安装软件

以安装mysql为例(适用于 k8s v1.16- 版本)

1
2
3
4
helm install mysql stable/mysql
# or
helm install stable/mysql --generate-name
helm status mysql

安装指定chart版本的mysql

1
2
helm search repo stable/mysql -l
helm install mysql stable/mysql --version 0.3.5

k8s v1.16+ 版本,extensions/v1beta1 API version中Deployment资源已经被移除了,因此这里的mysql chart仅适用于1.16以下的版本。详情参考Deprecated APIs Removed In 1.16: Here’s What You Need To Know

如果想要在 k8s v1.16+ 版本中使用这个mysql chart,请参考《K8S中安装Mysql》一文中的【helm安装单节点mysql(5.7.x)】一节。

4.10. 查看k8s中安装的chart

1
2
3
4
helm list
helm list -A
helm list -n mysql
helm status mysql -n mysql

4.11. 查看k8s中安装的chart详情

1
helm get manifest mysql -n mysql

该命令能够打印出所有上传到k8s的资源清单。
每个文件以---开头表示YAML文件的开头,然后是自动生成的注释行,表示哪个模板文件生成了这个YAML文档。

4.12. 卸载软件

以卸载mysql为例

1
2
3
helm ls
helm uninstall mysql
helm status mysql

卸载指定namespace下的软件

1
2
helm ls -A
helm uninstall xxx -n yyy

4.13. 修改默认配置

4.13.1. 方法一:下载chart(推荐)

下载chart,修改配置文件。
这种方法是最推荐的方法,原因有二:

  • 有时不止需要修改values.yaml,还需要修改其他yaml文件
  • 安装之后有完整留档,方便以后的配置调整和升级

以修改mysql的默认配置为例:

1、获取chart并解压

1
2
3
4
5
helm fetch stable/mysql 
# or
helm fetch stable/mysql --version 0.3.5

tar -xzvf mysql-0.3.5.tgz

2、编辑values

1
2
cd mysql
vim values.yaml

配置项改为我们需要的配置。

3、执行安装
在values所在目录下,执行命令

1
2
kubectl create ns mysql
helm install mysql -f values.yaml . -n mysql

安装过程中有两种方式传递配置数据:

  • --values (或 -f):使用 YAML 文件覆盖配置。可以指定多次,优先使用最右边的文件。
  • --set:通过命令行的方式对指定项进行覆盖。优先级更高。

4.13.2. 方法二:导出配置文件

导出配置文件,修改配置文件

以修改mysql的默认配置为例:

1、获取默认values

1
helm show values stable/mysql > mysql-values.yaml

2、编辑values
编辑mysql-values.yaml

3、执行安装

1
2
kubectl create ns mysql
helm install mysql stable/mysql -f mysql-values.yaml -n mysql

4.13.3. 方法三:执行命令时指定配置

执行helm install命令时,指定配置

以修改mysql的默认配置为例:

1
helm install mysql stable/mysql -n mysql --set persistence.size=10Gi

4.14. 修改配置后更新

1
helm upgrade mysql stable/mysql -f mysql-values.yaml -n mysql

4.15. 创建chart并打包

1、创建chart

1
helm create wecms

2、验证chart

1
helm lint wecms

3、打包chart

1
helm package wecms

4、使用chart安装

1
helm install wecms ./wecms-0.1.0.tgz

更多关于创建chart的内容,参考文档《自己动手制作Helm Chart》

4.16. 生成渲染好的资源清单

1
2
3
helm template wecms wecms > wecms_manifest.yaml
# or
helm template wecms wecms-0.1.0.tgz > wecms_manifest.yaml

5. Helm基础知识

参考文档《Helm官方文档摘录》

6. 常用chart仓库

  • 本文作者: 好好学习的郝
  • 原文链接: https://www.voidking.com/dev-helm-start/
  • 版权声明: 本文采用 BY-NC-SA 许可协议,转载请注明出处!源站会即时更新知识点并修正错误,欢迎访问~
  • 微信公众号同步更新,欢迎关注~