簡介
- Helm 是 Deis 開發的一個用於 Kubernetes 應用的包管理工具,主要用來管理 Charts。有點類似於 Ubuntu 中的 APT 或 CentOS 中的 YUM。
- Helm Chart 是用來封裝 Kubernetes 原生應用程序的一系列 YAML 文件。可以在你部署應用的時候自定義應用程序的一些 Metadata,以便於應用程序的分發。
- 對於應用發佈者而言,可以通過 Helm 打包應用、管理應用依賴關係、管理應用版本併發布應用到軟件倉庫。
- 對於使用者而言,使用 Helm 後不用需要編寫複雜的應用部署文件,可以以簡單的方式在 Kubernetes 上查找、安裝、升級、回滾、卸載應用程序。
組件及相關術語
- Helm 是一個命令行下的客戶端工具。主要用於 Kubernetes 應用程序 Chart 的創建、打包、發佈以及創建和管理本地和遠程的 Chart 倉庫。
- Tiller 是 Helm 的服務端,部署在 Kubernetes 集羣中。Tiller 用於接收 Helm 的請求,並根據 Chart 生成 Kubernetes 的部署文件( Helm 稱爲 Release ),然後提交給 Kubernetes 創建應用。Tiller 還提供了 Release 的升級、刪除、回滾等一系列功能。
- Chart Helm 的軟件包,採用 TAR 格式。類似於 APT 的 DEB 包或者 YUM 的 RPM 包,其包含了一組定義 Kubernetes 資源相關的 YAML 文件
- Repoistory Helm 的軟件倉庫,Repository 本質上是一個 Web 服務器,該服務器保存了一系列的 Chart 軟件包以供用戶下載,並且提供了一個該 Repository 的 Chart 包的清單文件以供查詢。Helm 可以同時管理多個不同的 Repository。
- Release 使用
helm install
命令在 Kubernetes 集羣中部署的 Chart 稱爲 Release。注:需要注意的是:Helm 中提到的 Release 和我們通常概念中的版本有所不同,這裏的 Release 可以理解爲 Helm 使用 Chart 包部署的一個應用實例。
工作原理
這張圖描述了 Helm 的幾個關鍵組件 Helm(客戶端)、Tiller(服務器)、Repository(Chart 軟件倉庫)、Chart(軟件包)之間的關係。
Chart Install 過程
- Helm 從指定的目錄或者 TAR 文件中解析出 Chart 結構信息。
- Helm 將指定的 Chart 結構和 Values 信息通過 gRPC 傳遞給 Tiller。
- Tiller 根據 Chart 和 Values 生成一個 Release。
- Tiller 將 Release 發送給 Kubernetes 用於生成 Release。
Chart Update 過程
- Helm 從指定的目錄或者 TAR 文件中解析出 Chart 結構信息。
- Helm 將需要更新的 Release 的名稱、Chart 結構和 Values 信息傳遞給 Tiller。
- Tiller 生成 Release 並更新指定名稱的 Release 的 History。
- Tiller 將 Release 發送給 Kubernetes 用於更新 Release。
Chart Rollback 過程
- Helm 將要回滾的 Release 的名稱傳遞給 Tiller。
- Tiller 根據 Release 的名稱查找 History。
- Tiller 從 History 中獲取上一個 Release。
- Tiller 將上一個 Release 發送給 Kubernetes 用於替換當前 Release。
Chart 處理依賴說明
- Tiller 在處理 Chart 時,直接將 Chart 以及其依賴的所有 Charts 合併爲一個 Release,同時傳遞給 Kubernetes。因此 Tiller 並不負責管理依賴之間的啓動順序。Chart 中的應用需要能夠自行處理依賴關係。
安裝
- 下載二進制包 releases,然後解壓將二進制包
heml
,tiller
複製到/usr/bin/
下 - 部署 RBAC,將
rbac-config.yaml
文件保存到本地,然後執行kubectl create -f rbac-config.yaml
- 執行
helm init -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.12.1 --service-account tiller
進行初始化,如果已經執行過初始化,可以添加--upgrade
選項進行再次初始化 - 添加阿里倉庫,
helm repo add https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
,查看helm repo list
,更新helm repo update
- 注:
helm init
在缺省配置下,Helm 會利用gcr.io/kubernetes-helm/tiller
鏡像在Kubernetes集羣上安裝配置 Tiller;並且利用https://kubernetes-charts.storage.googleapis.com
作爲缺省的 stable repository 的地址。由於在國內可能無法訪問"gcr.io", "storage.googleapis.com"
等域名,阿里雲容器服務爲此提供了鏡像站點,但是版本比較老。 - 執行
helm version
進行驗證 - helm 命令自動補全:
helm completion bash > /etc/bash_completion.d/helm
基礎操作
- 查找
helm search CHARTNAME
- 檢查
helm inspect CHARTNAME
- 安裝
helm install --name mem1 stable/memcached
- 獲取狀態信息
helm status mem1
- 列出
helm list [-a]
- 刪除
helm delete [--purge] mem1
- 下載
helm fetch stable/redis
- 創建
helm create CHARTNAME
- 語法檢測
helm lint CHARTNAME
- 打包
helm package CHARTNAME
- 顯示狀態
helm status NAME
helm serve
實例 部署 efk 日誌系統
1、準備 charts
helm fetch stable/elasticsearch
helm fetch stable/fluentd-elasticsearch
helm fetch stable/kibana
# kibana 要和 elasticsearch 版本一致
2、解壓修改各 values.yaml
配置文件
- elasticsearch/values.yaml
- 修改
master.persistence.enabled
爲 false,不啓用存儲卷 - 先安裝 elasticsearch ,保存結果中的地址,如
els1-elasticsearch-client.efk.svc.cluster.local
- 修改
- fluentd-elasticsearch/values.yaml
- 修改
image.repository
爲docker.io/mirrorgooglecontainers/fluentd-elasticsearch
- 修改
elasticsearch.host
爲上一步中的地址,如els1-elasticsearch-client.efk.svc.cluster.local
- 修改
- kibana/values.yaml
- 修改
files.kibana.yml.elasticsearch.url
爲http://els1-elasticsearch-client.efk.svc.cluster.local:9200
- 修改
service.type
爲NodePort
,進行端口映射
- 修改
3、安裝各組件
kubect create ns efk
# 創建名稱空間helm install --name els1 --namespace=efk -f ./elasticsearch/values.yaml stable/elasticsearch
# 記錄輸出結果中地址,類似els1-elasticsearch-client.efk.svc.cluster.local
helm install --name flu1 --namespace=efk -f ./fluentd-elasticsearch/values.yaml stable/fluentd-elasticsearch
helm install --name kib1 --namespace=efk -f ./kibana/values.yaml stable/kibana
4、訪問 Kibana
- 查看端口:
kubectl get svc -n efk -l app=kibana
- 訪問:
http://IP:Port
,無賬號密碼