1、创建一个自定义的Chart
helm create mychart 【创建一个chart】
cd mychart/templates/
rm -rf * 【删除当前目录下所有的文件(慎用)】
kubectl create deployment web --image=nginx --dry-run -o yaml > deployment.yaml 【创建一个deployment资源文件并尝试运行(不是真正的运行)】
kubectl create deployment web --image=nginx【执行一个deployment】
也可以直接复制下面的 deployment.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: web
name: web
spec:
replicas: 1
selector:
matchLabels:
app: web
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
app: web
spec:
containers:
- image: nginx
name: nginx
resources: {}
status: {}
kubectl get pod 【查看pod】
kubectl expose deployment web --port=80 --target-port=80 --type=NodePort --dry-run -o yaml > service.yaml 【创建一个svc的资源文件】
直接复制service.yaml:
apiVersion: v1
kind: Service
metadata:
creationTimestamp: null
labels:
app: web
name: web
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: web
type: NodePort
status:
loadBalancer: {}
kubectl delete deployment web 【删除web这个pod】
cd ../..【返回到有mychart文件夹的这个目录】
helm install web mychart/ 【构建一个helm】
kubectl get svc 【查看当前已经创建的svc】
直接访问:http://192.168.204.182:32580/
2、结构说明
mychart/
├── charts
├── Chart.yaml
├── templates
│ ├── deployment.yaml
│ ├── _helpers.tpl
│ ├── ingress.yaml
│ ├── NOTES.txt
│ └── service.yaml
└── values.yaml
Chart.yaml:用于描述这个 Chart 的基本信息,包括名字、描述信息以及版本等。
values.yaml :用于存储 templates 目录中模板文件中用到变量的值。
Templates: 目录里面存放所有 yaml 模板文件。
charts:目录里存放这个 chart 依赖的所有子 chart。
NOTES.txt :用于介绍 Chart 帮助信息, helm install 部署后展示给用户。例如:如何使用这个 Chart、列出缺省的设置等。
_helpers.tpl:放置模板助手的地方,可以在整个 chart 中重复使用
创建 Chart 后,接下来就是将其部署:
helm install web mychart/
也可以打包推送的 charts 仓库共享别人使用。
# helm package mychart/
mychart-0.1.0.tgz
helm install <release-name> ./mychart-0.1.0.tgz -n <namespace>
3、应用升级
helm upgrade 【helm名】 【helm相关配置的名称】
4、chart 模板
Helm 最核心的就是模板,即模板化的 K8S manifests 文件。
它本质上就是一个 Go 的 template 模板。Helm 在 Go template 模板的基础上,还会增加很
多东西。如一些自定义的元数据信息、扩展的库以及一些类似于编程形式的工作流,例如
条件语句、管道等等。这些东西都会使得我们的模板变得更加丰富。
有了模板,我们怎么把我们的配置融入进去呢?用的就是这个 values 文件。这两部分内容
其实就是 chart 的核心功能。
部署 nginx 应用,熟悉模板使用
# helm create nginx
# vi nginx/Chart.yaml
apiVersion: v2
name: nginx
description: A Helm chart for Kubernetes
type: application
version: 0.1.0
appVersion: 1.15
# vi nginx/values.yaml
replicas: 3
image: nginx
tag: 1.15
serviceport: 80
targetport: 80
label: nginx
# vi nginx/templates/NOTES.txt
hello
# vi nginx/templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: {{ .Values.label }}
name: {{ .Release.Name }}
spec:
replicas: {{ .Values.replicas }}
selector:
matchLabels:
app: {{ .Values.label }}
template:
metadata:
labels:
app: {{ .Values.label }}
spec:
containers:
- image: {{ .Values.image }}:{{ .Values.tag }}
name: web
# vi nginx/templates/service.yaml
apiVersion: v1
kind: Service
metadata:
labels:
app: {{ .Values.label }}
name: {{ .Release.Name }}
spec:
ports:
- port: {{ .Values.serviceport }}
protocol: TCP
targetPort: {{ .Values.targetport }}
selector:
app: {{ .Values.label }}
type: NodePort
values.yaml配置文件可以删除一个没用的东西
上面那些配置好后,就使用
helm install web3 nginx/ 【部署】
helm get manifest web3 【查看实际的模板被渲染过后的资源文件】
Helm 也提供了--dry-run --debug 调试参数,帮助你验证模板正确性。在执行 helm
install 时候带上这两个参数就可以把对应的 values 值和渲染的资源清单打印出来,而不
会真正的去部署一个 release。
比如我们来调试上面创建的 chart 包:
helm install --dry-run web3 nginx/ 【也可以尝试运行然后查看资源文件】
这个 deployment 就是一个 Go template 的模板,这里定义的 Release 模板对象属于 Helm
内置的一种对象,是从 values 文件中读取出来的。这样一来,我们可以将需要变化的地方
都定义变量。
内置对象
刚刚我们使用 {{.Release.Name}}将 release 的名称插入到模板中。这里的 Release 就
是 Helm 的内置对象,下面是一些常用的内置对象:
Release.Name |
release 名称 |
Release.Name |
release 名字 |
Release.Namespace |
release 命名空间 |
Release.Service |
release 服务的名称 |
Release.Revision |
release 修订版本号,从 1 开始累加 |
Values
Values 对象是为 Chart 模板提供值,这个对象的值有 4 个来源:
chart 包中的 values.yaml 文件
父 chart 包的 values.yaml 文件
通过 helm install 或者 helm upgrade 的 -f 或者--values 参数传入的自定义的 yaml 文件
通过 --set参数传入的值
chart 的 values.yaml 提供的值可以被用户提供的 values 文件覆盖,而该文件同样可以被 --set 提供的参数所覆盖。
helm upgrade web3 --set replicas=5 nginx/
helm history web3 【查看历史】
升级、回滚和删除
发布新版本的 chart 时,或者当您要更改发布的配置时,可以使用该 helm upgrade 命令。
# helm upgrade --set imageTag=1.17 web nginx
# helm upgrade -f values.yaml web nginx
如果在发布后没有达到预期的效果,则可以使用 helm rollback 回滚到之前的版本。
例如将应用回滚到第一个版本:
helm rollback web3 1
卸载发行版,请使用以下 helm uninstall 命令:
helm uninstall web3
查看历史版本配置信息
helm get all --revision 1 web3
5、开发自己的 chart
1、先创建模板
2、修改 Chart.yaml,Values.yaml,添加常用的变量
3、 在 templates 目录下创建部署镜像所需要的 yaml 文件,并变量引用 yaml 里经常变动
的字段