目录
1、为什么需要helm?
2、helm介绍
3、helm工作流程
4、使用helm
Helm管理应用生命周期:
helm模板功能试用
helm动态传参使用
helm动态文件传参
helm版本管理
回滚
拓展命令
卸载应用:
附属
服务打包
1、为什么需要helm?
由于Kubernetes缺少对发布的应用版本管理和控制,使得部署的应
用维护和更新等面临诸多的挑战,主要面临以下问题:
• 如何将这些服务作为一个整体管理?
• 这些资源文件如何高效复用?
• 不支持应用级别的版本管理
2、helm介绍
Helm是一个Kubernetes的包管理工具,就像Linux下的包管理器,如yum/apt等,可以很方便的将之前
打包好的yaml文件部署到kubernetes上。
Helm有3个重要概念:
• helm:一个命令行客户端工具,主要用于Kubernetes应用chart的创建、打包、发布和管理。
• Chart:应用描述,一系列用于描述 k8s 资源相关文件的集合。
• Release:基于Chart的部署实体,一个 chart 被 Helm 运行后将会生成对应的一个 release;将在
k8s中创建出真实运行的资源对象。
3、helm工作流程
4、使用helm
使用helm很简单,你只需要下载一个二进制客户端包即可,会通过kubeconfig配置(通常
$HOME/.kube/config)来连接Kubernetes。
下载Helm客户端:里面包含helm官网
wget https://get.helm.sh/helm-v3.2.4-linux-amd64.tar.gz
tar zxvf helm-v3.2.4-linux-amd64.tar.gz
mv linux-amd64/helm /usr/bin/
即可安装成功
Helm管理应用生命周期:
• helm create 制作Chart
• helm install 部署
• helm upgrade 更新
• helm rollback 回滚
• helm uninstall 卸载
创建chart:
helm create mychart
打包chart:
helm package mychart
• Chart.yaml:用于描述这个 Chart的基本信息,包括名字、描述信息以及
版本等。
• values.yaml :用于存储 templates 目录中模板文件中用到变量的值。
• charts:目录里存放这个chart依赖的所有子chart。
• templates: 目录里面存放所有yaml模板文件。
• NOTES.txt :用于介绍Chart帮助信息, helm install 部署后展示给
用户。例如:如何使用这个 Chart、列出缺省的设置等。
• _helpers.tpl:放置模板的地方,可以在整个 chart 中重复使用。
Helm核心是模板,即模板化K8s YAML文件。部署多个应用时,将需要改
动的字段进行模板化,可动态传入
示例
创建一个chart
helm create my-chart
进入这个chart
cd my-chart/
结构如下
创建一个测试chart文件夹
mkdir chart-demo
cd chart-demo
新建一个Chart文件
vi Chart.yaml
apiVersion: v2
name: chart-demo
description: A Helm chart for Kubernetes
type: application
version: 0.1.0 # chart的版本号
appVersion: 1.0.0 #chart应用默认的版本
保存
新建一个values.yaml
touch values.yaml
新建一个templates目录
mkdir templates
进入templates目录
cd templates
新建一个deployment.yaml
vi deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: web
name: web
spec:
replicas: 1
selector:
matchLabels:
app: web
strategy: {}
template:
metadata:
labels:
app: web
spec:
containers:
- image: nginx
name: nginx
resources: {}
保存
新建一个service.yaml
vi service.yaml
apiVersion: v1
kind: Service
metadata:
labels:
app: web
name: web
spec:
ports:
- name: 80-80
port: 80
protocol: TCP
targetPort: 80
selector:
app: web
type: NodePort
保存
新建一个NOTES.txt
vi NOTES.txt
随便写入一些内容,保存
新建一个_helpers.tpl
touch _helpers.tpl
新建一个templates目录
mkdir templates
此时chart_demo目录结构如下
安装tree工具查看目录结构
yum install tree -y
tree .
部署这个chart
helm install web /root/chart-demo/
命令查看可以看到已经部署成功
helm list
helm模板功能试用
Helm核心是模板,即模板化K8s YAML文件。部署多个应用时,将需要改
动的字段进行模板化,可动态传入
例如,现在要部署一个普通应用,它包含deployment.yaml与service.yaml
可以先将他的变量单独存入values文件中
vi values.yaml
#这里定义默认变量
name: "web2"
replicas: 1
labels:
project: demo
app: nginx
image:
repository: nginx
tag: "latest"
service:
port: 80
targetport: 80
type: ClusterIP
这样,将常用参数存入values
在deployment.yaml和service.yaml中只需要引用这些参数即可,如下
引用方式如下
vi deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Values.name }}
spec:
replicas: {{ .Values.replicas }}
selector:
matchLabels:
project: {{ .Values.labels.project }}
app: {{ .Values.labels.app }}
strategy: {}
template:
metadata:
labels:
project: {{ .Values.labels.project }}
app: {{ .Values.labels.app }}
spec:
containers:
- image: {{ .Values.image.repository }}:{{ .Values.image.tag }}
name: web
resources: {}
vi service.yaml
apiVersion: v1
kind: Service
metadata:
name: {{ .Values.name }}
spec:
ports:
- name: 80-80
port: {{ .Values.service.port }}
protocol: TCP
targetPort: {{ .Values.service.targetport }}
selector:
project: {{ .Values.labels.project }}
app: {{ .Values.labels.app }}
type: {{ .Values.service.type }}
执行可以创建成功
helm install web2 /root/chart-demo/
注意:在执行部署命令后面加--dry-run即可看到渲染效果而不执行部署,如下
helm install web2 /root/chart-demo/ --dry-run
helm动态传参使用
helm除了支持参数在values传递,还支持动态传参,如下
这个命令即可动态覆盖传输,修改原chart里面的值
helm install web3 /root/chart-demo/ --set name="web3" --set image.repository=httpd --set labels.app=httpd
对应的都动态渲染了
helm动态文件传参
heml在执行时会默认读取values里面的参数,可以直接引用valus里面的参数部署项目。同时,也可以在执行命令后加--set来动态渲染,覆盖values的参数,,,同时,helm也支持将动态参数都写入一个新的文件,在执行helm时指向这个文件,他会覆盖values内的参数,如下
新建一个abc.yaml的demo
vi abc.yaml
name: "web5"
replicas: 3
labels:
app: nginx
image:
repository: nginx
tag: "1.16"
service:
type: NodePort
保存
在执行helm部署的时候引用这个文件
helm install web5 /root/chart-demo/ --set name="web4" -f abc.yaml
成功
helm版本管理
升级
更新,例如将abc.yaml中的镜像版本由1.16升级为1.17
vi abc.yaml
name: "web6"
replicas: 3
labels:
project: ms
app: nginx
image:
repository: nginx
tag: "1.17"
service:
type: NodePort
将先前的install换成upgrade就是升级操作,
他要对已经存在的chart进行升级
helm upgrade web6 /root/chart-demo/ -f abc.yaml
通过
helm list
可以看到web6现在有两个版本
通过
helm history web6
可以看到web6过去的版本
回滚
helm与普通的deployment回滚最大区别是,helm是应用级别的,他是对整个应用的yaml进行操作,
拓展命令
回滚到上一个版本:
helm rollback web
查看历史版本:
helm history web
回滚到指定版本:
helm rollback web 2
卸载应用:
helm uninstall web
如例,这就是回滚到最开始的版本,服务名后面跟的数字就是版本号
可以看到。再看web6的历史版本后,会新出一个版本,后面显示是回滚到1版本
卸载应用:
和回滚一样,helm卸载也是应用级别的,不需要一个个服务删除,
卸载命令
helm uninstall xxx
例如,这就是将其他pod删除
附属
helm更新时可以添加description来备注信息,如例
查看详细信息的时候可以看到description变成了我们自定义的信息,如下
helm install web7 /root/chart-demo/ --description="nginx:1.17"
服务打包
helm的chart可以直接打包并复用,如下
chart-demo是我自建的chart
通过命令将其打包
helm package chart-demo/
且这个包可以直接使用不需要解压(
此处加了set变量是因为原chart在这个环境已经运行中,name冲突)
文章链接
发表评论