新聞中心
Helm Charts 一鍵安裝云原生應(yīng)用指南
作者:鄧洪超 2019-08-28 12:02:04
云計(jì)算
云原生 App Hub 同步了官方 Helm Hub 里的所有應(yīng)用,還自動(dòng)替換了這些 Charts 里所有不可訪問(wèn)的鏡像 URL(比如 gcr.io, quay.io 等),國(guó)內(nèi)開(kāi)發(fā)者也可以通過(guò) helm install “一鍵安裝”應(yīng)用了。

成都創(chuàng)新互聯(lián)公司專(zhuān)業(yè)為企業(yè)提供哈密網(wǎng)站建設(shè)、哈密做網(wǎng)站、哈密網(wǎng)站設(shè)計(jì)、哈密網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、哈密企業(yè)網(wǎng)站模板建站服務(wù),十載哈密做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
劃重點(diǎn):
1.“開(kāi)放云原生應(yīng)用中心” (簡(jiǎn)稱(chēng) AppHub ) 上線,https://developer.aliyun.com/hub。
App Hub 同步了官方 Helm Hub 里的所有應(yīng)用,還自動(dòng)替換了這些 Charts 里所有不可訪問(wèn)的鏡像 URL(比如 gcr.io, quay.io 等),國(guó)內(nèi)開(kāi)發(fā)者也可以通過(guò) helm install “一鍵安裝”應(yīng)用了。
2.實(shí)例:用 Helm V3 快速部署 Guestbbook
3.第一屆云原生應(yīng)用大賽上線,上傳你的Helm Charts 就有機(jī)會(huì)贏取 cherry 鍵盤(pán),蘋(píng)果 AirPods 耳機(jī)啦
------ 正文 ------
這是大廠程序員小張普普通通的一個(gè)早晨,大家好像在討論著什么:
“什么?聽(tīng)說(shuō)隔壁公司在用 K8s 發(fā)布應(yīng)用了?”
“據(jù)說(shuō)在用 Helm !”
像往常,小張根本不關(guān)心這些無(wú)聊的討論。他穩(wěn)穩(wěn)的坐在辦公桌前,打開(kāi)公司內(nèi)部自研的、魔改 Gitlab 打造的項(xiàng)目管理系統(tǒng),點(diǎn)擊了好幾個(gè) Button 之后,開(kāi)始一天辛勤的勞作。
但這一次不知道為何,小張的內(nèi)心居然有點(diǎn)慌:“ Helm?啥是 Helm ?”
------ 分割線 ------
Helm—— K8s 應(yīng)用部署與打包工具
如果一個(gè)用戶(hù)想要部署起來(lái)一個(gè) K8s 應(yīng)用,最快捷的方法是什么呢?
我們知道,Kubernetes (簡(jiǎn)稱(chēng) k8s ) 是一個(gè)能夠部署和管理容器的平臺(tái)。然而,在 k8s 里還沒(méi)有抽象到“應(yīng)用”這一層概念。一個(gè)應(yīng)用往往由多個(gè) k8s 資源 ( Deployment、Service、ConfigMap )組成。所以,我們需要一個(gè)工具在 k8s 之上來(lái)部署和管理一個(gè)應(yīng)用所包含的資源( K8s API Resource ),這就是 Helm 所做的事情。
除此以外,Helm 定義了一套 Chart 格式來(lái)描述一個(gè)應(yīng)用。怎么理解 Chart 呢?打個(gè)比方,一個(gè)安卓程序打包成 APK 格式,就可以安裝到任意一臺(tái)運(yùn)行安卓系統(tǒng)的手機(jī)上。如果我們把 k8s 比做安卓系統(tǒng),K8s 應(yīng)用比做安卓程序,那么 Chart 就可以比做 APK。這也意味著,K8s 應(yīng)用只要打包成 Chart ,就可以通過(guò) Helm 部署到任意一個(gè) k8s 集群上。
通常來(lái)說(shuō),我們可以直接使用別人已經(jīng)做好的 Helm Chart ,就跟使用 Docker 鏡像一樣。所以,Helm 社區(qū)已經(jīng)維護(hù)了一個(gè)官方 Helm Hub,這個(gè) Hub 里包含的應(yīng)用非常豐富,是目前云原生開(kāi)發(fā)者搜索和下載應(yīng)用的主要站點(diǎn)。
AppHub—— Helm Hub 的中國(guó)小站
不過(guò),遺憾的是,在國(guó)內(nèi)使用 Helm Hub,對(duì)于絕大多數(shù)開(kāi)發(fā)者來(lái)說(shuō)都是很痛苦的一件事情。
原因很簡(jiǎn)單,隨便打開(kāi)一個(gè) Charts 文件,你就會(huì)看到這個(gè)文件里充斥著大量的不可訪問(wèn)的鏡像 URL :
或者是依賴(lài)根本訪問(wèn)不到的 Charts 庫(kù):
咱們軟件工程師的時(shí)間這么寶貴(少),根本不想花時(shí)間解決這些無(wú)聊的網(wǎng)絡(luò)問(wèn)題上(大霧)!
可是,看著國(guó)外的程序員們通過(guò)一條 helm install 命令就把應(yīng)用部署起來(lái),咱們?cè)趺锤杏X(jué)還是有點(diǎn)酸呢 ……
所以在正式開(kāi)始探索云原生應(yīng)用管理之前,我們首先要為你介紹一個(gè)叫做“開(kāi)放云原生應(yīng)用中心” ( Cloud Native App Hub,簡(jiǎn)稱(chēng) AppHub ) 的服務(wù),它的主頁(yè)是:https://developer.aliyun.com/hub。
什么是“開(kāi)放云原生應(yīng)用中心”?
AppHub 是一個(gè)托管在國(guó)內(nèi)公有云上、全公益性的 Helm Hub “中國(guó)站”。這個(gè)站點(diǎn)的一個(gè)重要職責(zé),就是把所有 Helm 官方 Hub 托管的應(yīng)用自動(dòng)同步到國(guó)內(nèi);同時(shí),自動(dòng)將 Charts 文件中的 gcr.io 等所有有網(wǎng)絡(luò)訪問(wèn)問(wèn)題的 URL 替換成為穩(wěn)定的國(guó)內(nèi)鏡像 URL 。
這樣,中國(guó)的開(kāi)發(fā)者終于也可以隨心所欲的搜索 Charts,然后直接使用 helm install 命令將這些應(yīng)用安裝在全世界任何一個(gè) Kubernetes 集群當(dāng)中。截止到目前為止, Helm Hub 中國(guó)鏡像站已經(jīng)實(shí)時(shí)全量同步了 Helm Hub 北美官方站 https://hub.helm.sh/ 的所有內(nèi)容,同時(shí)還精選同步了比如 GitLab 等多個(gè)熱門(mén)的第三方 Charts Repo。目前已總計(jì)上線了 344 個(gè) Charts,并且還在不斷增加中。
接下來(lái),我們就進(jìn)入喜聞樂(lè)見(jiàn)的實(shí)踐環(huán)節(jié)!
實(shí)例:用最快的速度部署 Guestbook
首先,當(dāng)然是安裝 Helm 。
在這里我們強(qiáng)烈推薦你使用 Helm v3 版本。
Helm v3 跟 Helm v2 的區(qū)別就像 Python 2 和 3 那么大,而且還比 Helm v2 要好用的多(比如:不需要安裝服務(wù)端組件 Tiller)。至于為什么 是 Helm v3?可以去搜索《為什么你必須盡快轉(zhuǎn)向 Helm v3 》文章,會(huì)為你解釋這個(gè)事情。
而為了方便國(guó)內(nèi)開(kāi)發(fā)者使用,我們已經(jīng)自動(dòng)同步了 Helm v3 二進(jìn)制文件的下載鏈接到國(guó)內(nèi)(一定要試,真的是秒下):
- MacOS amd64 tar.gz
- MacOS amd64 zip
- Linux 386
- Linux amd64
- Linux arm64
- Windows amd64
下載到 Helm 二進(jìn)制文件直接解壓到 $PATH 下就可以使用了。
接下來(lái),我們使用 Helm 快速部署一個(gè) guestbook 應(yīng)用。這里假設(shè)你有一個(gè)阿里云 Kubernetes 服務(wù)在運(yùn)行了(如果沒(méi)有的話也沒(méi)關(guān)系,下面還有自建 K8s 集群的例子)。
第一步是添加 apphub 作為你的 Helm Hub Repo:
- $ helm repo add apphub https://apphub.aliyuncs.com
可以直接在命令行搜索 guestbook:
- $ helm search guestbook
- NAME CHART VERSION APP VERSION DESCRIPTION
- apphub/guestbook 0.2.0 1.0.0 A Helm chart to deploy Guestbook three tier web...
然后,只需一行命令即可:
- $ helm install guestbook apphub/guestbook
訪問(wèn) Guestbook 服務(wù)
部署完成后,運(yùn)行以下命令來(lái)查詢(xún)并等待 pods 啟動(dòng)完畢 ( Running ):
- $ kubectl get pod
- NAME READY STATUS RESTARTS AGE
- guestbook-d85895895-5mdx6 1/1 Running 0 5m59s
- guestbook-d85895895-zh4l4 1/1 Running 0 5m59s
- redis-master-7b5cc58fc8-2wjmn 1/1 Running 0 5m59s
- redis-slave-859585ff7f-4v9hj 1/1 Running 0 5m59s
- redis-slave-859585ff7f-fppqn 1/1 Running 0 5m59s
查詢(xún)服務(wù)地址:
- $kubectl get service -l app.kubernetes.io/name=guestbook
- NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
- guestbook LoadBalancer 172.21.1.213 47.95.136.189 3000:32244/TCP 11m
通過(guò) External IP 即可訪問(wèn) guestbook 服務(wù):
使用 Minikube 或者自建 K8s 集群?
實(shí)際上,K8s 本身是不區(qū)分云上服務(wù)還是自建集群的。只不過(guò)在沒(méi)有云提供的負(fù)載均衡服務(wù)的話,Service 的訪問(wèn)方式會(huì)稍微麻煩一些,比如使用 NodePort :
- $ helm install guestbook apphub/guestbook --set service.type=NodePort
這條命令執(zhí)行完之后,應(yīng)用會(huì)自動(dòng)提示你接下來(lái)的訪問(wèn)方式。而通過(guò)--set 這種方式設(shè)置應(yīng)用參數(shù)到底是怎么回事,我們后面的文章會(huì)細(xì)聊。
如果是 Minikube 的話,還需要把這個(gè) NodePort Service 從 Minikube 里映射出來(lái)才能訪問(wèn):
- $ minikube service guestbook
試用“一鍵安裝” (體驗(yàn)功能)
除了正常的部署方法, AppHub 上也可以通過(guò)網(wǎng)頁(yè) UI 來(lái)體驗(yàn)一鍵部署 Chart 到任何云的 k8s 上。
舉個(gè)例子,只需打開(kāi) guestbook 應(yīng)用詳情頁(yè)面,點(diǎn)擊 “一鍵安裝”:
然后在”安裝參數(shù)“彈窗里填寫(xiě)相應(yīng)的服務(wù)器 URL 和 base64 編碼的證書(shū)數(shù)據(jù)后,點(diǎn)擊“確認(rèn)”,AppHub 就會(huì)嘗試安裝 guestbook chart 到對(duì)應(yīng) k8s 集群上,成功后會(huì)彈窗通知。
不過(guò),這個(gè)功能目前只是“體驗(yàn)”,因?yàn)槟悻F(xiàn)在還沒(méi)辦法在 AppHub 上直接修改應(yīng)用的配置參數(shù)。在線進(jìn)行“應(yīng)用定制”的功能就在 AppHub 的 Roadmap 里,預(yù)計(jì)下個(gè)月會(huì)上線。
不過(guò),說(shuō)起 Roadmap 的話:AppHub 6 個(gè)月內(nèi)的 Roadmap ,都在 Github 上開(kāi)源!是的,你可以通過(guò) Github 來(lái)隨時(shí)對(duì)這個(gè) Helm Hub 中國(guó)小站點(diǎn)提出你的改進(jìn)思路。比如:如何更好的做“應(yīng)用定制”?如何對(duì)接和托管你自己的 Charts Repo ?等等。
我們的口號(hào)是:每一位中國(guó)開(kāi)發(fā)者,都是我們的 PM !(認(rèn)真臉)
遠(yuǎn)不止 Helm !
可以看到,通過(guò) Helm 快速部署起來(lái)K8s 應(yīng)用的過(guò)程,使用門(mén)檻和心智負(fù)擔(dān)都是非常低的。而相比于傳統(tǒng)的應(yīng)用構(gòu)建、編排和發(fā)布的流程,Helm + K8s 的自動(dòng)化組合正在迅速成為云時(shí)代提升開(kāi)發(fā)者效率的不二法寶。
而這里介紹到的所有同步自官方 Hub Repo 的應(yīng)用 Charts ,全都托管在這個(gè) Github 上: cloudnativeapp/charts。大家有對(duì) AppHub 相關(guān)的任何吐槽,都?xì)g迎來(lái)這個(gè) Repo 提 issue ;也歡迎來(lái)通過(guò)提交 pull requests 把你的 Charts 和 Repo 加入到 AppHub 上。
第一屆云原生應(yīng)用大賽火熱報(bào)名
看了前面的講解,你肯定已經(jīng)躍躍欲試,希望可以制作自己的云原生應(yīng)用吧!機(jī)會(huì)來(lái)了,首屆
云原生應(yīng)用開(kāi)發(fā)大賽正在火熱報(bào)名中!本次大賽旨在鼓勵(lì)和普及 Helm Charts 在國(guó)內(nèi)的使用,幫助國(guó)內(nèi)開(kāi)發(fā)者通過(guò)云原生的方式打包和分發(fā)自己的應(yīng)用,從而更好的借助云原生的浪潮,讓自己的軟件在云時(shí)代發(fā)揮出最大的能量!
9 月2 日之前,使用任意語(yǔ)言開(kāi)發(fā)一個(gè)可以被容器化、運(yùn)行在 K8s 上的應(yīng)用,并把該應(yīng)用做成 Helm Charts 格式就可以參加比賽,我們準(zhǔn)備了蘋(píng)果 Airpods、Cherry 鍵盤(pán)、天貓精靈、阿里云T恤等豐厚獎(jiǎng)品,誠(chéng)摯邀請(qǐng)所有對(duì)云原生應(yīng)用感興趣的同學(xué)參加大賽!
報(bào)名鏈接
作者簡(jiǎn)介:鄧洪超,阿里云容器平臺(tái)軟件工程師,前 CoreOS 軟件工程師,Kubernetes Operator 機(jī)制的初始作者之一、早期參與創(chuàng)建 Operator 開(kāi)源項(xiàng)目,對(duì) K8s 應(yīng)用管理體系有較多的研究和經(jīng)驗(yàn)。
分享文章:Helm Charts 一鍵安裝云原生應(yīng)用指南
轉(zhuǎn)載來(lái)于:http://www.dlmjj.cn/article/djscsgp.html


咨詢(xún)
建站咨詢(xún)
