天天看點

Helm快速入門

1.什麼是helm

(相當于linux中的yum,解決安裝的相關依賴)就是安裝的控制流程

在沒使用 helm 之前,向 kubernetes 部署應用,我們要依次部署 deployment、svc 等,步驟較繁瑣。況且随着很多項目微服務化,複雜的應用在容器中部署以及管理顯得較為複雜,helm 通過打包的方式,支援釋出的版本管理和控制,很大程度上簡化了Kubernetes 應用的部署和管理。

Helm 本質就是讓 K8s 的應用管理(Deployment,Service 等 ) 可配置,能動态生成。通過動态生成 K8s 資源清單文(deployment.yaml,service.yaml)。然後調用Kubectl 自動執行 K8s 資源部署

Helm 是官方提供的類似于 YUM 的包管理器,是部署環境的流程封裝。Helm 有兩個重要的概念:chart 和release

  • chart 是建立一個應用的資訊集合,包括各種 Kubernetes 對象的配置模闆、參數定義、依賴關系、文檔說明等。chart 是應用部署的自包含邏輯單元。可以将 chart 想象成 apt、yum 中的軟體安裝包
  • release 是 chart 的運作執行個體,代表了一個正在運作的應用。當 chart 被安裝到 Kubernetes 叢集,就生成一個 release。chart 能夠多次安裝到同一個叢集,每次安裝都是一個 release

Helm 包含兩個元件:Helm 用戶端和 Tiller 伺服器(解釋稱指令給api),如下圖所示

Helm快速入門

Helm 用戶端負責 chart 和 release 的建立和管理以及和 Tiller 的互動。Tiller 伺服器運作在 Kubernetes 叢集中,它會處理 Helm 用戶端的請求,與 Kubernetes API Server 互動

2.helm的快速安裝

helm不斷地更新,目前有helm3和helm2比較常見,差別是什麼呢

2.1 helm3和helm2的差別

1.helm3優化掉了tiller
2.在 Helm 2 中,這個操作将比較 舊的配置與新的配置,然後生成一個更新更新檔。
由于,誤操作的人僅修改了應用的線上狀态(舊的配置并未更新)。Helm 在復原時,
什麼事情也不會做。因為舊的配置與新的配置沒有差别(都是 3 個副本)。然後,
Helm 不執行復原,副本數繼續保持為 0 。此時,你有些慌了…
另一方面,在 Helm 3 中,将對比 舊的配置、線上狀态、新的配置 生成更新更新檔。
Helm 發現舊的配置副本數是 3 ,線上狀态是 0 ,判斷出新的配置期望改回 3 ,因
此生成一個更新更新檔復原。此時,你不那麼慌了…
使用 Helm 3 進行更新時,也會發生類似的過程。例如,某個基于控制器的應用(或類
似服務網格)注入任何内容到 Helm 部署的 Kubernetes 對象中。在 Helm 2 中進行
更新時,注入的内容将被移除。在 Helm 3 中,由于考慮到了線上狀态,注入的内容将
會被保留。假設我們想要在叢集上安裝 Istio 。Istio 将 Sidecar 注入到每個部署中。使用 Helm 進行部署:
      

2.2 helm2的安裝

需要包: helm-tiler

安裝服務端 tiller,還需要在這台機器上配置好 kubectl 工具和 kubeconfig 檔案,確定 kubectl 工具可以在這台機器上通路 apiserver 且正常使用。

另外要配置設定權限給tiller,如下:

cd /usr/local/bin/helm

vim rbac.yaml

apiVersion: v1
kind: ServiceAccount      #準入控制
metadata:
  name: tiller
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding          #進行角色賦予,role是建立角色
metadata:
  name: tiller
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
  - kind: ServiceAccount
    name: tiller
    namespace: kube-system

      
kubectl create -f rbac.yaml    serviceaccount/tiller created   clusterrolebinding.rbac.authorization.k8s.io/tiller created

helm init -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.14.3 --stable-repo-url http://mirror.azure.cn/kubernetes/charts/ --service-account tiller --override spec.selector.matchLabels.'name'='tiller',spec.selector.matchLabels.'app'='helm' --output yaml | sed 's@apiVersion: extensions/v1beta1@apiVersion: apps/v1@' | kubectl apply -f -

kubectl get pods -n kube-system | grep tiller
kubectl get pod  -n kube-system
helm version

      

2.3 helm3的安裝

前提是已經安裝了kubectl
安裝包網址: https://github.com/helm/helm/releases
    tar zxvf helm-v3.1.2-linux-amd64.tar.gz
    cd linux-amd64
    cp helm /usr/bin/helm
    helm version 
    cp helm /usr/bin/helm
      
export KUBECONFIG=/root/.kube/config #可以寫到/etc/profile裡
      
helm repo add stable <http://mirror.azure.cn/kubernetes/charts>
helm repo add aliyun <https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts>
helm repo update
      

3.helm的簡單操作和使用

3.1 helm的檔案結構

Helm快速入門

3.2 helm的基本指令

安裝:
   helm install --name test  -f values.yaml  .  --debug --dry-run     //調試       ,在helm3中沒有--name了,直接寫名字就可以
   helm install --name test  -f values.yaml  .                       //安裝,在helm3中沒有--name 直接寫名字就可以
   更新:
   helm ls         //查出有哪些helm,然後更改chart中的version
   helm upgrade  名字 .     #上條指令查出來的名字,這樣就更新了
   helm upgrade -f values.yaml 名字 .     更新
   删除:
   helm delete cautious-shrimp            #這個是可以復原的
   helm delete --purge cautious-shrimp   #一定要加purge這個參數後面加名字,才能徹底删除,但是這樣也就不能復原
   復原:
   helm ls
   helm rollback 名字 1          #名字是上面查出來的,1是版本号
   查詢:
   helm history  名字     #檢視更新曆史
   
   helm repo的使用:
   helm repo add 名字 位址
   helm repo remove
      

下一篇文章我們将通過執行個體操作helm來建立一個簡單的項目

繼續閱讀