為什么是helm
這個問題要從容器說起。大家都知道畏腕, docker
官方建議每個容器只運行一個進程缴川,但是相信大部分人都有圖省事在一個容器里開 supervisor
或者 systemd
的時候∶柘冢考慮到這個需求把夸, k8s
提出了 pod
的概念。一個 pod
里面可以包含多個容器铭污,每個容器運行一個進程恋日,而 k8s
的最小調(diào)度單位又是 pod
膀篮,這就使得我們可以在最小調(diào)度單位中運行多個進程。這樣就解決問題了嗎岂膳?并沒有誓竿。我們來看看 gitlab
。像 gitlab
這樣復(fù)雜的 web
應(yīng)用程序谈截,包含了很多部分筷屡。我們可以像上面那樣,把 gitlab
的所有部分都寫到一個 pod
里面簸喂,但是這樣就不好單獨伸縮某一部分了毙死。所以還是建議拆開來寫闪萄。這樣各個部分保持相對獨立辐烂,可以自由伸縮码撰。這一拆開尘惧,文件就很多了颂郎,也就不好維護了缸浦。于是 helm
誕生了试读。
helm
是 k8s
上的一個包管理工具警儒, helm
把一個包稱作 chart
竿奏,一個 chart
中有多個 k8s
配置文件袄简,這樣就能把一個完整的應(yīng)用程序管理起來。這篇文章會記錄 helm
的安裝過程泛啸。
安裝helm
我剛?cè)?helm
官網(wǎng)看過绿语, helm3
目前還是 unreleased
的狀態(tài),所以我們這里介紹如何安裝 helm2
候址。首先我們?nèi)?helm
的官方倉庫吕粹,找到最新的版本,下載壓縮包到 master
上并解壓岗仑。
wget https://get.helm.sh/helm-v2.16.0-linux-amd64.tar.gz
tar -zxvf ./helm-v2.16.0-linux-amd64.tar.gz
解壓出 linux-amd64
目錄匹耕,我們可以看到里面有個 helm
可執(zhí)行文件。我們把它拷貝到 /usr/local/bin
目錄下
cp linux-amd64/helm /usr/local/bin/
好了荠雕,現(xiàn)在已經(jīng)裝好一半了稳其。而另一半,叫做 tiller
炸卑,需要裝到 k8s
中既鞠。因為 tiller
涉及到 k8s
中創(chuàng)建 pod
等權(quán)限,所以我們需要給 tiller
寫一個 ServiceAccount
的配置文件來給它分配這些權(quán)限盖文。
apiVersion: v1
kind: ServiceAccount
metadata:
name: tiller # 賬戶就叫tiller
namespace: kube-system # 賬戶設(shè)置到k8s系統(tǒng)的命名空間下
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: tiller
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin # 給他集群管理員的角色嘱蛋,這樣權(quán)限就很大了,如果你熟悉k8s的rbac,你可以稍微限制一下tiller的權(quán)限洒敏。
subjects:
- kind: ServiceAccount
name: tiller
namespace: kube-system
老規(guī)矩龄恋,盤他:
接著我們執(zhí)行helm的init命令:
helm init --service-account tiller --upgrade -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.16.0 --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
我們設(shè)置 service account
為 tiller
; --upgrade
表示更新 k8s
中的 tiller
桐玻,如果沒有就安裝篙挽; -i
表示安裝 tiller
pod
所使用的鏡像荆萤,我們使用阿里云的鏡像镊靴,后面的版本號一定要跟 helm
的版本號一致;最后是設(shè)置一個默認的穩(wěn)定的包源链韭,還是使用阿里云的偏竟。
效果如下:
我們來看看 pod
:
已經(jīng) running
了,這樣我們的 helm
就安裝完成了敞峭。
helm2
的安裝還是比較簡單的踊谋,而 helm3
去掉了 tiller
組件,相信比 helm2
安裝起來還要簡單旋讹。
不過別看 helm
安裝簡單殖蚕,就覺得它可有可無。其實在接下來的文章中沉迹,我們會利用 helm
部署 gitlab
睦疫、 gitlab-ci
和 harbor
等 devops
重要的組成部分。并且鞭呕,在我們的自動部署流程中也會用到 helm
蛤育。