一、helm概述
Helm核心是模板,即模板化K8s YAML文件。
通过模板实现Chart高效复用,当部署多个应用时,可以将差异化的字段进行模板化,在部署时使用-f或
者–set动态覆盖默认值,从而适配多个应用
helm工作流程:
二、helm客户端安装
使用helm很简单,你只需要下载一个二进制客户端包即可,会通过kubeconfig配置–共用k8s客户端(kubectl)的证书配置(通常
$HOME/.kube/config)来连接Kubernetes。
项目地址:https://github.com/helm/helm
下载Helm客户端(下载解压,然后把二进制文件拷贝到系统bin目录下):
wget https://get.helm.sh/helm-v3.4.2-linux-amd64.tar.gz
tar zxvf helm-v3.4.2-linux-amd64.tar.gz
mv linux-amd64/helm /usr/bin/
三、helm的资源文件包:chart
chart资源配置目录结构:
• charts:目录里存放这个chart依赖的所有子chart。
• Chart.yaml:用于描述这个 Chart的基本信息,包括名字、描述信息以及版本等。
• values.yaml :用于存储 templates 目录中模板文件中用到变量的值。
• templates: 目录里面存放所有yaml模板文件。
• NOTES.txt :用于介绍Chart帮助信息, helm install 部署后展示给用户。例如:
如何使用这个 Chart、列出缺省的设置等。
• _helpers.tpl:放置模板的地方,可以在整个 chart 中重复使用。
四、helm客户端
4.1 基本命令
命令 | 描述 |
---|---|
completion | 命令补全,source <(helm completion bash) |
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客户端版本 |
4.1 helm管理应用的生命周期
• helm create 创建Chart示例
• helm install 部署
• helm upgrade 更新
• helm rollback 回滚
• helm uninstall 卸载
五、创建一个chart示例
mkdir mychart # 创建一个chart根目录
cd mychart
touch Chart.yaml
touch values.yaml
mkdir templates
1、Chart.yaml内容
apiVersion: v2
name: web-chart
description: this is my web-chart
type: application
version: 0.1.0
appVersion: 1.0.10
2、values.yaml内容(变量值定义,template中的变量引用,将从这个文件取值)
relicaCount: 1
image:
respository: nginx
tag: latest
label: nginx
service:
type: ClusterIp
port: 80
targetPort: 80
3、创建template文件
cd templates
touch deployment.yaml
touch service.yaml
touch NOTES.txt
touch _helpers.tpl
4、deployment.yaml文件内容:
# .Values开头的变量,值从values.yaml文件中获取,变量引用使用“{{ }}”
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Release.Name }}
spec:
replicas: {{ .Values.relicaCount }}
selector:
matchLabels:
app: {{ .Values.label }}
strategy: {}
template:
metadata:
labels:
app: {{ .Values.label }}
spec:
containers:
- image: {{ .Values.image.respository }}:{{ .Values.image.tag }}
name: nginx
resources: {}
5、service.yaml文件内容:
# .Values开头的变量,值从values.yaml文件中获取,变量引用使用“{{ }}”
apiVersion: v1
kind: Service
metadata:
# .Release是系统变量,可以在运行安装命令时传入
name: {{ .Release.Name }}
spec:
ports:
- port: {{ .Values.service.port }}
protocol: TCP
targetPort: {{ .Values.service.targetPort }}
selector:
app: {{ .Values.label }}
type: NodePort
六、helm部署应用
# mychart是目录地址(上面步骤创建的),web是应用名---自定义
helm install web-ng mychart
查看部署的应用:
helm list -n default
查看部署的Pod:
kubectl get pods,svc
部署效果:
七、helm升级应用
- 第一种方式:
# vi values.yaml #任意路径
vi values.yaml # 修改变量值
# 执行升级命令 web-ng是应用名,mychart是一个chart的目录名
helm upgrade -f values.yaml web-ng mychart
- 第二种方式(set设置变量值,覆盖values文件的对应变量值):
helm upgrade --set image.tag=1.17 web-ng mychart
八、helm安装、升级前测试(不实际执行)
helm upgrade -f values.yaml web-ng mychart --dry-run
helm install web-ng mychart --dry-run