目錄
Helm概述
Heml是Kubernates的應用程序包管理器,類似於Linux上的yum、Mac上的brew,爲用戶方便的實現查找、發佈和使用Kubernates應用程序
Helm將Kubernates的資源(Deployment、Service、ConfigMap等)打包爲一個Charts,將幣制並測試後的Charts保存到Charts倉庫中進行存儲和發佈
Helm核心術語
Charts
也就是Heml中的程序包,包括了一個Kubernetes應用程序所運行時的鏡像、依賴關係、資源定義文件等
Repository
Charts倉庫,用於集中存儲和分佈Charts,類似於docker鏡像倉庫Hubor/Regestry,Git中的Gitlab/Github,Maven中的Nexus之類的倉庫中心
Config
應用程序安裝運行時的配置信息
Release
應用程序實例化配置後運行於Kubernetes集羣中的一個Charts實例。在一個k8s集羣中一個Charts可以指定不同Config多次安裝,每次安裝都會創建一個新的Release
Helm架構
Helm主要由Helm客戶端、Tiller服務端和Charts倉庫組成:
- Helm Client是命令行工具,基於gRPC協議與Timer Server交互,主要完成以下任務:
- 在本地開發Charts
- 管理Charts倉庫
- 提供了安裝、查找、卸載的命令與Tiller交互完成安裝、查找、卸載Charts
- Tiller Server是運行於Kubernetes集羣之上容器化服務應用,它接收來自Helm Client的請求,與Kubernates API Server進行交互,主要完成以下任務:
- 監聽Heml Client過來的請求
- 合併Charts與Config後構建一個Release
- 向Kubernetes集羣安裝Charts並對相應的Release進行跟蹤
- 升級和卸載Charts
Heml安裝與使用
安裝Helm Client
helm提供了二進制程序和編碼編譯安裝。爲了方便我們直接使用二進制程序的方式安裝
- 下載二進程程序包
wget tar -zxvf
- 將二進行文件加入PATH環境變量或複製到/usr/local/bin目錄中
- 查檢是否安裝正確
注意:Heml依賴與本地的kubeconfig配置文件才能與運行與kubenetes之上的Tiller服務器進行通信,所以確保本地的kubctl命令可以正常與kubenetes集羣連接,或本地至少有可用的kubeconfig配置
安裝Tiller Server
Tiller Server可以部署在Kuberntes集羣之上,也可部署於本地,只要與kubenetes集羣能夠正常通信就可以,下面我們就將Tiller部署在kubenetes集羣之上
- 創建RBAC權限
- 初始化Tiller Server,安裝Tiller Server的安裝
- 檢查是否部署成功
Helm基本操作命令
官方倉庫:https://hub.kubeapps.com/
release管理相關:
- install
- delete
- upgrade/rollback
- list
- history release的歷史信息
- status 獲取release狀態信息
chart管理相關:
- create
- fetch
- get
- inspect
- package
- verify
Heml Charts
Charts文件目錄結構
Chart.yaml
requirements.yaml
values.yaml
基它文件:
自定義Charts
自己搭建kubeapps
以上我們使用的是官方的Charts倉庫或第三方Charts倉庫,我們在企業內部更希望有自己的Charts倉庫,因此我們可以使用Kubeapps搭建自己的Charts倉庫
- 添加需要的第三方repo地址
helm repo add bitnami https://charts.bitnami.com/bitnami
- 使用Heml進行安裝
helm install --name kubeapps --namespace kubeapps bitnami/kubeapps
- 創建所需要的ServiceAccount並做相關Binding
kubectl create serviceaccount kubeapps-operator kubectl create clusterrolebinding kubeapps-operator --clusterrole=cluster-admin --serviceaccount=default:kubeapps-operator
- 獲取Token
kubectl get secret $(kubectl get serviceaccount kubeapps-operator -o jsonpath='{.secrets[].name}') -o jsonpath='{.data.token}' | base64 --decode eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6Imt1YmVhcHBzLW9wZXJhdG9yLXRva2VuLWprdDV6Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6Imt1YmVhcHBzLW9wZXJhdG9yIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiOWUwZTg3MzAtMGY1Ni0xMWU5LTgxZmEtMDY5ODNlMDAwMDgxIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50OmRlZmF1bHQ6a3ViZWFwcHMtb3BlcmF0b3IifQ.GNx7DpbLc5ds05vKorIVMBluk13cx2AyI9N07l_EKwNudUyPcH5RH5O2-MHweokdEZA-3FVgTpYV2hH3CsdsWA2bR2hOcGh7pkRAxRC04KTk_VVKe7NcSifksdaADm6BRxEjtcY54Yjt6avS6uiUxcVcxc6kiNPuREz3RBt53GpPkqR-efXSaDNhJqYaivWHjL6j4dcXblLhEL55aoBCggmcrRJgvisnmNPmHT-R3LweB2TbgVbAq-lb2I4XRCAP2meJGJb0-1SmdC_k4oxKxa3TIi1nG7W0j0qkdN1Gmjp03Tgr7CwvI6dvSMEhq2EfOXV9OmNBwO1p5-i5fiQaVw
- 使用獲取的Token進行登錄
Helm實戰:部署EFK日誌管理系統