1. 程式人生 > >kubernetes系列(十六) - Helm安裝和入門

kubernetes系列(十六) - Helm安裝和入門

- [1. helm簡介](#head1) - [1.1 為什麼需要helm](#head2) - [1.2 helm中幾個概念](#head3) - [1.3 helm用途](#head4) - [2. helm安裝](#head5) - [3. helm的基本使用](#head6) - [3.1 安裝chart倉庫裡面的chart](#head7) - [3.2 建立自定義的chart](#head8) - [3.2.1 檔案目錄結構](#head9) - [3.2.2 自定義chart的示例](#head10) - [3.3 helm的基本操作補充](#head11) - [3.3.1 檢視release](#head12) - [3.3.2 安裝release](#head13) - [3.3.3 更新release](#head14) - [3.3.4 解除安裝release](#head15) - [3.3.5 回滾release](#head16) ## 1. helm簡介 ### 1.1 為什麼需要helm 在沒使用helm之前,向`kubernetes`部署應用,我們要依次部署`deployment`,`service`,`configMap`等,步驟較繁瑣。況且隨著很多專案微服務化,複雜的應用在容器中部署以及管理顯得較為複雜. `helm`通過打包的方式,支援釋出的版本管理和控制,很大程度上簡化了`Kubernetes`應用的部署和管理 ### 1.2 helm中幾個概念 `Helm`可以理解為`Kubernetes`的包管理工具,可以方便地發現、共享和使用為`Kubernetes`構建的應用,它包含幾個基本概念 - **Chart**: 一個Helm包,其中包含了執行一個應用所需要的映象、依賴和資源定義等,還可能包含Kubernetes叢集中的服務定義 > 可以理解為docker的image - **Release**: 在`Kubernetes`叢集上執行的 `Chart`的一個例項。在同一個叢集上,一個 `Chart`可以安裝很多次。每次安裝都會建立一個新的`release` > 可以理解為docker的container例項 - **Repository**: 用於釋出和儲存 Chart 的倉庫。 ### 1.3 helm用途 做為`Kubernetes`的一個包管理工具,Helm具有如下功能: - 建立新的`chart` - `chart`打包成`tgz`格式 - 上傳`chart`到`chart`倉庫或從倉庫中下載 chart - 官方`chart`倉庫是: [https://hub.helm.sh](https://hub.helm.sh) - 在`Kubernetes`叢集中安裝或解除安裝`chart` - 用`Helm`管理安裝的`chart`的釋出週期 ---- ## 2. helm安裝 - 注意:這裡安裝的是`helm v3.2.4`,如需下載更新的版本,可以至github官方repo選擇 > [https://github.com/helm/helm/tags](https://github.com/helm/helm/tags) ![](https://tva1.sinaimg.cn/large/007S8ZIlgy1ggoilqm1muj30ze0nujw7.jpg) ```shell # 如無需更換版本,直接執行下載 wget https://get.helm.sh/helm-v3.2.4-linux-amd64.tar.gz # 解壓 tar -zxvf helm-v3.2.4-linux-amd64.tar.gz # 進入到解壓後的目錄 cd linux-amd64/ # 賦予許可權 chmod a+x /usr/local/bin/helm # 檢視版本 helm version ``` ---- ## 3. helm的基本使用 - **注意**:**這裡的使用是針對`Helm v3`**,因為`v3`版本和`v2`某些命令方面差距蠻大的,不完全相容!!所以針對`v2`的操作這裡就不贅述了 ### 3.1 安裝chart倉庫裡面的chart 可以直接使用官方的chart倉庫或者其他倉庫來安裝一些`chart` > [https://hub.helm.sh](https://hub.helm.sh) - 下面以官方倉庫的一個redis為例 > https://hub.helm.sh/charts/choerodon/redis ```shell # 新增倉庫 helm repo add choerodon https://openchart.choerodon.com.cn/choerodon/c7n # 安裝 helm install choerodon/redis --version 0.2.5 ``` > 安裝完成! 有沒有很簡單!! ### 3.2 建立自定義的chart 這一節介紹以下如何自定義一個chart,並應用與平時專案中 #### 3.2.1 檔案目錄結構 ```shell . ├── Chart.yaml ├── templates | ├── deployment.yaml | └── service.yaml ├── values.yaml ``` 一個基本的自定義chart的檔案目錄結構大概是如上: - **Chart.yaml**: 定義當前`chart`的基本metadata, 比如name,tag啥的 - **templates**: 這個資料夾下放當前chart需要的一些yaml資源清單 - 資源清單支援`變數模版語法` - **values.yaml**: 定義變數,可被`template`下的yaml資源清單使用 #### 3.2.2 自定義chart的示例 **第一步: 準備自定義chart相關檔案** ```shell # 1. 新建一個資料夾demo存放chart mkdir demo && cd demo && mkdir templates # 2. 新建Chart.yaml cat << EOF > Chart.yaml name: hello-world version: 1.0.0 EOF # 3. 新建./templates/deployment.yaml # 注意image部分使用了變數的模板語法,可以動態插入 cat << EOF > ./templates/deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: tocgenerator-deploy labels: app: tocgenerator-deploy spec: replicas: 1 selector: matchLabels: app: tocgenerator-server template: metadata: labels: app: tocgenerator-server spec: containers: - name: tocgenerator image: {{ .Values.image.repository }}:{{ .Values.image.tag }} imagePullPolicy: IfNotPresent ports: - containerPort: 80 EOF # 4. 新建./templates/service.yaml cat << EOF > ./templates/service.yaml apiVersion: v1 kind: Service metadata: name: tocgenerator-svc spec: type: NodePort selector: app: tocgenerator-server ports: - protocol: TCP port: 80 targetPort: 80 nodePort: 30075 EOF # 5. 新建values.yaml cat << EOF > values.yaml image: repository: lzw5399/tocgenerator tag: '951' EOF ``` **第二步: 使用上面的自定義chart** ```shell # 將chart例項化成release # 格式:helm install [RELEASE-NAME] [CHART-PATH] helm install testname . # 檢視release helm ls # 安裝成功!! ``` ### 3.3 helm的基本操作補充 #### 3.3.1 檢視release ```shell # 列出已經部署的Release helm ls # 查詢一個特定的Release的狀態 helm status # 檢視被移除了,但保留了歷史記錄的release helm ls --uninstalled ``` #### 3.3.2 安裝release ```shell # 安裝 helm install # 命令列指定變數 helm install --set image.tag=233 ``` #### 3.3.3 更新release ```shell # 更新操作, flag是可選操作 helm upgrade [FLAG] # 指定檔案更新 helm upgrade -f myvalues.yaml -f override.yaml # 命令列指定變數 helm upgrade --set foo=bar --set foo=newbar redis ./redis ``` #### 3.3.4 解除安裝release ```shell # 移除Release helm uninstall # 移除Release,但保留歷史記錄 # 可以通過以下檢視:helm ls --uninstalled # 可以通過以下回滾:helm rollback [REVISION] helm uninstall --keep-history ``` #### 3.3.5 回滾release ```shell # 更新操作, flag是可選操作 helm upgrade [FLAG]