用Helm来简化K8S应用管理
收藏博客来交流更多云原生知识 :pyenv.cc参考文档 :https://helm.sh/docs/https://github.com/helm/helm一、什么是HelmHelm是Kubernetes的包管理器,类似于Python的pip centos的yum,主要用来管理 Charts。Helm Chart是用来封装Kubernetes原生应用程序的一系列YAML文件。可以在你部署应用的时
·
收藏博客来交流更多云原生知识 :pyenv.cc
参考文档 :
https://helm.sh/docs/
https://github.com/helm/helm
一、什么是Helm
- Helm是Kubernetes的包管理器,类似于Python的pip centos的yum,主要用来管理 Charts。
- Helm Chart是用来封装Kubernetes原生应用程序的一系列YAML文件。可以在你部署应用的时候自定义应用程序的一些Metadata,以便于应用程序的分发。对于应用发布者而言,可以通过Helm打包应用、管理应用依赖关系、管理应用版本并发布应用到软件仓库。
二、Helm带来的便捷
- 我们日常在K8S中部署可用应用时,需要涉及到很多的K8S资源的共同协作(Controller、Service、Configmap、Secret、RBAC、PV、PVC、Ingress等一系列资源),这些资源过于分散,不方便管理以及定义方式的局限性,直接提供kubectl来管理和生效YAML配置创建可用应用,让人头疼,不便于维护。
- 在部署一个应用,会遇到哪些问题:
- 如何统一管理、配置和更新这些分散的k8s的应用资源文件;
- 如何分发和复用应用模板;
- 如何将应用的一系列资源当做一个软件包管理;
- 对于使用者而言,使用Helm后不用需要编写复杂的应用部署文件,可以以简单的方式在K8S上查找、安装、升级、回滚、卸载应用程序;
三、 Helm 工作原理及架构演变
3.1、工作原理
Chart Install 过程
- Helm 从指定的目录或者 TAR 文件中解析出 Chart 结构信息。
- Heml 将指定的 Chart 结构和 Values 信息通过 gRPC 传递给 Tiller。
- Tiller 根据 Chart 和 Values 生成一个 Release。
- Tiller 根据 Release 发送给 Kubernetes 用于生成 Release。
Chart Update 过程
- Helm 从指定的目录或者 TAR 文件中解析出 Chart 结构信息。
- Helm 将需要更新的 Release 的名称、Chart结构和 Values 信息传递给 Tiller。
- Tiller 生成 Release 并更新指定名称的 Release 和 History。
- Tiller 将 Release 发送给 Kubernetes 用于更新 Release。
Chart Rollback 过程
- Helm 将要回滚的 Release 的名称传递给 Tiller。
- Tiller 根据 Release 的名称查找 History。
- Tiller 从 History 中获取上一个 Release。
- Tiller 将上一个 Release 发送给 Kubernetes 用于替换当前 Release。
3.2、架构演变
- 在2019 年 11 月 4 日,Helm 社区 repo 中提供 安全审计报告 , Helm v3 中的访问控制与 Helm v2 中的访问控制发生变更;
- 移除 Tiller
- 支持将 Chart 推送至 Docker 镜像仓库中
- 使用JSONSchema验证chart values
- 给helm charts添加test了,通过helm test命令 针对部署的应用跑tests
- 部署时release name必须指定,helm2时可自动随机生成
- 删除时无须再使用 –purge
- 为了更好地协调其他包管理者的措辞 Helm CLI 个别更名;helm delete更名为helm uninstall,helm inspect更名为helm show,helm fetch更名为helm pull
- 不再需要requirements.yaml, 依赖关系是直接在chart.yaml中定义
- 移除了用于本地临时搭建 Chart Repository的 helm serve 命令
五、Helm 组件及相关术语
- Helm : 命令行下的客户端工具,主要用于 K8S 应用程序 Chart 的创建、打包、发布以及创建和管理本地和远程的 Chart 仓库。
- Chart:Helm 包,采用 TAR 格式。其中包含了运行一个应用所需要的镜像、依赖和资源定义等,还可能包含 Kubernetes 集群中的服务定义,类似 Homebrew 中的 formula、APT 的 dpkg 或者 Yum 的 rpm 文件。
- Release:在 Kubernetes 集群上运行的 Chart 的一个实例。在同一个集群上,一个 Chart 可以安装很多次。每次安装都会创建一个新的 release。每次安装都会生成自己的 Release,会有自己的 Release 名称。
- Repository:用于发布和存储 Chart 的存储库。
- Tiller : (v2版本)Helm 的服务端。Tiller 负责接收 Helm 的请求,与 k8s 的 apiserver 交互,根据chart 来生成一个 release 并管理 release。
六、Helm常用命令
命令 | 描述 |
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客户端版本 |
七、推荐仓库
- 难免需要安装一些三方的基础服务,常用仓库如下 :
- bitnami官方地址: https://bitnami.com/
- 微软仓库 : http://mirror.azure.cn/kubernetes/charts/
- 阿里云仓库 : https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
- 官方仓库 : https://hub.kubeapps.com/charts/incubator
- elasticsearch : https://helm.elastic.co
添加微软仓库为 stable
$ helm repo add stable http://mirror.azure.cn/kubernetes/charts
"stable" has been added to your repositories
添加阿里云仓库为 aliyun
$ helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
"aliyun" has been added to your repositories
查看本地已添加的仓库
$ helm repo list
NAME URL
stable http://mirror.azure.cn/kubernetes/charts
aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
查看仓库所有的包
$ helm search repo stable
移除仓库
$ helm repo remove stable
列出仓库中相关的包
$ helm search repo mysql
八、Charts
8.1、目录结构
demochart/
├── charts # 目录用于存放所依赖的子chart
├── Chart.yaml # 描述这个 Chart 的相关信息、包括名字、描述信息、版本等
├── templates # 模板目录,通常会使用values.yaml配置内容进行填充,板引擎渲染此目录的文件后Tiller将渲染得到的结果 提交给Kubernetes创建响应的对象
│ ├── deployment.yaml # deployment 控制器的 Go 模板文件
│ ├── _helpers.tpl # 模板助手文件,定义的值可在模板中使用
│ ├── ingress.yaml # ingress 的模板文件
│ ├── NOTES.txt # Chart 部署到集群后的一些信息,例如:如何使用、列出缺省值,可以理解为帮助文档
│ ├── serviceaccount.yaml
│ ├── service.yaml # service 的 Go 模板文件
└── values.yaml # 模板的值文件,这些值会在安装时应用到 GO 模板生成部署文件
8.2、构建一个无状态应用模版charts
部分常用语法说明 : http://masterminds.github.io/sprig/strings.html
- 目录结构
$ tree demochart/
demochart/
├── charts
├── Chart.yaml
├── templates
│ ├── deployment.yaml
└── values.yaml
- Chart.yaml
apiVersion: v2
name: demochart
description: A Helm chart for Kubernetes, The author is Daizhe
type: application
version: 0.1.0
appVersion: 1.16.0
- templates/deployment.yaml
$ vim templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: deployment
name: {{ .Values.Name }}
spec:
replicas: {{ .Values.replicas }}
selector:
matchLabels:
app: deployment
template:
metadata:
labels:
app: deployment
spec:
containers:
- image: {{ .Values.image }}
name: nginx
- values.yaml
Name: demo-deploy-nginx
replicas: 1
image: nginx:latest
- install 安装
$ helm install nginx-dep demochart/ --dry-run
$ helm install nginx-dep demochart/
$ helm list
- upgrade 升级
$ helm upgrade -f values.yaml nginx-dep demochart
- rollback 回滚
$ helm history nginx-dep
$ helm rollback nginx-dep 1
更多推荐
已为社区贡献5条内容
所有评论(0)