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

寶樹吶發表於2020-07-13

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格式
  • 上傳chartchart倉庫或從倉庫中下載 chart
  • Kubernetes叢集中安裝或解除安裝chart
  • Helm管理安裝的chart的釋出週期

2. helm安裝

  • 注意:這裡安裝的是helm v3.2.4,如需下載更新的版本,可以至github官方repo選擇

https://github.com/helm/helm/tags

# 如無需更換版本,直接執行下載
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

  • 下面以官方倉庫的一個redis為例

https://hub.helm.sh/charts/choerodon/redis

# 新增倉庫
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 檔案目錄結構

.
├── 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相關檔案

# 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

# 將chart例項化成release
# 格式:helm install [RELEASE-NAME] [CHART-PATH]
helm install testname .

# 檢視release
helm ls

# 安裝成功!!

3.3 helm的基本操作補充

3.3.1 檢視release

# 列出已經部署的Release 
helm ls 

# 查詢一個特定的Release的狀態 
helm status <RELEASE_NAME> 

# 檢視被移除了,但保留了歷史記錄的release
helm ls --uninstalled

3.3.2 安裝release

# 安裝
helm install <RELEASE-NAME> <CHART-PATH>

# 命令列指定變數
helm install --set image.tag=233 <RELEASE-NAME> <CHART-PATH>

3.3.3 更新release

# 更新操作, flag是可選操作
helm upgrade [FLAG] <RELEASE> <CHART-PATH>

# 指定檔案更新
helm upgrade -f myvalues.yaml -f override.yaml <RELEASE-NAME> <CHART-PATH>

# 命令列指定變數
helm upgrade --set foo=bar --set foo=newbar redis ./redis

3.3.4 解除安裝release

# 移除Release
helm uninstall <RELEASE_NAME>

# 移除Release,但保留歷史記錄
# 可以通過以下檢視:helm ls --uninstalled
# 可以通過以下回滾:helm rollback <RELEASE> [REVISION]
helm uninstall <RELEASE_NAME> --keep-history

3.3.5 回滾release

# 更新操作, flag是可選操作
helm upgrade [FLAG] <RELEASE> <CHART-PATH>

相關文章