1.開發自己的chart
Kubernetes 給我們提供了大量官方 chart,不過要部署微服務應用,還是需要開發自己的 chart,下面就來實踐這個主題。
1.1創建 chart
執行 helm create mychart
的命令創建 chart mychart
:
Helm 會幫我們創建目錄 mychart
,並生成了各類 chart 文件。這樣我們就可以在此基礎上開發自己的 chart 了。
新建的 chart 默認包含一個 nginx 應用示例,values.yaml 內容如下:
開發時建議大家參考官方 chart 中的模板、values.yaml、Chart.yaml,里面包含了大量最佳實踐和最常用的函數、流控制,這里就不一一展開了。
1.2調試 chart
只要是程序就會有 bug,chart 也不例外。Helm 提供了 debug 的工具:helm lint
和 helm install --dry-run --debug
。
helm lint
會檢測 chart 的語法,報告錯誤以及給出建議。
比如我們故意在 values.yaml 的第 10 行漏掉了一個 :
,
helm lint mychart
會指出這個語法錯誤。
將:加上之后再次 helm lint 檢查一下, mychart
目錄被作為參數傳遞給 helm lint
。錯誤修復后則能通過檢測。
helm install --dry-run --debug
會模擬安裝 chart,並輸出每個模板生成的 YAML 內容。
我們可以檢視這些輸出,判斷是否與預期相符。
同樣,mychart
目錄作為參數傳遞給 helm install --dry-run --debug
。
2.安裝 chart的方式
當我們覺得准備就緒,就可以安裝 chart,Helm 支持四種安裝方法:
2.1安裝倉庫中的 chart
例如:helm install stable/nginx
2.2通過 tar 包安裝
例如:helm install ./nginx-1.2.3.tgz
2.3通過 chart 本地目錄安裝
例如:helm install ./nginx
2.4通過 URL 安裝
例如:helm install https://example.com/charts/nginx-1.2.3.tgz
這里我們使用本地目錄安裝:
當 chart 部署到 Kubernetes 集群,便可以對其進行更為全面的測試。
3.將 chart 添加到倉庫
chart 通過測試后可以將其添加到倉庫,團隊其他成員就能夠使用。任何 HTTP Server 都可以用作 chart 倉庫,下面演示在 k8s-node1
10.0.0.12 上搭建倉庫。
3.1在 k8s-node1
上啟動一個 httpd 容器。
3.2通過 helm package
將 mychart
打包。
3.3執行 helm repo index
生成倉庫的 index 文件。
mkdir myrepo cd chart/ helm package mychart mv chart/mychart-0.1.0.tgz myrepo/
Helm 會掃描 myrepo
目錄中的所有 tgz 包並生成 index.yaml
。--url
指定的是新倉庫的訪問路徑。新生成的 index.yaml
記錄了當前倉庫中所有 chart 的信息:
當前只有 mychart
這一個 chart。
3.4將 mychart-0.1.0.tgz
和 index.yaml
上傳到 k8s-node1
的 /var/www/charts
目錄。
3.5通過 helm repo add
將新倉庫添加到 Helm。
倉庫命名為 newrepo
,Helm 會從倉庫下載 index.yaml。
3.6現在已經可以 repo search
到 mychart
了。
除了 newrepo/mychart
,這里還有一個 local/mychart
。這是因為在執行第 2 步打包操作的同時,mychart
也被同步到了 local 的倉庫。
3.7已經可以直接從新倉庫安裝 mychart
了。
3.8如果以后倉庫添加了新的 chart,需要用 helm repo update
更新本地的 index。
①是本地倉庫默認跳過
②是我們創建的私有倉庫能夠成功更新
③是阿里的倉庫,發現亦可以更新成功
④是google的倉庫,國內如果不使用科學上網,是沒法訪問的,所以更新失敗。
4.小結
本章我們學習了 Kubernetes 包管理器 Helm。
Helm 讓我們能夠像 apt 管理 deb 包那樣安裝、部署、升級和刪除容器化應用。
Helm 由客戶端和 Tiller 服務器組成。客戶端負責管理 chart,服務器負責管理 release。
chart 是 Helm 的應用打包格式,它由一組文件和目錄構成。其中最重要的是模板,模板中定義了 Kubernetes 各類資源的配置信息,Helm 在部署時通過 values.yaml 實例化模板。
Helm 允許用戶開發自己的 chart,並為用戶提供了調試工具。用戶可以搭建自己的 chart 倉庫,在團隊中共享 chart。
Helm 幫助用戶在 Kubernetes 上高效地運行和管理微服務架構應用,Helm 非常重要。