初探雲原生應用管理(一): Helm 與 App Hub

系列介紹:初探雲原生應用管理系列是介紹如何用雲原生技術來構建、測試、部署、和管理應用的內容專輯。作這個系列的初衷是爲了推廣雲原生應用管理的最佳實踐,以及傳播開源標準和知識。經過這個系列,但願幫助你們學到 Kubernetes、Helm、Gitops、Kustomize 等新知識。linux

這是大廠程序員小張普普統統的一個早晨,你們好像在討論着什麼:git

「什麼?據說隔壁公司在用 K8s 發佈應用了?」程序員

「聽說在用 Helm !」github

像往常,小張根本不關心這些無聊的討論。他穩穩的坐在辦公桌前,打開公司內部自研的、魔改 Gitlab  打造的項目管理系統,點擊了好幾個 Button 以後,開始一天辛勤的勞做。web

但這一次不知道爲什麼,小張的心裏竟然有點慌:
「 Helm?啥是 Helm ?」redis

------ 分割線 ------windows

Helm:  K8s 應用部署與打包工具

若是一個用戶想要部署起來一個K8s 應用,最快捷的方法是什麼呢?後端

咱們知道,Kubernetes (簡稱 k8s ) 是一個可以部署和管理容器的平臺。然而,在 k8s 裏尚未抽象到「應用」這一層概念。一個應用每每由多個 k8s 資源 ( Deployment、Service、ConfigMap )組成。因此,咱們須要一個工具在 k8s 之上來部署和管理一個應用所包含的資源( K8s API Resource ),這就是 Helm 所作的事情。服務器

除此之外,Helm 定義了一套 Chart 格式來描述一個應用。怎麼理解 Chart 呢?打個比方,一個安卓程序打包成 APK 格式,就能夠安裝到任意一臺運行安卓系統的手機上。若是咱們把 k8s 比作安卓系統,K8s 應用比作安卓程序,那麼 Chart 就能夠比作 APK。這也意味着,K8s 應用只要打包成 Chart ,就能夠經過 Helm 部署到任意一個 k8s 集羣上。網絡

一般來講,咱們能夠直接使用別人已經作好的 Helm Chart ,就跟使用 Docker 鏡像同樣。因此,Helm 社區已經維護了一個官方 Helm Hub,這個 Hub 裏包含的應用很是豐富,是目前雲原生開發者搜索和下載應用的主要站點。

AppHub:  Helm Hub 的中國小站

不過,遺憾的是,在國內使用 Helm Hub,對於絕大多數開發者來講都是很痛苦的一件事情。

緣由很簡單,隨便打開一個 Charts 文件,你就會看到這個文件裏充斥着大量的不可訪問的鏡像 URL :

或者是依賴根本訪問不到的 Charts  庫:

我們軟件工程師的時間這麼寶貴(少),根本不想花時間解決這些無聊的網絡問題上(大霧)!

但是,看着國外的程序員們經過一條 helm install 命令就把應用部署起來,我們怎麼感受仍是有點酸呢 ……

因此在正式開始探索雲原生應用管理以前,咱們首先要爲你介紹一個叫作「開放雲原生應用中心」 ( Cloud Native App Hub,簡稱 AppHub ) 的服務,它的主頁是:https://developer.aliyun.com/hub

AppHub 是一個託管在國內公有云上、全公益性的 Helm Hub 「中國站」,它的後端由阿里雲容器平臺團隊的三位工程師利用 20% 時間開發完成。

而這個站點的一個重要職責,就是把全部 Helm 官方 Hub 託管的應用自動同步到國內;同時,自動將 Charts 文件中的 gcr.io 等全部有網絡訪問問題的 URL 替換成爲穩定的國內鏡像 URL 。

這樣,國內的開發者也能夠自由的使用 helm install 來安裝應用了!

接下來,咱們就進入喜聞樂見的實踐環節!

實例:用最快的速度部署 Guestbook

首先,固然是安裝 Helm 。

在這裏咱們強烈推薦你使用 Helm v3 版本。

Helm v3 跟 Helm v2 的區別就像 Python 2 和 3 那麼大,並且還比 Helm v2 要好用的多(好比:不須要安裝服務端組件 Tiller)。咱們下週的《爲何你必須儘快轉向 Helm v3 》文章,會爲你解釋這個事情。

而爲了方便國內開發者使用,咱們已經自動同步了 Helm  v3 二進制文件的下載連接到國內(必定要試,真的是秒下):

下載到 Helm 二進制文件直接解壓到 $PATH 下就可使用了。

接下來,咱們使用 Helm 快速部署一個 guestbook 應用。這裏假設你有一個阿里雲 Kubernetes 服務在運行了(若是沒有的話也不要緊,下面還有自建 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

訪問 Guestbook 服務

部署完成後,運行如下命令來查詢並等待 pods 啓動完畢 ( 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

查詢服務地址:

$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

經過 External IP 便可訪問 guestbook 服務:

使用 Minikube 或者自建 K8s 集羣?

實際上,K8s 自己是不區分雲上服務仍是自建集羣的。只不過在沒有云提供的負載均衡服務的話,Service 的訪問方式會稍微麻煩一些,好比使用 NodePort :

$ helm install guestbook apphub/guestbook --set service.type=NodePort

這條命令執行完以後,應用會自動提示你接下來的訪問方式。而經過--set 這種方式設置應用參數究竟是怎麼回事,咱們後面的文章會細聊。

若是是 Minikube 的話,還須要把這個 NodePort Service 從 Minikube 裏映射出來才能訪問:

$ minikube service guestbook

試用「一鍵安裝」 (體驗功能)

除了正常的部署方法, AppHub 上也能夠經過網頁 UI 來體驗一鍵部署 Chart 到任何雲的 k8s 上。

舉個例子,只需打開 guestbook 應用詳情頁面,點擊 「一鍵安裝」:

而後在」安裝參數「彈窗裏填寫相應的服務器 URL 和 base64 編碼的證書數據後,點擊「確認」,AppHub 就會嘗試安裝 guestbook chart 到對應 k8s 集羣上,成功後會彈窗通知。

不過,這個功能目前只是「體驗」,由於你如今還沒辦法在 AppHub 上直接修改應用的配置參數。在線進行「應用定製」的功能就在 AppHub 的 Roadmap 裏,預計下個月會上線。

不過,提及 Roadmap 的話:

AppHub 6 個月內的 Roadmap ,都在 Github 上開源!

是的,你能夠經過 Github 來隨時對這個 Helm Hub 中國小站點提出你的改進思路。好比:如何更好的作「應用定製」?如何對接和託管你本身的 Charts Repo ?等等。

咱們的口號是:每一位中國開發者,都是咱們的 PM !(認真臉)

遠不止 Helm !

能夠看到,經過 Helm 快速部署起來K8s 應用的過程,使用門檻和心智負擔都是很是低的。而相比於傳統的應用構建、編排和發佈的流程,Helm + K8s 的自動化組合正在迅速成爲雲時代提高開發者效率的不二法寶。

而這裏介紹到的全部同步自官方 Hub Repo 的應用 Charts ,全都託管在這個 Github 上: cloudnativeapp/charts。你們有對 AppHub 相關的任何吐槽,都歡迎來這個 Repo 提 issue ;也歡迎來經過提交 pull requests 把你的 Charts 和 Repo 加入到 AppHub 上。

不過,若是深刻使用過 Helm 一段時間後,你可能會有些其餘的感覺:

好比: 「Helm 裏的 Release 的概念究竟是啥意思? Helm 的 Rollback 又是咋回事兒,跟 K8s 是啥關係?」

「Helm 對 K8s 應用管理的流程,好像不是那麼的 Native 啊,總感受哪裏不對啊。」

在後面的幾篇文章中,咱們會和你們一塊兒深刻的分析 Helm 這套體系的優勢和缺點,梳理在 K8s 架構中使用 Helm 的最佳實踐,分享和講解 Kustomize 流程和 GitOps 架構,以及更多的雲原生應用管理的實例。

敬請期待吧!


原文連接 本文爲雲棲社區原創內容,未經容許不得轉載。

相關文章
相關標籤/搜索