helm原理


Helm:
  helm就相當於Linux的包管理工具yum,但它管理的程序包是一些打包好的清單文件。
  其核心術語:
  Chart:一個helm程序包,它里面可理解為,包含了一下定義Pod的清單文件,這些清單包含Service,Deployment,DaemonSet,ReplicaSet,StatefulSet,HPA等配置信息,當然這些東西不一定都有,會根據應用不同,其清單內容也會有所區別,Template是模板文件,因為配置清單要能適用於各種場景,已經能夠根據用戶使用場景,做一些自定義配置,比如:Nginx配置清單中要配置HTTPS,那就需要配置證書,但證書不可能提前打包到Chart中,這就需要一些機制,能通過傳遞變量的方式來適應這些自定義需求,而template就是這樣的目的而存在的,值列表就是為Template提供傳遞變量的文件。

  Repository:就是Helm的Chart倉庫,它支持HTTPS/HTTP。
  Release:特定的Chart部署於目標K8s集群上的一個實例。

chart到release的過程:
  Chart---》Config ---》 Release

下圖為Helm整體應用框架圖:
  helm是作為Helm Repository的客戶端工具,helm默認工作時,會從本地家目錄中去獲取chart,只有本地沒有chart時,它才會到遠端的Helm Repository上去獲取Chart,當然你也可以自己在本地做一個Chart,當需要應用chart到K8s上時,就需要helm去聯系K8s Cluster上部署的Tiller Server,當helm將應用Chart的請求給Tiller Server時,Tiller Server接受完helm發來的charts(可以是多個chart) 和 chart對應的Config 后,它會自動聯系API Server,去請求應用chart中的配置清單文件,最終這些清單文件會被實例化為Pod或其它定義的資源,而這些通過chart創建的資源,統稱為release,一個chart可被實例化多次,其中的某些參數是會根據Config規則自動更改,例如Pod的名字等。

  

部署Helm:
#下載helm 二進制文件
    wget -c https://get.helm.sh/helm-v2.14.2-linux-amd64.tar.gz
    
    #下載完成后,解壓后,里面會有helm二進制可執行文件,只需要將helm 放到 PATH 路徑下。

#參考示例:
    https://github.com/helm/helm/blob/master/docs/rbac.md
#創建一個能在集群級別管理Pod資源的tiller
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: tiller
      namespace: kube-system
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: tiller
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: cluster-admin
    subjects:
      - kind: ServiceAccount
        name: tiller
        namespace: kube-system
        
#在進行tiller server安裝時,默認是從google鏡像倉庫中下載的,但國內很多下載不下來,這里可先從阿里雲的谷歌鏡像倉庫下載下來,
#導入自己的harbor中,或直接使用阿里的谷歌鏡像倉庫也可
#下面是我提前下載了tiller的鏡像,推到我的harbor了
        docker  pull  registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.14.2       #這是從谷歌鏡像倉庫下載.
        
        helm  init  --tiller-image  harbor.zcf.com/k8s/tiller:v2.14.2  --service-account tiller  --history-max  200

#若后期需要升級tiller鏡像,可直接使用下面命令
        $ export TILLER_TAG=v2.0.0-beta.1        # Or whatever version you want
        $ kubectl --namespace=kube-system set image deployments/tiller-deploy tiller=gcr.io/kubernetes-helm/tiller:$TILLER_TAG

#初始化完成后,查看版本
    # helm version
        Client: &version.Version{SemVer:"v2.14.2", GitCommit:"a8b13cc5ab6a7dbef0a58f5061bcc7c0c61598e7", GitTreeState:"clean"}
        Server: &version.Version{SemVer:"v2.14.2", GitCommit:"a8b13cc5ab6a7dbef0a58f5061bcc7c0c61598e7", GitTreeState:"clean"}

#做helm倉庫更新
   #  helm  repo  update

#測試安裝memcached
   # helm  install  stable/memcached

#查看安裝的Chart

  # helm list
  NAME        REVISION   UPDATED            STATUS    CHART       APP VERSION   NAMESPACE
  plucking-buffalo 1      Tue Jul 30 15:55:04 2019  DEPLOYED   memcached-2.9.0 1.5.12      default


#刪除Chart
  # helm  delete  --purge  plucking-buffalo

    #官方可用的helm倉庫地址
  https://hub.kubeapps.com

 #這是一個很深入介紹helm的文章:

  https://www.hi-linux.com/posts/21466.html

 


免責聲明!

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



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