helm
是基於 kubernetes
的包管理器。它之於 kubernetes
就如 yum
之於 centos
,pip
之於 python
,npm
之於 javascript
那 helm
的引入對於管理叢集有哪些幫助呢?
- 更方便地部署基礎設施,如
gitlab
,postgres
,prometheus
,grafana
等 - 更方便地部署自己的應用,為公司內部的專案配置 Chart,使用
helm
結合 CI,在 k8s 中部署應用一行命令般簡單
當然 helm
更偉大的作用在於運維人員與開發人員的職責分離。
讓開發人員寫 k8s 資源配置檔案是不現實的
- 不是所有開發都瞭解k8s,或者說很少,不瞭解 k8s 很難寫資源配置部署檔案
- 開發的主要職能還是在業務上
於是 helm
應時而出,運維寫配置檔案,開發給配置檔案填很少的引數
本篇文章主要介紹如何安裝 helm 以及如何使用 helm 部署基礎服務和業務
- 原文地址: helm 安裝以及使用
- 系列文章: 個人伺服器運維指南
如果你是新人的話,目前在阿里雲買機器會有優惠,可以點選 連結 購買。你可以跟著我的筆記 伺服器運維指南 來開始維護伺服器並搭建應用。
介紹
Chart
: 一系列 k8s 資源集合的命名,它包含一系列 k8s 資源配置檔案的模板與引數,可供靈活配置release
: 當一個 Chart 部署後生成一個 release,chart/relase 類似於 docker 中 image/containerrepo
: 即 chart 的倉庫,其中有很多個 chart 可供選擇,如官方 helm/charts
使用 helm create
建立一個 chart,瞭解簡單 chart 的目錄結構
關於如何安裝 helm 參考下一小節
# 建立一個 chart
$ helm create todo
Creating todo
$ cd todo
# 列印 chart 目錄,主要檔案有 Chart.yaml 與 values.yaml
# --dirsfirst 先列印資料夾名稱
$ tree --dirsfirst
.
├── charts
├── templates
│ ├── tests
│ │ └── test-connection.yaml
│ ├── NOTES.txt
│ ├── _helpers.tpl
│ ├── deployment.yaml
│ ├── ingress.yaml
│ └── service.yaml
├── Chart.yaml
└── values.yaml
3 directories, 8 files
複製程式碼
檢視主要的兩個檔案目錄
templates/
: 這是運維大哥寫的配置檔案模板,示例是最簡單應用的資源配置,但複雜應用還會有 pvc,role,service-acount 等等values.yaml
: 這是給開發小弟寫的可選引數,但是大部分引數都被運維大哥給內建了
使用 helm 部署基礎服務
真實案例可以參看我的系列文章其它章節
這裡講述一些關於部署基礎服務的一般步驟。假設我們需要部署 redis
這裡使用 helm v3,語法與 v2 可能略有出入
01 查詢相關 Chart
使用 helm search hub
$ helm search hub redis
URL CHART VERSION APP VERSION DESCRIPTION
https://hub.helm.sh/charts/bitnami/redis 9.5.0 5.0.5 Open source, advanced key-value store. It is of...
https://hub.helm.sh/charts/hephy/redis v2.4.0 A Redis database for use inside a Kubernetes cl...
https://hub.helm.sh/charts/incubator/redis-cache 0.5.0 4.0.12-alpine A pure in-memory redis cache, using statefulset...
複製程式碼
02 選定 Chart,跟進 Chart 的官方文件
我們選定 stable/redis 這個 chart。
跟蹤官方文件,設定相關引數,儲存為 values-production.yaml
# Production configuration
$ helm install stable/redis --values values-production.yaml
複製程式碼
如果有必要時會新增 repo: helm repo add
# helm repo add stable https://kubernetes-charts.storage.googleapis.com/
# 列出所有 repo
$ helm repo list
NAME URL
stable https://kubernetes-charts.storage.googleapis.com/
apphub https://apphub.aliyuncs.com
jetstack https://charts.jetstack.io
複製程式碼
03 校驗部署狀態
這與需要部署的資源有關,不過一般也就分為 Service
,Pod
和 PVC
安裝 helm
這裡參考官方文件 安裝 helm
helm
在 helm v2 時分為客戶端 (helm client,即命令列工具) 與服務端 (helm server) 兩部分,在服務端又叫 Tiller
,安裝 Tiller
時會在叢集中部署一個 Pod
。
helm
此時已釋出了 v3,相比 v2 而言,它去掉了 Tiller
,更加具體的變更參考 helm v3 FAQ
安裝客戶端 (helm client)
helm client 需要安裝在你可以訪問 k8s 叢集的任何伺服器,如同 kubectl
,不過通常來說,你需要安裝在兩個地方
- k8s 叢集的 master node
- 你自己的 PC/mac 上
在 helm v3 中,只需要安裝 helm client
在 mac 上進行安裝
$ brew install kubernetes-helm
複製程式碼
在 linux 上進行安裝
$ curl -LO https://git.io/get_helm.sh
$ chmod 700 get_helm.sh
$ ./get_helm.sh
複製程式碼
根據原始碼包進行安裝,比較推薦(畢竟使用以上兩種方案可能有網路問題),至於如何使用 rsync
見以下安裝步驟
使用指令碼安裝在國內會出現網路問題,需要在代理節點安裝並使用
rsync
或者scp
移動到目標位置
示例選擇 2.14.3
進行安裝,helm
的最新版本可以參考 helm/helm Releases。
可以選擇 3.0+ 版本的安裝,目前最新版本是
Helm v3.0.0-rc.1
(2019/11/01)
# 下載 MAC 上適用的軟體包
# -L: 追蹤重定向連結
# -O: 儲存到本地
# -S: 列印錯誤
$ curl -SLO https://get.helm.sh/helm-v2.14.3-darwin-amd64.tar.gz
# 下載 CentOS 上適用的軟體包
$ curl -SLO https://get.helm.sh/helm-v2.14.3-linux-amd64.tar.gz
# 如果有網路問題,請在代理節點下載並 rsync 到目標節點,如果沒有,跳過此步
$ rsync -avhzP proxy:/root/helm-v2.14.3-linux-amd64.tar.gz .
# 如果在 mac 上
$ tar -zxvf helm-v2.14.3-darwin-amd64.tar.gz
# 如果在 centos 上
$ tar -zxvf helm-v2.14.3-linux-amd64.tar.gz
# 進入相應目錄,移至 /bin 目錄
$ mv linux-amd64/helm /usr/local/bin/helm
複製程式碼
安裝 tiller (helm server)
如果使用了 Helm v3,則不用安裝 tiller
01 下載映象
tiller 的映象 gcr.io/kubernetes-helm/tiller:v2.14.3
在 gcr.io 上,這意味著在國內網路需要先下載到代理節點,再移動到目標位置。具體步驟參照以前章節
02 安裝 Tiller
當安裝好 helm
命令列工具後,使用 helm init
安裝 tiller。安裝 tiller
時會在 k8s 上部署一個 pod。
$ helm init
Creating /root/.helm
Creating /root/.helm/repository
Creating /root/.helm/repository/cache
Creating /root/.helm/repository/local
Creating /root/.helm/plugins
Creating /root/.helm/starters
Creating /root/.helm/cache/archive
Creating /root/.helm/repository/repositories.yaml
Adding stable repo with URL: https://kubernetes-charts.storage.googleapis.com
Adding local repo with URL: http://127.0.0.1:8879/charts
$HELM_HOME has been configured at /root/.helm.
Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.
Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.
To prevent this, run `helm init` with the --tiller-tls-verify flag.
For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation
複製程式碼
根據提示此時已安裝成功,校驗 Pod 狀態
# 檢視 tiller 是否出在執行狀態
$ kubectl get pods --all-namespaces
# 檢視 helm 與 tiller 版本
$ helm version
Client: &version.Version{SemVer:"v2.14.3", GitCommit:"0e7f3b6637f7af8fcfddb3d2941fcc7cbebb0085", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.14.3", GitCommit:"0e7f3b6637f7af8fcfddb3d2941fcc7cbebb0085", GitTreeState:"clean"}
複製程式碼
更多文章
我是山月,一個夢想跑步與爬山的程式設計師,我會定期分享全棧文章在個人公眾號中,歡迎交流