3.1 为什么需要Helm

K8S上的应用对象,都是由特定的资源描述组成,包括deployment、service等。都保存各自文件中或者集中写到一个配置文件。然后kubectl apply –f 部署。

而对于一个复杂的应用,会有很多类似上面的资源描述文件,例如微服务架构应用,组成应用的服务可能多达十个,几十个。如果有更新或回滚应用的需求,可能要修改和维护所涉及的大量资源文件,而这种组织和管理应用的方式就显得力不从心了。 且由于缺少对发布过的应用版本管理和控制,使Kubernetes上的应用维护和更新等面临诸多的挑战,主要面临以下问题:

(2) 这些资源文件如何高效复用 (3) 不支持应用级别的版本管理

3.2 Helm介绍

(1) helm # 一个命令行客户端工具,主要用于Kubernetes应用chart的创建、打包、发布和管理。 (2) Chart # 应用描述,一系列用于描述 k8s 资源相关文件的集合。 (3) Release # 基于Chart的部署实体,一个 chart 被 Helm 运行后将会生成对应的一个 release;将在k8s中创建出真实运行的资源对象。

3.3 Helm v3 变化

Helm目前有两个大版本:v2和v3,2019年11月,Helm团队发布 v3 版本,v3版本相比v2版本最主要变化如下。

1 架构变化

的删除,并大部分代码重构。

名称可以在不同命名空间重用

3 支持将 Chart 推送至 Docker 镜像仓库中

4 使用JSONSchema验证chart values

5 其他

个别更名

helm fetch   更名为 helm pull

(2) 移除了用于本地临时搭建 Chart Repositoryhelm serve 命令。 (3) 自动创建名称空间 在不存在的命名空间中创建发行版时,Helm 2创建了命名空间。Helm 3遵循其他Kubernetes对象的行为,如果命名空间不存在则返回错误。 (4) 不再需要requirements.yaml, 依赖关系是直接在chart.yaml中定义。

3.4 Helm客户端

1 部署Helm客户端

Helm客户端下载地址:https://github.com/helm/helm/releases/

# mv linux-amd64/helm /usr/bin/

2 Helm常用命令

命令 描述 completion 命令补全,source <(helm completion bash) create 创建一个chart并指定名字 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客户端版本

3 配置Chart仓库

1)官方仓库网址: https://hub.kubeapps.com/ 2)其它仓库网址: https://artifacthub.io/

(2) 添加存储库并更新

# helm repo update

(3) 查看配置的存储库

# helm repo list

(4) 查找chart应用

helm search repo <应用名>

(5) 删除存储库

# helm repo remove <仓库名>

3.5 Helm基本使用

1 Helm管理应用生命周期

# helm uninstall

2 使用chart部署一个应用

(1) 查找chart

# 为什么mariadb也在列表中,因为他和mysql有关。

(2) 查看chart的基本信息

# helm show chart aliyun/mysql

(3) 安装chart应用

# helm install db aliyun/mysql -n default

(4) 安装后查看chart帮助信息

# helm status db -n default

3 安装前自定义chart配置选项

上面部署的mysql并没有成功,这是因为并不是所有的 chart 都能按照默认配置运行成功,可能会需要一些环境依赖,例如PV。 所以我们需要自定义 chart 配置选项(覆盖values.yaml),安装过程中有两种方法可以传递配置数据: --values 或 -f # 指定带有覆盖的YAML文件,这可以多次指定,最右边的文件优先。 --set # 在命令行上指定替代,如果两者都用,--set优先级高

# vim mysql/templates/deployment.yaml

 EOF
persistence:
  enabled: true
  accessMode: ReadWriteOnce
  size: 8Gi
mysqlUser: "k8s"
mysqlPassword: "123456"
mysqlDatabase: "k8s"
EOF

# kubectl create namespace mysql-db

# 创建MySQL用户k8s,并授予此用户访问新创建的k8s数据库的权限,并指定资源所在的名称空间,
# --set使用命令行替代变量,未指定的使用默认值。
# helm install db -f config.yaml -n mysql-db --set persistence.storageClass="managed-nfs-storage" ./mysql/

#  kubectl get pod -n mysql-db
NAME                        READY   STATUS    RESTARTS   AGE
db-mysql-5c695fcdfb-g6jt6   1/1     Running   0          77s

# helm list -n mysql-db
NAME    NAMESPACE    REVISION    UPDATED                                    STATUS      CHART          APP VERSION
db      mysql-db     1           2021-10-22 17:17:32.401870823 +0800 CST    deployed    mysql-0.3.5               

# kubectl get svc -n mysql-db
NAME       TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
db-mysql   ClusterIP   172.28.104.81   <none>        3306/TCP   2m38s

# yum install mysql -y
# mysql -uk8s -p123456 -h172.28.104.81 k8s
MySQL [k8s]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| k8s                |
+--------------------+
2 rows in set (0.00 sec)

相关文章: