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 包部署的一個應用實例。html

工做原理

這張圖描述了 Helm 的幾個關鍵組件 Helm(客戶端)、Tiller(服務器)、Repository(Chart 軟件倉庫)、Chart(軟件包)之間的關係。
Helm 工做原理linux

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 init 在缺省配置下,Helm 會利用 gcr.io/kubernetes-helm/tiller 鏡像在Kubernetes集羣上安裝配置 Tiller;而且利用 https://kubernetes-charts.storage.googleapis.com 做爲缺省的 stable repository 的地址。因爲在國內可能沒法訪問 "gcr.io", "storage.googleapis.com" 等域名,阿里雲容器服務爲此提供了鏡像站點,可是版本比較老。因此本人在 github 上使用 github pages 作了一個 charts 倉庫的鏡像,https://babyshen.github.io/helm-charts-mirror/
  • 執行 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 日誌系統

一、準備 chartsgit

  • helm fetch stable/elasticsearch
  • helm fetch stable/fluentd-elasticsearch
  • helm fetch stable/kibana # kibana 要和 elasticsearch 版本一致

二、解壓修改各 values.yaml 配置文件github

  • 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,進行端口映射

三、安裝各組件redis

  • 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

四、訪問 Kibanadocker

  • 查看端口:kubectl get svc -n efk -l app=kibana
  • 訪問:http://IP:Port,無帳號密碼
Ref
相關文章
相關標籤/搜索