kubernetes 应用包管理工具:Helm


通过之前的学习,我们已经可以部署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:
在这里插入图片描述

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
NAME  	URL                                                   
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.yaml

3 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.yaml

3 directories, 10 files

  • 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 # [可选] 模版引擎,默认值是gotpl

icon: [可选] 一个SVG或PNG格式的图片地址

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

猜你喜欢

转载自blog.csdn.net/zhangshaohuas/article/details/107652643