1. helm簡介
1.1 為什么需要helm
在沒使用helm之前,向kubernetes
部署應用,我們要依次部署deployment
,service
,configMap
等,步驟較繁瑣。況且隨着很多項目微服務化,復雜的應用在容器中部署以及管理顯得較為復雜.
helm
通過打包的方式,支持發布的版本管理和控制,很大程度上簡化了Kubernetes
應用的部署和管理
1.2 helm中幾個概念
Helm
可以理解為Kubernetes
的包管理工具,可以方便地發現、共享和使用為Kubernetes
構建的應用,它包含幾個基本概念
- Chart: 一個Helm包,其中包含了運行一個應用所需要的鏡像、依賴和資源定義等,還可能包含Kubernetes集群中的服務定義
可以理解為docker的image
- Release: 在
Kubernetes
集群上運行的Chart
的一個實例。在同一個集群上,一個Chart
可以安裝很多次。每次安裝都會創建一個新的release
可以理解為docker的container實例
- Repository: 用於發布和存儲 Chart 的倉庫。
1.3 helm用途
做為Kubernetes
的一個包管理工具,Helm具有如下功能:
- 創建新的
chart
chart
打包成tgz
格式- 上傳
chart
到chart
倉庫或從倉庫中下載 chart- 官方
chart
倉庫是: https://hub.helm.sh
- 官方
- 在
Kubernetes
集群中安裝或卸載chart
- 用
Helm
管理安裝的chart
的發布周期
2. helm安裝
- 注意:這里安裝的是
helm v3.2.4
,如需下載更新的版本,可以至github官方repo選擇
# 如無需更換版本,直接執行下載
wget https://get.helm.sh/helm-v3.2.4-linux-amd64.tar.gz
# 解壓
tar -zxvf helm-v3.2.4-linux-amd64.tar.gz
# 進入到解壓后的目錄
cd linux-amd64/
# 賦予權限
chmod a+x /usr/local/bin/helm
# 查看版本
helm version
3. helm的基本使用
- 注意:這里的使用是針對
Helm v3
,因為v3
版本和v2
某些命令方面差距蠻大的,不完全兼容!!所以針對v2
的操作這里就不贅述了
3.1 安裝chart倉庫里面的chart
可以直接使用官方的chart倉庫或者其他倉庫來安裝一些chart
- 下面以官方倉庫的一個redis為例
# 添加倉庫
helm repo add choerodon https://openchart.choerodon.com.cn/choerodon/c7n
# 安裝
helm install choerodon/redis --version 0.2.5
安裝完成! 有沒有很簡單!!
3.2 創建自定義的chart
這一節介紹以下如何自定義一個chart,並應用與平時項目中
3.2.1 文件目錄結構
.
├── Chart.yaml
├── templates
| ├── deployment.yaml
| └── service.yaml
├── values.yaml
一個基本的自定義chart的文件目錄結構大概是如上:
- Chart.yaml: 定義當前
chart
的基本metadata, 比如name,tag啥的 - templates: 這個文件夾下放當前chart需要的一些yaml資源清單
- 資源清單支持
變量模版語法
- 資源清單支持
- values.yaml: 定義變量,可被
template
下的yaml資源清單使用
3.2.2 自定義chart的示例
第一步: 准備自定義chart相關文件
# 1. 新建一個文件夾demo存放chart
mkdir demo && cd demo && mkdir templates
# 2. 新建Chart.yaml
cat << EOF > Chart.yaml
name: hello-world
version: 1.0.0
EOF
# 3. 新建./templates/deployment.yaml
# 注意image部分使用了變量的模板語法,可以動態插入
cat << EOF > ./templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: tocgenerator-deploy
labels:
app: tocgenerator-deploy
spec:
replicas: 1
selector:
matchLabels:
app: tocgenerator-server
template:
metadata:
labels:
app: tocgenerator-server
spec:
containers:
- name: tocgenerator
image: {{ .Values.image.repository }}:{{ .Values.image.tag }}
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
EOF
# 4. 新建./templates/service.yaml
cat << EOF > ./templates/service.yaml
apiVersion: v1
kind: Service
metadata:
name: tocgenerator-svc
spec:
type: NodePort
selector:
app: tocgenerator-server
ports:
- protocol: TCP
port: 80
targetPort: 80
nodePort: 30075
EOF
# 5. 新建values.yaml
cat << EOF > values.yaml
image:
repository: lzw5399/tocgenerator
tag: '951'
EOF
第二步: 使用上面的自定義chart
# 將chart實例化成release
# 格式:helm install [RELEASE-NAME] [CHART-PATH]
helm install testname .
# 查看release
helm ls
# 安裝成功!!
3.3 helm的基本操作補充
3.3.1 查看release
# 列出已經部署的Release
helm ls
# 查詢一個特定的Release的狀態
helm status <RELEASE_NAME>
# 查看被移除了,但保留了歷史記錄的release
helm ls --uninstalled
3.3.2 安裝release
# 安裝
helm install <RELEASE-NAME> <CHART-PATH>
# 命令行指定變量
helm install --set image.tag=233 <RELEASE-NAME> <CHART-PATH>
3.3.3 更新release
# 更新操作, flag是可選操作
helm upgrade [FLAG] <RELEASE> <CHART-PATH>
# 指定文件更新
helm upgrade -f myvalues.yaml -f override.yaml <RELEASE-NAME> <CHART-PATH>
# 命令行指定變量
helm upgrade --set foo=bar --set foo=newbar redis ./redis
3.3.4 卸載release
# 移除Release
helm uninstall <RELEASE_NAME>
# 移除Release,但保留歷史記錄
# 可以通過以下查看:helm ls --uninstalled
# 可以通過以下回滾:helm rollback <RELEASE> [REVISION]
helm uninstall <RELEASE_NAME> --keep-history
3.3.5 回滾release
# 更新操作, flag是可選操作
helm upgrade [FLAG] <RELEASE> <CHART-PATH>