有show me the money内味了
先来张示意图压压惊。(这次决定不用手绘来吓唬人了)
套用一哈官方的话就是
What is Helm?
Helm gives teams the tools they need to collaborate when creating, installing, and managing applications inside of Kubernetes.
With Helm, you can...
Find prepackaged software (charts) to install and use
Easily create and host your own packages
Install packages into any Kubernetes cluster
Query the cluster to see what packages are installed and running
Update, delete, rollback, or view the history of installed packages
Helm makes it easy to run applications inside Kubernetes.
对对对。你就理解成一个LINUX YUM懒人包好了。
有多懒呢。一条命令你就可以在kubernetes中构建任意一个复杂的高可用集群
那要不先装一下吧,作为一名网管也就会先装一下了
①下载链接https://github.com/helm/helm/releases #下载v3.x版本
wget https://github.com/helm/helm/releases/xxxtar -zvxf xxxmv linux-amd64/helm /usr/binhelm version
②配置国内Chart仓库
微软仓库http://mirror.azure.cn/kubernetes/charts
Aliyunhttps://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
helm repo add stable http://mirror.azure.cn/kubernetes/chartshelm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/chartshelm repo updatehelm repo listNAME URL stable http://mirror.azure.cn/kubernetes/charts aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
简简单单伐?接下来讲一下基础使用
①基础命令使用
事例:部署一个mysql
helm search repo mysqlhelm show values stable/mysql#查看stable/mysql的chart values## mysql image version## ref: https://hub.docker.com/r/library/mysql/tags/##image: "mysql"imageTag: "5.7.28"strategy: type: Recreate。。。helm install db stable/mysql#如果没有pv的话,可能需要满足一个8GB大小的PV作为存储
②自定义chart配置选项(仍然测试mysql)
helm show values stable/mysql > values.yamlhelm install db2 -f values.yaml stable/mysql#修改完配置以后指定chart配置
③查看stable/mysql的chart结构
helm pull stable/mysql --untar#下载stable/mysql的chart包并解压[ec2-user@ip-172-16-0-105 mysql]$ tree.├── Chart.yaml├── README.md├── templates│ ├── configurationFiles-configmap.yaml│ ├── deployment.yaml│ ├── _helpers.tpl│ ├── initializationFiles-configmap.yaml│ ├── NOTES.txt│ ├── pvc.yaml│ ├── secrets.yaml│ ├── serviceaccount.yaml│ ├── servicemonitor.yaml│ ├── svc.yaml│ └── tests│ ├── test-configmap.yaml│ └── test.yaml└── values.yaml
学废了么?
现在来拆解一下结构。
①先创建一个自己的chart包
helm create mychart#创建一个名称为“mychart”的charttree .#查看结构.├── mychart │ ├── charts #定义了chart的依赖│ ├── Chart.yaml #定义了chart相关的基本信息,比如名称,版本等│ ├── templates #包含了所有这个chart的yaml│ │ ├── deployment.yaml│ │ ├── _helpers.tpl #模板│ │ ├── ingress.yaml│ │ ├── NOTES.txt #部署后输出的信息│ │ ├── serviceaccount.yaml│ │ ├── service.yaml│ │ └── tests│ │ └── test-connection.yaml│ └── values.yaml #定义了所有动态会修改的变量,修改后会被templates引用
②用一个nginx-deployment来调试一下这个chart包
rm -rf mychart/templates/*kubectl create deployment mychart --image=nginx -o yaml --dry-run > mychart/templates/deployment.yamlvim mychart/templates/deployment.yamlapiVersion: apps/v1kind: Deploymentmetadata: name: {{ .Values.name }} #从values.yaml里取name的值spec: replicas: {{ .Values.replicas }} #从values.yaml里取replicas的值 selector: matchLabels: app: mychart template: metadata: labels: app: mychart spec: containers: - image: {{ .Values.image }}:{{ .Values.imageTag }} #从values.yaml里取image和imageTag的值 name: nginx vim mychart/values.yamname: nginxreplicas: 3image: nginximageTag: 1.16helm install nginx mychart/helm get manifest nginx#查看chart修改信息vim mychart/values.yaml#修改imageTag:1.17helm upgrade nginx mychart/#升级charthelm get manifest nginxhelm rollback nginx#回滚charthelm get manifest nginxhelm package mychart/#打包charthelm uninstall nginx#卸载chart
初步看上去非常眼熟吧。简直跟prometheus的rules使用方法如出一辙。
这里主要都是用了golang的标准库go template
所以这玩意儿到底好用在哪呢?看上去还是直接写yaml简单嘛
稍安勿躁,下一章节会整一个通用的微服务helm模板来跟普通的yaml部署battle一下(如果有下一章的话)