kubernetes 应用包管理工具(Helm)


文章目录

    • 1.1 Helm介绍
    • 1.2 Helm主要概念
    • 1.3 Helm V3 与 V2 区别
    • 1.4 Helm下载地址:
    • 1.5 Helm安装
    • 2.1 Helm 添加第三方 Chart 库
    • 2.2 列出所有仓库
    • 3 Helm 部署应用
    • 4 构建 Helm 自定义Chart
      • 4.1 快速制作自定义chart
      • 4.2 从0制作自定义chart

通过之前的学习,我们已经可以部署Pod,Deploymen,Service,Ingress,ConfigMap等kubernetes资源了,对于一个复杂的应用,我们可能需要部署多个资源,才能完成应用的功能部署,这样就需要我们对不同环境,网络等进行多个配置的修改,大大增加的复杂性,丢失了便于扩/缩容的优势,所以针对此,Helm 应用包管理工具诞生了。
1.1 Helm介绍 Helm是Kubernetes 应用的包管理工具,主要用来管理 Charts,类似Linux系统的 yum。
Helm Chart 是用来封装 Kubernetes 原生应用程序的一系列 YAML 文件。
可以在部署应用的时候自定义应用程序的一些 Metadata,以便于应用程序的分发。
  • 对于应用发布者而言,可以通过 Helm 打包应用、管理应用依赖关系、管理应用 版本并发布应用到软件仓库。
  • 对于使用者而言,使用 Helm 后不用需要编写复杂的应用部署文件,可以以简单 的方式在 Kubernetes 上查找、安装、升级、回滚、卸载应用程序。
1.2 Helm主要概念
  • Chart:一个helm包,其中包含运行一个应用所需要的所有资源定义和工具,还包含Kubernetes集群中的服务定义。
    类似千OS 包管理器, 比如Linux 中的yum、apt, 或者MacOS 中的homebrew)
  • Release:在Kubernetes集群上运行一个chart实例。在同一个集群上,一个Chart可以被安装多次。
  • Repository:用于存放和共享Chart仓库。
1.3 Helm V3 与 V2 区别 Helm V3 与 V2 最大的区别在于去掉了tiller:
kubernetes 应用包管理工具(Helm)
文章图片

1.4 Helm下载地址: https://github.com/helm/helm/releases
下载软件包:helm-v3.2.4-linux-amd64.tar.gz
1.5 Helm安装
tar zxvf helm-v3.2.4-linux-amd64.tar.gz cd linux-amd64/ mv helm/usr/local/bin/验证:查看版本号信息 [root@k8s-master linux-amd64]# helm version version.BuildInfo{Version:"v3.2.4", GitCommit:"0ad800ef43d3b826f31a5ad8dfbb4fe05d143688", GitTreeState:"clean", GoVersion:"go1.13.12"}

2.1 Helm 添加第三方 Chart 库
helm repo add stable http://mirror.azure.cn/kubernetes/charts/ helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

2.2 列出所有仓库
[root@k8s-master linux-amd64]# helm repo list NAMEURL stable http://mirror.azure.cn/kubernetes/charts/ aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

3 Helm 部署应用
查询应用 helm search repo redis获取部署应用值 helm show values stable/redis-ha拉取应用到本地 helm pull stable/redis-ha 支持多种安装方式:(helm默认读取~/.kube/config信息连接k8s集群) helm install redis-ha stable/redis-ha helm install redis-ha redis-ha-4.4.0.tgz查看状态 helm status redis-ha 卸载应用 helm uninstall redis-ha

4 构建 Helm 自定义Chart 4.1 快速制作自定义chart
从其他项目中复制并修改。例如,我们要简单改写Mariadb的chart。
1:下载chart
helm fetch stable/mariadb
2:编辑chart
tar zxvf mariadb-7.3.14.tgz
mv mariadb mydb
目录结构如下:
[root@k8s-master mariadb]# tree . ├── Chart.yaml ├── files │└── docker-entrypoint-initdb.d │└── README.md ├── OWNERS ├── README.md ├── templates │├── _helpers.tpl │├── initialization-configmap.yaml │├── master-configmap.yaml │├── master-pdb.yaml │├── master-statefulset.yaml │├── master-svc.yaml │├── NOTES.txt │├── rolebinding.yaml │├── role.yaml │├── secrets.yaml │├── serviceaccount.yaml │├── servicemonitor.yaml │├── slave-configmap.yaml │├── slave-pdb.yaml │├── slave-statefulset.yaml │├── slave-svc.yaml │├── test-runner.yaml │└── tests.yaml ├── values-production.yaml ├── values.schema.json └── values.yaml3 directories, 25 files

3: 修改Chart.yaml
appVersion:1.2.3
name:mydb
4: 打包 chart
会生成一个mydb-1.2.3.tgz的压缩包
helm package mydb
5: 安装chart
helm install mydb-1.2.3.tgz
4.2 从0制作自定义chart
1:helm create 一个空的chart目录
helm create mycharm
目录结构如下:
[root@k8s-master mychart]# tree . ├── charts ├── Chart.yaml ├── templates │├── deployment.yaml │├── _helpers.tpl │├── hpa.yaml │├── ingress.yaml │├── NOTES.txt │├── serviceaccount.yaml │├── service.yaml │└── tests │└── test-connection.yaml └── values.yaml3 directories, 10 files

  • 【kubernetes 应用包管理工具(Helm)】Chart.yaml
    声明了当前 Chart 的名称、版本等基本信息,这些信息会在该 Chart 被放入仓库后,供用户浏览检索。
  • LICENSE
    [可选] 协议
  • requirements.yaml
    [可选] 用于存放当前Chart依赖的其它Chart的说明文件
  • charts/
    [可选]: 该目录中放置当前Chart依赖的其它Chart
  • templates
    文件夹内存放了各类应用部署所需要使用的 YAML 文件,比如 Deployment 和 Service。
  • templates/NOTES.txt
    [可选]: 放置Chart的使用指南
  • values.yaml
    这个文件提供了应用在安装时的默认参数。在默认的 Values 中,我们看到 replicaCount: 1,说明该应用在默认部署的状态下只有一个副本。
chart.yaml 文件说明:
name: [必须] Chart的名称version: [必须] Chart的版本号,版本号必须符合 SemVer 2:http://semver.org/description: [可选] Chart的简要描述keywords: -[可选] 关键字列表,便于检索home: [可选] 项目地址sources: - [可选] 当前Chart的下载地址列表maintainers: # [可选] - name: [必须] 名字 email: [可选] 邮箱engine: gotpl # [可选] 模版引擎,默认值是gotplicon: [可选] 一个SVG或PNG格式的图片地址

2.编写mychart的应用描述信息和编写应用部署信息
cat chart.yaml
cat value.yaml
3.检查依赖和模板配置是否正确
helm lint mycharm/
4.将应用打包
helm package mycharm/
kubernetes 应用包管理工具(Helm)
文章图片
5.添加应用包到本地仓库
helm repo add local https://reg.red.org/chartrepo/charts ##建立本地仓库

    推荐阅读