【云原生 • Kubernetes】一文掌握 k8s 包管理工具 Helm
【摘要】
本文导读
一、为什么要引入 Helm1. Helm 的应用场景2. 使用 Helm 可以解决哪些问题
二、Helm 概述三、Helm 安装与配置(v3)1. 安装 Helm v32. ...
一、为什么要引入 Helm
1. Helm 的应用场景
在以往的应用部署过程当中,我们需要先编写一个 yaml
文件,然后该文件中包含 deployment、Service、Ingress 等等。
如果说需要部署的是单一、少数服务的应用,那么完全可以使用 yaml 文件的方式,这样会很简单。但是在实际的项目当中,微服务的数量基本不可能是一个,可能是几十个,如果说再用 yaml 文件的部署方式,那就意味着需要编写几十个 yaml 文件,这就会导致 数量多
、维护难
等诸多问题。
2. 使用 Helm 可以解决哪些问题
针对上述问题,Helm 的引入使用则可以将所有的 yaml 文件进行一个整体的管理,而且它能够实现 yaml 文件的高效复用。
高效复用:yaml 文件的格式和结果基本相同,一般只是属性值有所变化。使用 helm 后,针对格式和结构基本相同的 yaml 文件就不需要一遍一遍的进行重复编写了,直接复用即可。
除此之外,Helm 还可以进行应用级别的版本管理,包括版本更新、回退等等。
二、Helm 概述
Helm 是 Kubernetes 的一个 包管理工具
,类似于 Linux 下的包管理工具如 yum、apt 等。可以方便的将之前打包好的 yaml 文件部署到 Kunernetes 上。
在 Helm 中有三个主要概念:
概念 | 含义 |
---|---|
helm |
一个命令行工具,主要用于 k8s 应用 Chart 的创建、打包、发布和管理。 |
Chart |
应用描述,它是一系列用于描述 k8s 资源相关文件的集合(可以理解为 yaml 的集合)。 |
Release |
基于 Chart 的部署实体,一个 Chart 被 Helm 运行后将会生成一个对应的 release,然后将在 k8s 中创建出真正运行的资源对象,它是一个应用级别的版本管理。 |
在 2019 年 11 月 13日,Helm 团队发布了稳定版本 Helm v3
,这也是当前主流版本。该版本与往期版本相比较有主要以下变化:
- 删除了 Tiller;
- 支持 release 在不同命名空间中重用;
- 支持直接将 Chart 推送到 docker 仓库中。
如下为各版本 Helm 架构简易示意图。
v3 之前版本架构
v3 版本架构
三、Helm 安装与配置(v3)
1. 安装 Helm v3
第一步:前往 Helm 官网下载压缩文件;
也可以直接使用以下网址进行下载,我这里使用的是 3.0.0 版本:
操作系统 | Helm二进制文件下载地址(v3.0.0) |
---|---|
macOS | https://get.helm.sh/helm-v3.0.0-darwin-amd64.tar.gz |
linux/amd64 | https://get.helm.sh/helm-v3.0.0-linux-amd64.tar.gz |
第二步:将压缩文件上传至我们的 Linux 系统;
第三步:解压 helm 压缩文件;
#解压文件
tar -zxvf helm-v3.0.0-linux-amd64.tar.gz
解压后会有一个 linux-arm64
目录,这其中就包含了我们需要的 helm
文件;
第四步:将解压之后的 helm 目录复制或者移动到 /usr/local/bin 目录下;
#移动文件
mv helm /usr/local/bin
完成此四步的操作之后就可以直接在 Linux 系统中使用 helm 命令进行相关操作了,如果使用 helm 命令不报错,则说明 helm 安装成功。
2. 配置 Helm 仓库
添加仓库语法如下;
#语法
helm repo add 仓库名称 仓库地址
#eg:
#添加微软仓库
helm repo add stable http://mirror.azure.cn/kubernetes/charts
#添加阿里云仓库
helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
仓库成功添加之后可以使用 helm repo list
命令查看已有仓库;
四、使用 Helm 快速部署应用
在这里我们以部署可视化工具 weave
为例。
第一步:使用命令搜索应用 weave;
helm search repo weave
第二步:根据搜索到的内容选择安装;
#安装
helm install ui stable/weave-scope
这里选择的是微软源的 weave-scope 进行安装,如果在安装过程中报错那就换一个源;
安装成功就可以使用命令 helm list
查看了;
接下来使用 kubectl get pods
和 kubectl get svc
就可以看到我们安装的 weave 相关内容和对外暴露端口;
第三步:可以看到此时并未对外暴露端口,所以我们需要修改 service 中的 yaml 文件,将 type 值改为 NodePort,使用命令 kubectl edit svc ui-weave-scope
;
修改过后再次查看 svc,此时已有端口暴露;
五、自定义 Chart 部署应用
我们在这里以部署自定义应用 myweb1 为例。
第一步:创建一个chart;
helm create mychart
创建成功会自动生成一个 mychart 目录(其实也就是一个模板);
在生成的目录中有以下几部分:
文件 | 含义 |
---|---|
charts | 一个普通的空文件,一般也不会写入内容 |
Chart.yaml | 当前 chart 属性的配置信息 |
templates | 自己定义的 yaml 文件存于此 |
values.yaml | 定义 yaml 文件的全局配置 |
第二步:进入 templates 目录,创建 deployment. yaml 文件;
[root@master mychart]# cd templates/
[root@master templates]# kubectl create deployment myweb1 --image=nginx --dry-run -o yaml > deployment.yaml
W0906 10:18:15.827722 113157 helpers.go:535] --dry-run is deprecated and can be replaced with --dry-run=client.
[root@master templates]# ls
deployment.yaml ingress.yaml serviceaccount.yaml tests
_helpers.tpl NOTES.txt service.yaml
查看 deployment.yaml 文件;
第四步:设置对外暴露端口,创建 service.yaml 文件;
[root@master templates]# kubectl expose deployment myweb1 --port=80 --target-port=80 --type=NodePort --dry-run -o yaml > service.yaml
W0906 10:37:13.004600 126020 helpers.go:535] --dry-run is deprecated and can be replaced with --dry-run=client.
[root@master templates]# ls
deployment.yaml ingress.yaml serviceaccount.yaml tests
_helpers.tpl NOTES.txt service.yaml
如果这里无法导出,我们就先创建一次镜像:
kubectl create deployment myweb1 --image=nginx
;导出 service 后再删除此镜像:
kubectl delete deployment myweb1
查看 service.yaml 文件;
此时在 templates 目录中已有创建的两个 yaml 文件;
第五步:回到 mychart 父级目录,开始安装;
[root@master linux-amd64]# helm install myweb1 mychart/
安装成功后查看应用内容,应用节点与对外端口均创建成功;
myweb1 应用部署完成,此时就完成了 chart 的自定义及部署应用操作。
第六步:应用升级,每次修改 yaml 文件内容之后,我们均需对应用进行升级操作,使用如下命令。
#格式
helm upgrade 自定义应用名称 目录
#eg:
helm upgrade myweb1 mychart/
六、Helm 实现 yaml 文件高效复用
高效复用
:如果若干 yaml 文件的格式和结果基本相同,只是属性值有所变化时。在使用 Helm 后,针对格式和结构基本相同的 yaml 文件就不需要一遍一遍的进行重复编写了,直接复用即可。其主要实现原理就是通过动态传递参数、动态渲染模板、动态传入参数生成 yaml 文件内容。
创建 chart 之后,目录下有一个 values.yaml 文件,基于此进行操作;
第一步:在 values.yaml 文件中定义全局变量和值;
第二步:在具体的 yaml 文件中获取定义的变量值。
原理就是以表达式的形式获取全局变量,格式为:{{ .Values.变量名称}}
此处以修改 deployment.yaml 文件为例:
修改后如下:
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: myweb1
name: {{ .Release.Name}}-deploy
spec:
replicas: 1
selector:
matchLabels:
app: {{ .Values.label}}
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
app: {{ .Values.label}}
spec:
containers:
- image: {{ .Values.image}}
name: nginx
resources: {}
status: {}
七、Helm 的常用操作命令汇总
#查看仓库
helm repo list
#更新仓库
helm repo update
#删除仓库
helm repo remove 仓库名称
#搜索应用
helm search repo 名称
#安装应用
helm install 自定义应用名称 搜索出的结果名
#查看安装后的应用
helm list
helm status 应用名称
#创建chart
helm create chart名称
文章来源: majinjian.blog.csdn.net,作者:Developer 小马,版权归原作者所有,如需转载,请联系作者。
原文链接:majinjian.blog.csdn.net/article/details/126693667
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
作者其他文章
评论(0)