Helm操作指南


  • Helm 簡介
    • 我們可以將helm看作Kubernetes下的yum(centos 下負責安裝包管理的工具)。helm是一個用於Kubernetes包管理器,每一個包稱為chart,一個chart是一個目錄(一般會打包為name-version.tgz包,便於傳輸管理)。   
    • helm提供應用部署、刪除、升級、回滾等功能。
  • Helm 組件及相關術語
    • Helm
      • helm是命令行下的客戶端工具。主要用於kubernetes應用程序chart的創建、打包、創建、和管理本地和遠程的chart倉庫。     
    • Tiller
      • tiller是helm的服務器,部署在kubernetes集群中,tiller用於接收helm 的請求。並根據chart生成kunernetes的部署文件(helm稱為release),然后交給kubernetes創建應用。tiller還提供release的升級、刪除、回滾等一系列功能。             
    • Chart
      • chart是helm的軟件包,采用tar格式。 其中包含一組kubernetes資源相關的yaml文件。         
    • Repoistory                                
      • repoistory是helm的軟件倉庫,repoistory本質上是一個web服務器。該服務器保存了一系列chart軟件包以給用戶下載,並提供了一個該repoistory的chart包的清單以供查詢。helm可以同時管理多個不同的repoistory。        
    • Release 
      • 使用helm install 命令在kubernetes集群部署的chart稱為release。
      • 注意:helm提到的release和通常概念的版本不同,這里的release可以理解為helm使用chart打包部署的一個應用實例。     
  • Helm 工作原理
    •     
    • Chart install 過程:
      1. helm從指定的目錄或者.tgz文件解析出chart結構信息。
      2. helm將指定的chart結構和values信息通過grpc傳遞給tiller。
      3. tiller根據chart和values生成一個relesae。
      4. tiller將release傳遞給kunernetes用於生成release。
    • Chart Update過程:
      1. helm從指定的目錄或者.tgz文件解析出chart結構信息。
      2. helm將要更新的relsase的名稱、結構信息、values信息傳遞給tiller。
      3. tiller生成release並更新指定名稱的release的history。
      4. tiller將release發送給kubernetes用於更新release。 
    • Chart Rollback過程:
      1. helm將要回滾的release名稱傳遞給tiller。
      2. tiller將根據release名稱查找history。
      3. tiller將從history中獲取一個release。
      4. tiller將上一個release發送給kubernetes用於替換當前的release。 
  • Helm 部署  
    • helm 客戶端安裝
      • helm init #安裝helm客戶端(默認是谷歌鏡像)
      • helm init --client-only --stable-repo-url https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/  #使用國內鏡像安裝
    • helm 服務端安裝tiller
    • 給 tiller 授權
    • 驗證 tiller是否安裝成功
      • kubectl -n kube-system get pods|grep tille
      • helm version 
    • 卸載 helm 服務端 tiller
      • helm reset --force
    • helm 使用
      1. 更換倉庫:
        • 若遇到Unable to get an update from the “stable” chart repository (https://kubernetes-charts.storage.googleapis.com) 錯誤 手動更換stable 存儲庫為阿里雲的存儲庫
          1. helm repo remove stable #移除原先的倉庫。
          2. helm repo add stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts #添加新的倉庫地址
          3. helm repo update #更新倉庫
      2. 查看存儲庫中可用的所有 helm chart:
        1. helm search #查看所有chart
      3. 更新 charts 列表:
        1. helm repo update #更新charts列表 
      4. 安裝 charts 
        • Monocular是一個開源軟件,用於管理kubernetes上以helm charts形式創建的服務。可以通過它來安裝
          1. helm charts
          2. Nginx ingress controller
      5. 查看 kubernetes 已經安裝的 charts
        • helm list #查看charts列表
      6. 刪除安裝的 chart 
        • helm delete xxx #刪除指定的chart 
  • Helm Chart 結構     
    • chart 目錄結構
      •  
        myapp/                     # Chart 目錄
        ├── charts                 # 這個 charts 依賴的其他 charts,始終被安裝
        ├── Chart.yaml             # 描述這個 Chart 的相關信息、包括名字、描述信息、版本等
        ├── LICENSE                # [可選]協議
        ├── Requirements.yaml      # [可選] 用於存放當前Chart依賴的其它Chart的說明文件
        ├── Readme.md              # [可選]當前chart的介紹
        ├── templates              # 模板目錄
        │ ├── deployment.yaml      # deployment 控制器的 Go 模板文件
        │ ├── _helpers.tpl         # 以 _ 開頭的文件不會部署到 k8s 上,可用於定制通用信息
        │ ├── ingress.yaml         # ingress 的模板文件 
        │ ├── NOTES.txt            # Chart 部署到集群后的一些信息,例如:如何使用、列出缺省值
        │ ├── service.yaml         # service 的 Go 模板文件
        │ ├── secrets.yaml         # secrets的 Go 模板文件
        │ └── tests
        │ └── test-connection.yaml
        └── values.yaml            # 模板的值文件,這些值會在安裝時應用到 GO 模板生成部署文件

      • Chart.yaml 文件
        • name : [必須] chart的名稱 
        • apiVersion :[可選] api版本和版本號
        • version : [必須] chart的版本號,版本號必須符合SemVer 2   簡書 https://www.jianshu.com/p/e2619a7aa60e
        • description : [可選] 文檔描述
        • keywords:
          •  -  [可選]關鍵字列表
        • home : [可選] 項目地址 
        • sources :
          •  -  [可選]當前chart的下載地址列表                                                
      • Chart 目錄和 Requirements.yaml
        • chart支持兩種方式表示依賴關系,可以使用Requirements.yaml或直接將依賴的chart放置到chart目錄中。
        • dependencies:
          - name: example
          version: 1.2.3
          repository: http://example.com/charts
          - name: Chart名稱
          version: Chart版本
          repository: 該Chart所在的倉庫地址
      • templates 目錄
        • templates目錄存放了kubernetes部署文件的模板。
        • yaml文件模板遵循 go template語法 官網鏈接 https://golang.org/pkg/text/template/
        • 模板語法擴展了 golang/text/template的語法:
# 這種方式定義的模版,會去除test模版尾部所有的空行
{{- define "test"}}
模版內容
{{- end}}

# 去除test模版頭部的第一個空行
{{- template "test" }}   
  • 檢查配置和模板是否有效     
    • helm install --dry-run --debug <chart_dir> #驗證配置的模板變量與渲染的yaml是否一致
  • 部署到kubernetes 
    • 在mychart目錄下執行命令
      • helm install .   #安裝到默認命名空間
      • helm install --namespace gitlab --name gitlab-runner *.tgz  #安裝到指定命名空間
    • 查看部署的relaese
      • helm list              #查看relaese list
    • 刪除部署的relaese
      • helm delete XXX  #執行刪除命令 
    • 查看部署relaese相信信息
      • helm get XXX     #查看詳細信息     
    • 打包分享
      • 我們可以修改chart.yaml中的配置信息,然后使用下列命令將chart打包成一個壓縮文     件。
      • helm pakaage .        #打包文件,得到xxx-version.tgz

    • 將應用包發布到 Repository     
      • 雖然我們打包了 chart 並且發布到了helm本地目錄中,但通過helm search找不到剛剛生成的chart包。
        • helm search XXX #查找包
      • 這是因為 repository目錄中的  chart包還沒有被helm管理。但是通過helm repo list 命令可以查看目前 helm中配置的repository信息。
        • helm repo list       #查看repository信息   
        • 注意:在新版中,使用helm init 命令會默認配置一個名為local的本地倉庫。      
    • 第三方的chart存儲庫
    • helm 升級和回退一個應用
      • helm history xxx      #查看發布的歷史版本
      • helm search XXX -l    #查看chart包版本    
      • 升級一個應用
        • 我們可以指定升到某一個版本,如果不指定,默認是最新版。 
        • helm upgrade XXX local/XXX   #升級
      • 回退一個應用
        • helm rollback XXX #默認回退到上一個版本     
      • 刪除一個應用
        • helm delete XXX   #刪除
        • helm ls -a XXX    #確認是否已經刪除,狀態為delete
        • helm ls -deleted  #列出刪除的relaese 
    • helm 如何結合CI/CD?
      • 采用helm可以把零散的kubernetes應用配置文件作為一個chart管理。chart源碼和源代碼一起放到Git庫中管理。通過把chart參數化,可以在測試環境和生成環境采用不同的chart參數。
      • helm CD/CD流程圖:   
          
      • helm 如何在多環境下(Test、Staging、Production)的業務配置?
        • chart是支持參數替換的,可以把業務配置的相關參數設置為模板變量,使用helm install 命令部署的時候指定一個值,這樣就可以把業務參數從chart中剝離了。
        • 例如:helm install --values=values-production.yaml wordpress


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM