Helm干货!速度围观!
最近个人学习Helm,感觉Helm的功能很强大!分享一些干货给大家吧,希望有所帮助!
基本概念
Chart
一个Helm包,包含在K8S集群内,运行一个应用,工具或者服务所需要的所有的资源定义,类似于一个RPM包
Repository
Charts在这里被汇集并共享,它有点像Fedora Package Database,但是是用于kubernetes packages
Release
一个Release相当于一个Chart运行在K8S集群中的一个实例,一个Chart可以在相同集群中安装多次,每次安装,一个Release就被创建,例如MySQL chart,如果你想让两个数据库运行在你的集群,你可以安装相同的Chart多次,每一次一个release,它拥有自己的Release名字。
部署
可以参考如下的网站进行安装
https://helm.sh/doc/intro/install/
https://kubeapps.com/doc/getting-started/
Helm基础命令
基础命令篇
添加公有Repo
helm repo add https://charts.bitnami.com/bitnami
添加私有Repo
helm repo add --username=no-user --password admin@123 https://github.bithaha.com/helm
列出Repo
helm repo list
列出已经安装的charts
helm list
- 注意 默认是查看default命名空间下
- 若要切换,-n namespace即可,如:
helm list -n abc
搜索Repo
helm search repo nginx
安装helm包
helm install bitnami-nginx bitnami/nginx
- 注意 默认是安装到default命名空间下
- 若指定命名空间,请务必确保命名空间存在的情况之下再指定 :
helm install bitnami-nginx bitnami/nginx -n abc
helm设置参数
设置参数
helm install bithaha bithaha/test-helm --version 0.1.0 --set replicaCount=2,image.tag=1.21
这段意思大概是安装一个test-helm,版本是0.1.0,设置副本数量为2,images的版本是1.21
查看参数
helm get values test-helm
重置一下value
helm upgrade bithaha bithaha/test-helm --reset-values
显示所有的values
helm get values -a bithaha
helm创建自己的charts
创建chart
helm create qqq-helm
检查chart
helm lint qqq-helm
打包chart
helm package qqq-helm
Helm模板
官方文档
https://helm.sh/docs/chart_temlpate_guide/getting_started/
chart默认结构
tree qqai-helm
qqai-helm
|
>charts
>chart.yaml
>templates
——》 deployment.yaml
——》 _helpers.tpl
——》 hpa.yaml
——》 ingress.yaml
——》 NOTES.txt
——》 serviceaccount.yaml
——》 service.yaml
——》 tests
>test-connection.yaml
>values.yaml
templates目录
# 目录结构
>templates
——》 deployment.yaml
——》 _helpers.tpl
——》 hpa.yaml
——》 ingress.yaml
——》 NOTES.txt
——》 serviceaccount.yaml
——》 service.yaml
——》 tests
>test-connection.yaml
templates实战
1、在templates目录中创建一个configmap的YAML文件
cat >/root/qqai-helm/templates/configmap.yaml <<EOF
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Release.Name }}-configmap
data:
myvalue: "fook"
EOF
2、测试模板可用性
helm install --debug --dry-run qqai-helm-demo ./qqai-helm
常用的对象说明
Release
Release.Name: Install的时候的名称
Release.Namespace: 命名空间,这个没啥好解释的,默认值是default
Release.IsUpgrade:是升级,如果true那就升级了。
Values,Chart
Values: 来自于values.yaml中定义的参数,默认的Value是空值的
Chart: 来自于Chart.yaml中定义的参数,可以根据需要灵活搭配
Values文件
Values来自于多个源,下面是覆盖顺序,最后的优先
- Chart中的values.yaml文件
- 子Chart中的values.yaml文件
- 。。。。。。
Values实战
cat /root/qqai-helm/values.yaml <<EOF
banben: v1
shuiguo: apple
mingzi:
name: zhangsan
EOF cat /root/qqai-helm/configmap.yaml <<EOF
apiVersion: {{ .Values.banben}}
kind: ConfigMap
metadata:
name: {{ .Release.Name }}-configmap
data:
myvalue: "Hello World"
name: {{ .Values.mingzi.name }}
fruit: {{ .Values.shuiguo }}
EOF
验证一下吧
helm install --debug --dry-run qqai-helm-demo ./qqai-helm
模板函数与管道符
引用上述的案例吧
cat /root/qqai-helm/values.yaml <<EOF
banben: v1
shuiguo: apple
mingzi:
name: zhangsan
EOF cat /root/qqai-helm/configmap.yaml <<EOF
apiVersion: {{ .Values.banben}}
kind: ConfigMap
metadata:
name: {{ .Release.Name }}-configmap
data:
myvalue: "Hello World"
name: {{ .Values.mingzi.name }}
fruit: {{ .Values.shuiguo }}
EOF
若将上述案例添加相关的函数,可以像下面这样的做法
cat /root/qqai-helm/values.yaml <<EOF
banben: v1
shuiguo: apple
mingzi:
name: zhangsan
EOF cat /root/qqai-helm/configmap.yaml <<EOF
apiVersion: {{ .Values.banben}}
kind: ConfigMap
metadata:
name: {{ .Release.Name }}-configmap
data:
myvalue: "Hello World"
name: {{ .Values.mingzi.name |repeat 5 }}
age: {{ .Values.mingzi.age |default "18" }}
fruit: {{ .Values.shuiguo | upper | quote}}
EOF
流程控制概述
可以通过流程控制来控制helm的逻辑流程,保证部署的正确性。
流程控制-if/else: 如果或者
基本格式
{{ if PIPELINE }}
# Do something
{{ else if OTHER PIPELINE }}
# Do something
{{ else }}
# Default case
{{ end }}
范例
还是请我们老演员登场
cat /root/qqai-helm/values.yaml <<EOF
banben: v1
shuiguo: apple
mingzi:
name: zhangsan
# age: 30
EOF cat /root/qqai-helm/configmap.yaml <<EOF
apiVersion: {{ .Values.banben}}
kind: ConfigMap
metadata:
name: {{ .Release.Name }}-configmap
data:
myvalue: "Hello World"
name: {{ .Values.mingzi.name |repeat 5 }}
age: {{ .Values.mingzi.age |default "18" }}
fruit: {{ .Values.shuiguo | upper | quote}}
{{ if eq .Values.mingzi.age "30" }}mug: "true"{{ end }}
EOF
流程控制-with: 指定一个范围
这里需要一个范例来解释下with的具体含义
cat /root/qqai-helm/values.yaml <<EOF
mingzi:
name: zhangsan
age: ten
EOF cat /root/qqai-helm/configmap.yaml <<EOF
apiVersion: {{ .Values.banben}}
kind: ConfigMap
metadata:
name: {{ .Release.Name }}-configmap
data:
myvalue: "Hello World"
{{- with .Values.mingzi }}
name: {{ .name|default "lisi"|quote }}
age: {{ .age |upper|quote }}
{{- end }}
EOF
错误示范:
cat /root/qqai-helm/configmap.yaml <<EOF
apiVersion: {{ .Values.banben}}
kind: ConfigMap
metadata:
name: {{ .Release.Name }}-configmap
data:
myvalue: "Hello World"
{{- with .Values.mingzi }}
name: {{ .name|default "lisi"|quote }}
age: {{ .age |upper|quote }}
release: {{ .Release.Name }}
{{- end }}
EOF
流程控制-range: For循环
下面演示range如何循环起来
Values.yaml
cat /root/qqai-helm/values.yaml <<EOF
mingzi:
name: zhangsan
age: ten
job:
- sales
- engineer
- guestserver
EOF
configmap.yaml
cat /root/qqai-helm/configmap.yaml <<EOF
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Release.Name }}
data:
config: prometheus
{{- with .Values.mingzi }}
name: {{ mingzi|upper }}
{{- end}}
group: |-
{{- range .Values.job }}
- {{ .|title|quote }}
{{- end}}
EOF
Helm之变量--Variables
下面一个示范教你如何来定义变量
# 普通的定义
cat /root/qqai-helm/configmap.yaml <<EOF
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Release.Name }}-configmap
data:
config: "hello world"
{{- $relname :=.Release.Name -}}
{{- with .Values.favorite }}
drink: {{ .drink|default "coka" |quote }}
release: {{ $relname }}
{{- end}}
Templates
下面案例可以告诉你怎么定义这个模板
# 定义一个模板
{{- define "qqai-helm.labels" }}
labels:
generator: helm
date: {{ now | htmlDate }}
{{- end }}
apiVersion: v1
kind: ConfigMap
metadata:
name:{{ .Release.Name }}-configmap
# 此处引用模板
{{- template "qqai-helm-labels" }}
data:
myvalue: "hello world"
一定注意格式,一定注意格式,一定注意格式
NOTES.txt
帮助信息,在安装时可以提醒用户如何操作,随便写写就好,要让用户明白即可。
最后希望大家在写的过程中一定注意格式!注意格式!注意格式!第一次写,希望各位有所收货。
最新文章
- jsp 动态包含和静态包含
- Socket实现粗略的Android聊天功能
- java获取系统信息
- 每日代码 - 6/26 lambda表达式
- regexp_substr在oracle9i的替换方案
- js学习笔记—转载(闭包问题)
- git 技巧
- Struts 2中的constant详解
- GrowingIO 2016 数据驱动增长大会—— 一起做增长英雄
- LwIP之socket应用--WebServer和Modbus TCP
- CS Round#53 E Maxor
- EBS技术开发之VPD策略
- LeetCode之“字符串”:Restore IP Addresses
- Qt QComBox 文本框输入itemText &;&; 文本框查找item &;&; 本文框添加Item &;&;设置显示Item数量
- win10 开发mfc 64位 ocx控件
- js中函数对象创建的总结
- ECstore后台报表显示空白问题解决办法
- 对某个区间操作(sort,stable_sort,parital_sort,parital_sort_copy,nth_element,is_sorted)
- mongodb postgresql mysql jsonb对比
- c++ Pthread创建线程后必须使用join或detach释放线程资源
热门文章
- 详解GaussDB(DWS) 资源监控
- HandInDevil 的头发 (分 块)
- C#基础_类与对象的关系
- Java代码自动计算机
- Docker日常工作常用命令
- SUSE Linux Enterprise Server 12 使用二进制文件安装docker
- Gitea v1.17.0 正式发布 | 集成软件包管理器、容器镜像仓库
- springMVC配置时,静态资源和jsp文件路径没错但是访问时controller的请求报404错误。
- 华南理工大学 Python第5章课后小测-1
- v-contextmenujs 右键菜单点击