helm安裝配置
簡介
helm是kubernetes的包管理工具,用於簡化部署和管理 Kubernetes 應用。用來管理charts——預先配置好的安裝包資源。
Helm和charts的主要作用:
- 應用程式封裝
- 版本管理
- 依賴檢查
- 便於應用程式分發
helm是一個C/S框架的軟體,helm相當於一個客戶端,tiller是一個服務端
- Helm CLI 是 Helm 客戶端,可以在本地執行
- Tiller 是伺服器端元件,在 Kubernetes 群集上執行,並管理 Kubernetes 應用程式的生命週期
- Repository 是 Chart 倉庫,Helm客戶端通過HTTP協議來訪問倉庫中Chart的索引檔案和壓縮包
安裝
安裝之前需要先配置好kubeconfig
,kubectl
可以正常使用就表示kubeconfig
已經配置正確,也可以通過環境變數KUBECONFIG
指定helm使用的kubeconfig
安裝helm
# 如下地址下載helm二進位制檔案 # 解壓之後放在自己的PATH路徑下 # https://github.com/helm/helm/releases mkdir -pv helm && cd helm wget https://storage.googleapis.com/kubernetes-helm/helm-v2.9.1-linux-amd64.tar.gz tar xf helm-v2.9.1-linux-amd64.tar.gz sudo mv linux-amd64/helm /usr/local/bin rm -rf linux-amd64 # 檢視版本,不顯示出server版本,因為還沒有安裝server helm version 複製程式碼
簡單安裝tiller(本次實驗採用)
# 部署 tiller helm init --upgrade -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.9.1 \ --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts # 檢視 kubectl get pods -n kube-system -l app=helm kubectl get svc -n kube-system -l app=helm 複製程式碼
安全性更高的安裝tiller(tls)
helm init --upgrade -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.9.1 \ --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts \ --tiller-tls \ --tiller-tls-verify \ --tiller-tls-cert=cert.pem \ --tiller-tls-key=key.pem \ --tls-ca-cert=ca.pem \ --service-account=tiller # 其他命令都需要使用 tls # --tls 複製程式碼
配置rbac
cat >helm-rbac-config.yaml<<EOF apiVersion: v1 kind: ServiceAccount metadata: name: tiller namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRoleBinding metadata: name: tiller roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: tiller namespace: kube-system EOF kubectl create -f helm-rbac-config.yaml # 配置tiller使用建立的ServiceAccount kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}' 複製程式碼
檢視狀態
# 檢視pod啟動情況 kubectl get pod -n kube-system -l app=helm # 再次檢視版本,顯示出server版本 helm version 複製程式碼
簡單使用
檢視可用charts
# 更新charts列表 helm repo update # 搜尋可用charts helm search helm search mysql 複製程式碼
檢視已經安裝的charts
helm list # helm ls 複製程式碼
安裝測試
以下兩種部署方式任選一種
使用命令列模式部署
# 使用命令列模式部署 helm install -n mariadb-test \ --set persistence.enabled=false,mariadbRootPassword=will,mariadbUser=will,mariadbPassword=will,mariadbDatabase=will \ stable/mariadb 複製程式碼
使用配置檔案定製部署
# 使用配置檔案方式部署 # 檢視可配置項 helm inspect values stable/mariadb # 獲取所有可配置項(去行空行和註釋) helm inspect values stable/mariadb | egrep -v '^\s*#|^$' # 配置 cat >config.yml<<EOF usePassword: true mariadbRootPassword: will mariadbUser: will mariadbPassword: will mariadbDatabase: will persistence: enabled: false EOF # 部署 helm install -n mariadb-test -f config.yml stable/mariadb 複製程式碼
測試
# 檢視狀態 helm ls kubectl get pods kubectl get svc # 連線測試 kubectl run mariadb-cli --image=bitnami/mariadb:10.1.28-r1 -i --tty bash mysql -hmariadb-test-mariadb -uwill -pwill will show databases; select version(); select user(); # 刪除 mariadb-cli kubectl delete deploy mariadb-cli # 刪除部署 helm delete mariadb-test --purge 複製程式碼
自定義chart
建立chart
# 建立 helm create hello # chart目錄結構介紹 hello ├── charts # 本chart依賴的chart ├── Chart.yaml # 描述chart的基本資訊,如名稱版本等 ├── templates # kubernetes manifest檔案模板目錄 │├── deployment.yaml │├── _helpers.tpl │├── ingress.yaml │├── NOTES.txt # 純文字檔案,可在其中填寫chart的使用說明 │└── service.yaml └── values.yaml # chart配置的預設值 # 對chart的模板和配置進行測試 helm install --dry-run --debug ./ 複製程式碼
測試安裝chart
# 安裝 helm install -n hello-test ./ # 檢視 helm ls kubectl get pods kubectl get svc # 埠轉發 export POD_NAME=$(kubectl get pods --namespace default -l "app=hello,release=hello-test" -o jsonpath="{.items[0].metadata.name}") kubectl port-forward $POD_NAME 8080:80 # 訪問 curl http://127.0.0.1:8080 # 刪除 helm delete hello-test --purge 複製程式碼
chart分發
# 打包為壓縮包 helm package ./