kubernetes(k8s)helm安裝和基礎(chǔ)操作命令

helm簡(jiǎn)介

很多人都使用過Ubuntu下的apt-get或者CentOS下的yum, 這兩者都是Linux系統(tǒng)下的包管理工具。采用apt-get/yum,應(yīng)用開發(fā)者可以管理應(yīng)用包之間的依賴關(guān)系,發(fā)布應(yīng)用;用戶則可以以簡(jiǎn)單的方式查找、安裝、升級(jí)、卸載應(yīng)用程序。

我們可以將Helm看作Kubernetes下的apt-get/yum。Helm是Deis (https://deis.com/) 開發(fā)的一個(gè)用于kubernetes的包管理器。每個(gè)包稱為一個(gè)Chart,一個(gè)Chart是一個(gè)目錄(一般情況下會(huì)將目錄進(jìn)行打包壓縮,形成name-version.tgz格式的單一文件,方便傳輸和存儲(chǔ))。

對(duì)于應(yīng)用發(fā)布者而言,可以通過Helm打包應(yīng)用,管理應(yīng)用依賴關(guān)系,管理應(yīng)用版本并發(fā)布應(yīng)用到軟件倉庫。

對(duì)于使用者而言,使用Helm后不用需要了解Kubernetes的Yaml語法并編寫應(yīng)用部署文件,可以通過Helm下載并在kubernetes上安裝需要的應(yīng)用。

除此以外,Helm還提供了kubernetes上的軟件部署,刪除,升級(jí),回滾應(yīng)用的強(qiáng)大功能。

基本概念

Helm

Helm 是一個(gè)命令行下的客戶端工具。主要用于 Kubernetes 應(yīng)用程序 Chart 的創(chuàng)建、打包、發(fā)布以及創(chuàng)建和管理本地和遠(yuǎn)程的 Chart 倉庫。

Tiller

Tiller 是 Helm 的服務(wù)端,部署在 Kubernetes 集群中。Tiller 用于接收 Helm 的請(qǐng)求,并根據(jù) Chart 生成 Kubernetes 的部署文件( Helm 稱為 Release ),然后提交給 Kubernetes 創(chuàng)建應(yīng)用。Tiller 還提供了 Release 的升級(jí)、刪除、回滾等一系列功能。

Chart

Helm 的軟件包,采用 TAR 格式。類似于 APT 的 DEB 包或者 YUM 的 RPM 包,其包含了一組定義 Kubernetes 資源相關(guān)的 YAML 文件。

Repoistory

Helm 的軟件倉庫,Repository 本質(zhì)上是一個(gè) Web 服務(wù)器,該服務(wù)器保存了一系列的 Chart 軟件包以供用戶下載,并且提供了一個(gè)該 Repository 的 Chart 包的清單文件以供查詢。Helm 可以同時(shí)管理多個(gè)不同的 Repository。

Release

使用 helm install 命令在 Kubernetes 集群中部署的 Chart 稱為 Release。

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

helm工作原理

helm-structrure.png
Chart Install 過程:

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

Chart Update過程:

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

Chart Rollback過程:

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

helm安裝

我們需要安裝 Helm 客戶端到本地,同時(shí)安裝服務(wù)端 Tiller 到 Kubernetes 中
可以在Helm Realese頁面下載二進(jìn)制文件,這里下載的v2.14.2版本,解壓后將可執(zhí)行文件helm拷貝到/usr/local/bin目錄下即可,這樣Helm客戶端就在這臺(tái)機(jī)器上安裝完成了。

$ wget https://get.helm.sh/helm-v2.14.2-linux-amd64.tar.gz
$ tar zxf helm-v2.14.2-linux-amd64.tar.gz
$ cd linux-amd64
$ cp helm /usr/local/bin

現(xiàn)在可以使用Helm命令查看版本了,會(huì)提示無法連接到服務(wù)端Tiller

$ helm version
Client: &version.Version{SemVer:"v2.10.0", GitCommit:"9ad53aac42165a5fadc6c87be0dea6b115f93090", GitTreeState:"clean"}
Error: could not find tiller

要安裝 Helm 的服務(wù)端程序,我們需要使用到kubectl工具,所以先確保kubectl工具能夠正常的訪問 kubernetes 集群的apiserver哦。

然后我們?cè)诿钚兄袌?zhí)行初始化操作:

$ helm init

由于 Helm 默認(rèn)會(huì)去gcr.io拉取鏡像,所以如果你當(dāng)前執(zhí)行的機(jī)器沒有配置科學(xué)上網(wǎng)的話可以實(shí)現(xiàn)下面的命令代替:

$ helm init --upgrade -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.14.2 --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/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
Happy Helming!

如果在安裝過程中遇到了一些其他問題,比如初始化的時(shí)候出現(xiàn)了如下錯(cuò)誤:

E0125 14:03:19.093131   56246 portforward.go:331] an error occurred forwarding 55943 -> 44134: error forwarding port 44134 to pod d01941068c9dfea1c9e46127578994d1cf8bc34c971ff109dc6faa4c05043a6e, uid : unable to do port forwarding: socat not found.
2018/01/25 14:03:19 (0xc420476210) (0xc4203ae1e0) Stream removed, broadcasting: 3
2018/01/25 14:03:19 (0xc4203ae1e0) (3) Writing data frame
2018/01/25 14:03:19 (0xc420476210) (0xc4200c3900) Create stream
2018/01/25 14:03:19 (0xc420476210) (0xc4200c3900) Stream added, broadcasting: 5
Error: cannot connect to Tiller

解決方案:在所有節(jié)點(diǎn)上安裝socat可以解決(node節(jié)點(diǎn)安裝)

$ yum install -y socat

Helm 服務(wù)端正常安裝完成后,Tiller默認(rèn)被部署在kubernetes集群的kube-system命名空間下:

$ kubectl get pod -n kube-system -l app=helm
NAME                             READY     STATUS    RESTARTS   AGE
tiller-deploy-86b844d8c6-44fpq   1/1       Running   0          7m

此時(shí),我們查看 Helm 版本就都正常了:

helm version
Client: &version.Version{SemVer:"v2.14.2", GitCommit:"a8b13cc5ab6a7dbef0a58f5061bcc7c0c61598e7", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.14.2", GitCommit:"a8b13cc5ab6a7dbef0a58f5061bcc7c0c61598e7", GitTreeState:"clean"}

給 Tiller 授權(quán)

需要為Tiller創(chuàng)建一個(gè)ServiceAccount,讓他擁有執(zhí)行的權(quán)限,詳細(xì)內(nèi)容可以查看 Helm 文檔中的Role-based Access Control。 創(chuàng)建rbac-config.yaml文件:

apiVersion: v1
kind: ServiceAccount
metadata:
  name: tiller
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: tiller
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
  - kind: ServiceAccount
    name: tiller
    namespace: kube-system

然后使用kubectl創(chuàng)建:

$ kubectl create -f rbac-config.yaml
serviceaccount "tiller" created
clusterrolebinding.rbac.authorization.k8s.io "tiller" created

創(chuàng)建了tiller的 ServceAccount 后還沒完,因?yàn)槲覀兊?Tiller 之前已經(jīng)就部署成功了,而且是沒有指定 ServiceAccount 的,所以我們需要給 Tiller 打上一個(gè) ServiceAccount 的補(bǔ)丁:

$ kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'

上面這一步非常重要,不然后面在使用 Helm 的過程中可能出現(xiàn)Error: no available release name found的錯(cuò)誤信息。

卸載 Helm 服務(wù)器端 Tiller
如果你需要在 Kubernetes 中卸載已部署的 Tiller,可使用以下命令完成卸載。

$ helm reset 或
$ helm reset --force

為了方便helm命令的使用,helm提供了自動(dòng)補(bǔ)全功能,helmj基于bash自動(dòng)補(bǔ)全:

source <(helm completion bash)

至此, Helm客戶端和服務(wù)端都配置完成了,接下來我們看看基本操作命令吧。

helm基礎(chǔ)操作命令:

若要查看在存儲(chǔ)庫中可用的所有 Helm charts,鍵入以下命令:

$ helm search 
$ helm search mysql

若要查看詳細(xì)信息,鍵入:

$ helm inspect  stable/mysql
appVersion: 5.7.14
description: Fast, reliable, scalable, and easy to use open-source relational database
  system.
engine: gotpl
home: https://www.mysql.com/
icon: https://www.mysql.com/common/logos/logo-mysql-170x115.png
keywords:
- mysql
- database
- sql
maintainers:
- email: o.with@sportradar.com
  name: olemarkus
- email: viglesias@google.com
  name: viglesiasce
name: mysql
sources:
- https://github.com/kubernetes/charts
- https://github.com/docker-library/mysql
version: 0.10.1

---
## mysql image version
## ref: https://hub.docker.com/r/library/mysql/tags/
##
image: "mysql"
imageTag: "5.7.14"
...

若要查看在群集上安裝的Charts列表,鍵入:

$ helm list 

更新repo

$ helm repo update

刪除releases

$ helm delete chartsnames1

徹底刪除releases

$ helm delete --purge mycharts

打包c(diǎn)hart:

$ helm package hello-helm
Successfully packaged chart and saved it to: /root/course/kubeadm/helm/hello-helm-0.1.0.tgz

查看之前的版本

$ helm history chartsname1

恢復(fù)之前的版本

$ helm rollback chartsname1 2

下載charts到本地

$ helm search chartsname1
$ helm fetch stable/chartsname1
ll     # 查看下載的charts
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,837評(píng)論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,196評(píng)論 3 414
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,688評(píng)論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,654評(píng)論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,456評(píng)論 6 406
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,955評(píng)論 1 321
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,044評(píng)論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,195評(píng)論 0 287
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,725評(píng)論 1 333
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,608評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,802評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,318評(píng)論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,048評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,422評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,673評(píng)論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,424評(píng)論 3 390
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,762評(píng)論 2 372

推薦閱讀更多精彩內(nèi)容