k8s之Helm初識

簡介
  • 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(軟件包)之間的關係。
Helm 工作原理

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.repositorydocker.io/mirrorgooglecontainers/fluentd-elasticsearch
    • 修改 elasticsearch.host 爲上一步中的地址,如 els1-elasticsearch-client.efk.svc.cluster.local
  • kibana/values.yaml
    • 修改 files.kibana.yml.elasticsearch.urlhttp://els1-elasticsearch-client.efk.svc.cluster.local:9200
    • 修改 service.typeNodePort,進行端口映射

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,無賬號密碼
Ref
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章