最近個人學習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
幫助資訊,在安裝時可以提醒用戶如何操作,隨便寫寫就好,要讓用戶明白即可,
最后希望大家在寫的程序中一定注意格式!注意格式!注意格式!第一次寫,希望各位有所識訓,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/530558.html
標籤:其他
上一篇:最長公共子序列問題
