Helm

概述

Helm 是 Kubernetes 生態(tài)系統(tǒng)中的一個(gè)軟件包管理工具溶锭。

官方 GitHub

Kubernetes 的應(yīng)用部署

Kubernetes 是一個(gè)提供了基于容器的應(yīng)用集群管理解決方案,Kubernetes 為容器化應(yīng)用提供了部署運(yùn)行忧侧、資源調(diào)度搏嗡、服務(wù)發(fā)現(xiàn)和動(dòng)態(tài)伸縮等一系列完整功能浴麻。

Kubernetes 的核心設(shè)計(jì)理念是:用戶定義要部署的應(yīng)用程序的規(guī)則郭卫,而 Kubernetes 則負(fù)責(zé)按照定義的規(guī)則部署并運(yùn)行應(yīng)用程序。如果應(yīng)用程序出現(xiàn)問(wèn)題導(dǎo)致偏離了定義的規(guī)格舔庶,Kubernetes 負(fù)責(zé)對(duì)其進(jìn)行自動(dòng)修正抛蚁。例如:定義的應(yīng)用規(guī)則要求部署兩個(gè)實(shí)例(Pod),其中一個(gè)實(shí)例異常終止了惕橙,Kubernetes 會(huì)檢查到并重新啟動(dòng)一個(gè)新的實(shí)例瞧甩。

用戶通過(guò)使用 Kubernetes API 對(duì)象來(lái)描述應(yīng)用程序規(guī)則,包括 Pod弥鹦、Service肚逸、Volume、Namespace彬坏、ReplicaSet朦促、Deployment、Job 等等栓始。一般這些資源對(duì)象的定義需要寫(xiě)入一系列的 YAML 文件中务冕,然后通過(guò) Kubernetes 命令行工具 Kubectl 調(diào) Kubernetes API 進(jìn)行部署。

以一個(gè)典型的三層應(yīng)用 WordPress 為例幻赚,該應(yīng)用程序就涉及到多個(gè) Kubernetes API 對(duì)象禀忆,而要描述這些 Kubernetes API 對(duì)象就可能要同時(shí)維護(hù)多個(gè) YAML 文件。

從上圖可以看到落恼,在進(jìn)行 Kubernetes 軟件部署時(shí)箩退,我們面臨下述幾個(gè)問(wèn)題(Helm 的出現(xiàn)就是為了很好地解決下面這些問(wèn)題):

  • 如何管理、編輯和更新這些這些分散的 Kubernetes 應(yīng)用配置文件佳谦。
  • 如何把一套相關(guān)的配置文件作為一個(gè)應(yīng)用進(jìn)行管理戴涝。
  • 如何分發(fā)和重用 Kubernetes 的應(yīng)用配置。

什么是 Helm

Helm 是 Deis 開(kāi)發(fā)的一個(gè)用于 Kubernetes 應(yīng)用的包管理工具,主要用來(lái)管理 Charts啥刻。有點(diǎn)類(lèi)似于 Ubuntu 中的 APT 或 CentOS 中的 YUM奸鸯。

Helm Chart 是用來(lái)封裝 Kubernetes 原生應(yīng)用程序的一系列 YAML 文件≈J玻可以在你部署應(yīng)用的時(shí)候自定義應(yīng)用程序的一些 Metadata府喳,以便于應(yīng)用程序的分發(fā)。

對(duì)于應(yīng)用發(fā)布者而言蘑拯,可以通過(guò) Helm 打包應(yīng)用、管理應(yīng)用依賴關(guān)系兜粘、管理應(yīng)用版本并發(fā)布應(yīng)用到軟件倉(cāng)庫(kù)申窘。

對(duì)于使用者而言,使用 Helm 后不用需要編寫(xiě)復(fù)雜的應(yīng)用部署文件孔轴,可以以簡(jiǎn)單的方式在 Kubernetes 上查找剃法、安裝、升級(jí)路鹰、回滾贷洲、卸載應(yīng)用程序

組件及相關(guān)術(shù)語(yǔ)

  • Helm: 是一個(gè)命令行下的客戶端工具晋柱。主要用于 Kubernetes 應(yīng)用程序 Chart 的創(chuàng)建优构、打包、發(fā)布以及創(chuàng)建和管理本地和遠(yuǎn)程的 Chart 倉(cāng)庫(kù)
  • Tiller: 是 Helm 的服務(wù)端雁竞,部署在 Kubernetes 集群中钦椭。Tiller 用于接收 Helm 的請(qǐng)求,并根據(jù) Chart 生成 - Kubernetes 的部署文件( Helm 稱(chēng)為 Release )碑诉,然后提交給 Kubernetes 創(chuàng)建應(yīng)用彪腔。Tiller 還提供了 Release 的升級(jí)、刪除进栽、回滾等一系列功能
  • Chart: Helm 的軟件包德挣,采用 TAR 格式。類(lèi)似于 APT 的 DEB 包或者 YUM 的 RPM 包快毛,其包含了一組定義 Kubernetes 資源相關(guān)的 YAML 文件
  • Repoistory: Helm 的軟件倉(cāng)庫(kù)格嗅,Repository 本質(zhì)上是一個(gè) Web 服務(wù)器,該服務(wù)器保存了一系列的 Chart 軟件包以供用戶下載祸泪,并且提供了一個(gè)該 Repository 的 Chart 包的清單文件以供查詢吗浩。Helm 可以同時(shí)管理多個(gè)不同的 Repository
  • Release: 使用<font color=red> helm install </font>命令在 Kubernetes 集群中部署的 Chart 稱(chēng)為 Release

注意: Helm 中提到的 Release 和我們通常概念中的版本有所不同,這里的 Release 可以理解為 Helm 使用 Chart 包部署的一個(gè)應(yīng)用實(shí)例没隘。

工作原理

下圖描述了 Helm 的幾個(gè)關(guān)鍵組件 Helm(客戶端)懂扼、Tiller(服務(wù)器)、Repository(Chart 軟件倉(cāng)庫(kù))、Chart(軟件包)之間的關(guān)系阀湿。


Chart Install 安裝過(guò)程

  • Helm 從指定的目錄或者 TAR 文件中解析出 Chart 結(jié)構(gòu)信息
  • Helm 將指定的 Chart 結(jié)構(gòu)和 Values 信息通過(guò) gRPC 傳遞給 Tiller
  • Tiller 根據(jù) Chart 和 Values 生成一個(gè) Release
  • Tiller 將 Release 發(fā)送給 Kubernetes 用于生成 Release

Chart Update 更新過(guò)程

  • Helm 從指定的目錄或者 TAR 文件中解析出 Chart 結(jié)構(gòu)信息
  • Helm 將需要更新的 Release 的名稱(chēng)赶熟、Chart 結(jié)構(gòu)和 Values 信息傳遞給 Tiller
  • Tiller 生成 Release 并更新指定名稱(chēng)的 Release 的 History
  • Tiller 將 Release 發(fā)送給 Kubernetes 用于更新 Release

Chart Rollback 回滾過(guò)程

  • Helm 將要回滾的 Release 的名稱(chēng)傳遞給 Tiller
  • Tiller 根據(jù) Release 的名稱(chēng)查找 History
  • Tiller 從 History 中獲取上一個(gè) Release
  • Tiller 將上一個(gè) Release 發(fā)送給 Kubernetes 用于替換當(dāng)前 Release

Chart 處理依賴

Tiller 在處理 Chart 時(shí),直接將 Chart 以及其依賴的所有 Charts 合并為一個(gè) Release陷嘴,同時(shí)傳遞給 Kubernetes映砖。因此 Tiller 并不負(fù)責(zé)管理依賴之間的啟動(dòng)順序。Chart 中的應(yīng)用需要能夠自行處理依賴關(guān)系灾挨。

安裝 Helm

安裝客戶端 Helm

Helm 的安裝方式很多邑退,這里采用二進(jìn)制的方式安裝。更多安裝方法可以參考 Helm 的 官方幫助文檔

# 下載
wget https://get.helm.sh/helm-v2.11.0-linux-amd64.tar.gz
# 解壓
tar -zxvf helm-v2.11.0-linux-amd64.tar.gz
# 復(fù)制客戶端執(zhí)行文件到 bin 目錄下
cp linux-amd64/helm /usr/local/bin/

安裝服務(wù)端 Tiller

Tiller 是以 Deployment 方式部署在 Kubernetes 集群中的劳澄,只需使用以下指令便可簡(jiǎn)單的完成安裝

helm init --upgrade --tiller-image registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.11.0 --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

給 Tiller 授權(quán)

Helm 的服務(wù)端 Tiller 是一個(gè)部署在 Kubernetes 中 <font color=red>Kube-system</font> Namespace 下的 Deployment地技,它會(huì)去連接 kube-api 在 Kubernetes 里創(chuàng)建和刪除應(yīng)用。

從 Kubernetes 1.6 版本開(kāi)始秒拔,API Server 啟用了 RBAC 授權(quán)莫矗。目前的 Tiller 部署時(shí)默認(rèn)沒(méi)有定義授權(quán)的 ServiceAccount,這會(huì)導(dǎo)致訪問(wèn) API Server 時(shí)被拒絕砂缩。所以我們需要明確為 Tiller 部署添加授權(quán)

  • 創(chuàng)建一個(gè)名為 tiller-adminuser.yaml 的配置文件作谚,為 Tiller 創(chuàng)建服務(wù)帳號(hào)和綁定角色
apiVersion: v1
kind: ServiceAccount
metadata:
  name: tiller
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: tiller-cluster-rule
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: tiller
  namespace: kube-system
kubectl apply -f tiller-adminuser.yaml
  • 為 Tiller 設(shè)置帳號(hào)
# 使用 kubectl patch 更新 API 對(duì)象
kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'
# 輸出如下
deployment.extensions/tiller-deploy patched
  • 查看是否授權(quán)成功
kubectl get deploy --namespace kube-system tiller-deploy --output yaml|grep  serviceAccount
# 輸出如下
serviceAccount: tiller
serviceAccountName: tiller

驗(yàn)證安裝是否成功

kubectl -n kube-system get pods|grep tiller
# 輸出如下
tiller-deploy-6d74cd8c9d-v6zg4              1/1     Running   0          10m
helm version
# 輸出如下
Client: &version.Version{SemVer:"v2.11.0", GitCommit:"2e55dbe1fdb5fdb96b75ff144a339489417b146b", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.11.0", GitCommit:"2e55dbe1fdb5fdb96b75ff144a339489417b146b", GitTreeState:"clean"}

卸載 Tiller

如果你需要在 Kubernetes 中卸載已部署的 Tiller,可使用以下命令完成卸載

helm reset
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末庵芭,一起剝皮案震驚了整個(gè)濱河市妹懒,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌喳挑,老刑警劉巖彬伦,帶你破解...
    沈念sama閱讀 218,607評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異伊诵,居然都是意外死亡单绑,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)曹宴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)搂橙,“玉大人,你說(shuō)我怎么就攤上這事笛坦∏” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,960評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵版扩,是天一觀的道長(zhǎng)废离。 經(jīng)常有香客問(wèn)我,道長(zhǎng)礁芦,這世上最難降的妖魔是什么蜻韭? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,750評(píng)論 1 294
  • 正文 為了忘掉前任悼尾,我火速辦了婚禮,結(jié)果婚禮上肖方,老公的妹妹穿的比我還像新娘闺魏。我一直安慰自己,他們只是感情好俯画,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,764評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布析桥。 她就那樣靜靜地躺著,像睡著了一般艰垂。 火紅的嫁衣襯著肌膚如雪泡仗。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,604評(píng)論 1 305
  • 那天材泄,我揣著相機(jī)與錄音沮焕,去河邊找鬼。 笑死拉宗,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的辣辫。 我是一名探鬼主播旦事,決...
    沈念sama閱讀 40,347評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼急灭!你這毒婦竟也來(lái)了姐浮?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,253評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤葬馋,失蹤者是張志新(化名)和其女友劉穎卖鲤,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體畴嘶,經(jīng)...
    沈念sama閱讀 45,702評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蛋逾,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,893評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了窗悯。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片区匣。...
    茶點(diǎn)故事閱讀 40,015評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖蒋院,靈堂內(nèi)的尸體忽然破棺而出亏钩,到底是詐尸還是另有隱情,我是刑警寧澤欺旧,帶...
    沈念sama閱讀 35,734評(píng)論 5 346
  • 正文 年R本政府宣布姑丑,位于F島的核電站,受9級(jí)特大地震影響辞友,放射性物質(zhì)發(fā)生泄漏栅哀。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,352評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望昌屉。 院中可真熱鬧钙蒙,春花似錦、人聲如沸间驮。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,934評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)竞帽。三九已至扛施,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間屹篓,已是汗流浹背疙渣。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,052評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留堆巧,地道東北人妄荔。 一個(gè)月前我還...
    沈念sama閱讀 48,216評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像谍肤,于是被迫代替她去往敵國(guó)和親啦租。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,969評(píng)論 2 355