Helm入門

前言:
Helm是GO語言編寫的,是管理kubernetes集羣中應用程序包的客戶端工具。
Helm是相似於centos上的yum工具或Ubuntu上的apt-get工具。
對於應用發佈者而言,能夠經過Helm打包應用,管理應用依賴關係,管理應用版本併發布應用到軟件倉庫。
對於使用者而言,使用Helm後不用須要瞭解Kubernetes的Yaml語法並編寫應用部署文件,能夠經過Helm下載並在kubernetes上安裝須要的應用。
除此之外,Helm還提供了kubernetes上的軟件部署,刪除,升級,回滾應用的強大功能。
Helm中並不提供鏡像,但資源清單中會指明相關的鏡像倉庫。

1、基本概念
  1.Helm的三個基本概念
    Chart:Helm應用(package),包括對資源的定義及相關鏡像的引用,還有模板文件、values文件等。相似於YUM RPM或Apt dpkg文件
    Repository:Chart倉庫,http/https服務器,Chart的程序包放在這裏。
    Release:chart的部署實例,每一個chart能夠部署一個或多個release

  2.helm的程序架構:
    helm:客戶端,管理本地的Charts、reprepository和release。與Tiller服務器交互,發送Chart,實例安裝、查詢、添加、卸載等操做。
          能夠運行在集羣外的主機上。
          基於grpc協議與Tiller通訊。(使用kubectl port-forward將tiller的端口映射到本地,而後再經過映射後的端口跟tiller通訊)向tiller發送請求
          並由tiller來管理對應的Kubernetes資源。Helm客戶端的使用方法參見helm --help命令。
    Tiller:服務端,Tiller多數運行在集羣內。接收來自helm客戶端的請求,並把相關資源的操做發送到kube-apiserver,生成release。
            爲了方便管理,tiller把release的相關信息保存在kubernetes的ConfigMap中。tiller對外暴露gRPC API,供helm客戶端調用。

  3.工做流程:
    首先helm把須要的應用程序包Chart從repository倉庫下載到本地。若需定製化操做,則需修改模板文件和values文件,使用模板文件和values文件對配置清單進行賦值。
    helm把請求提交給Tiller,Tiller接收到請求後鏈接apiserver,經過認證受權,apiserver負責完成建立。
    建立完成後,這個運行在集羣上的實例再也不稱做Chart,而被稱做release。
    helm主機中,helm的家目錄下若存在須要的Chart包,則之後再建立時再也不從網上拉取Chart包,直接使用本地Chart包。

2、安裝helm(我這裏在集羣中master主機上安裝helm)
  1.獲取helm的安裝包:
    https://github.com/helm/helm/releases

  2.解壓二進制包:
    tar xf helm-v2.13.1-linux-amd64.tar.gz你會獲得一個linux-amd64的文件目錄。

  3.將linux-amd64裏面的可執行文件helm複製到/usr/bin/
      cp linux-amd64/helm /usr/bin/

  4.若是集羣基於RBAC認證的話,須要建立serviceaccount,並綁定到集羣中合適的角色(我這裏綁定的是集羣管理員)。
    詳情看官方:https://github.com/helm/helm/blob/master/docs/rbac.mdlinux

 1 vim tiller-rbac.yaml  2 apiVersion: v1  3 kind: ServiceAccount  4 metadata:  5  name: tiller  6 namespace: kube-system  7 ---  8 apiVersion: rbac.authorization.k8s.io/v1  9 kind: ClusterRoleBinding 10 metadata: 11  name: tiller 12 roleRef: 13  apiGroup: rbac.authorization.k8s.io 14  kind: ClusterRole 15 name: cluster-admin 16 subjects: 17 - kind: ServiceAccount 18  name: tiller 19 namespace: kube-system 20 應用:kubectl apply -f tiller-rbac.yaml

 
  5.初始化helm
    因爲tiller的鏡像沒法直接從國內pull下來,因此我這裏使用Azure中國的鏡像。
    也能夠本身尋找國內可以使用的鏡像倉庫如:阿里的鏡像倉庫。
    注意helm要和tiller的版本保持一致。git

 1 helm init --service-account tiller --upgrade -i gcr.azk8s.cn/kubernetes-helm/tiller:v2.13.1  2  3 Creating /root/.helm/repository/repositories.yaml  4 Adding stable repo with URL: https://kubernetes-charts.storage.googleapis.com  5 Adding local repo with URL: http://127.0.0.1:8879/charts  6 $HELM_HOME has been configured at /root/.helm.  7  8 Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.  9 10 Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy. 11 To prevent this, run `helm init` with the --tiller-tls-verify flag. 12 For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation 13 Happy Helming! 14  


  6.查看tiller版本及pod是否正常運行:github

1 [root@K8s-master helm]# helm version 2 Client: &version.Version{SemVer:"v2.13.1", GitCommit:"618447cbf203d147601b4b9bd7f8c37a5d39fbb4", GitTreeState:"clean"} 3 Server: &version.Version{SemVer:"v2.13.1", GitCommit:"618447cbf203d147601b4b9bd7f8c37a5d39fbb4", GitTreeState:"clean"} 4 5 kubectl get pods -n kube-system 6 NAME READY STATUS RESTARTS AGE 7 tiller-deploy-5fcc86f85f-qvr4b 0/1 ContainerCreating 0 31s


3、使用helm
    helm官方支持的Chart列表爲:https://hub.kubeapps.com/
  1.查看當前repo倉庫:web

1 helm repo list 2 NAME URL 3 stable https://kubernetes-charts.storage.googleapis.com ##此倉庫地址沒法在國內使用,因此咱們更換其餘國內可以使用的倉庫。 4 local http://127.0.0.1:8879/charts


  2.刪除repo倉庫:redis

1 helm repo remove 倉庫名 2 例:helm repo remove stable


  3.添加repo倉庫:vim

1 helm repo add 倉庫地址 2 例:helm repo add https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts ##阿里雲的chart倉庫  


  4.更新倉庫:centos

1 helm repo update 2 Hang tight while we grab the latest from your chart repositories... 3 ...Skip local chart repository 4 ...Successfully got an update from the "stable" chart repository 5 Update Complete. ⎈ Happy Helming!⎈


  5.搜索chart:api

1 helm search chart名稱 2 例:helm search wordpress 3 NAME CHART VERSION APP VERSION DESCRIPTION 4 stable/wordpress 0.8.8 4.9.4 Web publishing platform for building blogs and websites.


  6.查看chart的詳細信息:服務器

1 helm inspect stable/wordpress


  7.安裝chart:架構

1 helm install chart名稱  


再也不一一舉例,經常使用命令選項總結以下:
對於chart的管理命令:
    create、fetch、get、inspect、package、verify...
對於release的管理命令:
    install、delete、upgrade/rollback、list、history、status...
更多命令詳情請查看helm --help命令。

4、注意事項
  1.每次獲取chart時,程序包都會被下載到.helm/cache/archive/目錄下。    

  2.將.helm/cache/archive/目錄下的chart包文件解壓後,裏面就是一些資源清單文件和模板文件和values文件等。
使用tree命令查看chart程序包解壓後的文件結構:
例:

 1 [root@K8s-master archive]# tree redis  2 redis  3 ├── Chart.yaml ##經常使用來描述當前Chart的屬性、名稱、版本等信息,在升級chart時參考版本等信息。  4 ├── README.md ##自述文件,描述做者等相關信息。  5 ├── templates ##模板目錄,包含了此chart部署時所需的相關資源清單文件。  6 │ ├── deployment.yaml ##templates目錄下的yaml文件和咱們平時本身寫的不太同樣,裏面大量調用了Go模板語法。  7 │ ├── _helpers.tpl  8 │ ├── networkpolicy.yaml  9 │ ├── NOTES.txt 10 │ ├── pvc.yaml 11 │ ├── secrets.yaml 12 │ └── svc.yaml 13 └── values.yaml  


  3.能夠修改values.yaml文件,用來自定義一些參數,向模板中的各屬性賦值,從而實現自定義chart,生成release。 

相關文章
相關標籤/搜索