Helm V3 新版本发布
Helm v3.0.0 Alpha 1 is coming!
Helm 作為 Kubernetes 體系的包管理工具,已經(jīng)逐漸成為了事實(shí)上的應(yīng)用分發(fā)標(biāo)準(zhǔn)。根據(jù) 2018 年 CNCF 的一項(xiàng)云原生用戶調(diào)研,超過百分之六十八用戶選擇 Helm 來作為應(yīng)用打包交付方式。在開源社區(qū)中,越來越多的軟件被搬遷到 Kubernetes 集群上,它們中的絕大部分都是通過 Helm 來進(jìn)行交付的。
Helm 當(dāng)前的穩(wěn)定版本為 v2.14.0,最新發(fā)布的測試版本為 v3.0.0-alpha.1。v3.x 的 alpha 版本可謂千呼萬喚始出來,它帶來了非常多的新特性及優(yōu)化改進(jìn),讓人無比興奮,因此作此文以總結(jié)安利一番。
架構(gòu)性變化 - 去除了 Tiller
在 Helm 2 中,一次基于 Helm 的軟件交付會涉及到多個組件:
在 Helm 2 中,Tiller 是作為一個 Deployment 部署在 kube-system 命名空間中,很多情況下,我們會為 Tiller 準(zhǔn)備一個 ServiceAccount ,這個 ServiceAccount 通常擁有集群的所有權(quán)限。用戶可以使用本地 Helm 命令,自由地連接到 Tiller 中并通過 Tiller 創(chuàng)建、修改、刪除任意命名空間下的任意資源。
然而在多租戶場景下,這種方式也會帶來一些安全風(fēng)險(xiǎn),我們即要對這個 ServiceAccount 做很多剪裁,又要單獨(dú)控制每個租戶的控制,這在當(dāng)前的 Tiller 模式下看起來有些不太可能。
于是在 Helm 3 中,Tiller 被移除了。新的 Helm 客戶端會像 kubectl 命令一樣,讀取本地的 kubeconfig 文件,使用我們在 kubeconfig 中預(yù)先定義好的權(quán)限來進(jìn)行一系列操作。這樣做法即簡單,又安全。
雖然 Tiller 文件被移除了,但 Release 的信息仍在集群中以 ConfigMap 的方式存儲,因此體驗(yàn)和 Helm 2 沒有區(qū)別。
Tiller 變更引入的新變化 - Release 不再是全局資源
在 Helm 2 中,Tiller 自身部署往往在 kube-system 下,雖然不一定是 cluster-admin 的全局管理員權(quán)限,但是一般都會有 kube-system 下的權(quán)限。當(dāng) Tiller 想要存儲一些信息的時(shí)候,它被設(shè)計(jì)成在 kube-system 下讀寫 ConfigMap 。
在 Helm 3 中,Helm 客戶端使用 kubeconfig 作為認(rèn)證信息直接連接到 Kubernetes APIServer,不一定擁有 cluster-admin 權(quán)限或者寫 kube-system 的權(quán)限,因此它只能將需要存儲的信息存在當(dāng)前所操作的 Kubernetes Namespace 中,繼而 Release 變成了一種命名空間內(nèi)的資源。
Values 支持 JSON Schema 校驗(yàn)器
Helm Charts 是一堆 Go Template 文件、一個變量文件 Values 和一些 Charts 描述文件的組合。Go Template 和 Kubernetes 資源描述文件的內(nèi)容十分靈活,在開發(fā)迭代過程中,很容易出現(xiàn)一些變量未定義的問題。Helm 3 引入了 JSON Schema 校驗(yàn),它支持用一長串 DSL 來描述一個變量文件的格式、檢查所有輸入的變量的格式。
當(dāng)我們運(yùn)行 helm install 、 helm upgrade 、 helm lint 、 helm template 命令時(shí),JSON Schema 的校驗(yàn)會自動運(yùn)行,如果失敗就會立即報(bào)錯。
一個來自官方的例子
當(dāng)我們指定一個 JSON Schema 文件為下述時(shí):
{"$schema": "http://json-schema.org/draft-07/schema#","properties": {"image": {"description": "Container Image","properties": {"repo": {"type": "string"},"tag": {"type": "string"}},"type": "object"},"name": {"description": "Service name","type": "string"},"port": {"description": "Port","minimum": 0,"type": "integer"},"protocol": {"type": "string"}},"required": ["protocol","port"],"title": "Values","type": "object" }復(fù)制代碼我們看到 JSON Schema 描述文件中指定了 protocol 和 port 為必填字段,于是我們可以指定一個 values.yaml 如下:
name: frontend protocol: https port: 443復(fù)制代碼但事實(shí)上,我們也可以指定為如下,因?yàn)槲覀兛梢栽?helm 命令行傳入變量參數(shù),例如 helm install --set port=443
name: frontend protocol: https復(fù)制代碼試驗(yàn)性功能 - 推送 Charts 到容器鏡像倉庫中
互聯(lián)網(wǎng)上有一些 Helm Charts 托管平臺,負(fù)責(zé)分發(fā)常見的開源應(yīng)用,例如 Helm Hub、KubeApps Hub。
在企業(yè)環(huán)境中,用戶需要私有化的 Helm Charts 托管。最常見的方案是部署 ChartMuseum,使其對接一些云存儲。當(dāng)然也有一些較為小眾的方案,比如 [App-Regsitry]() 直接復(fù)用了 Docker 鏡像倉庫 Registry V2,再比如 helm-s3 直接通過云存儲 S3 存取 Charts 文件。
如今在 Helm 3,Helm 直接支持了推送 Charts 到容器鏡像倉庫的能力,希望支持滿足 OCI 標(biāo)準(zhǔn)的所有 Registry。但這部分還沒有完全被開發(fā)完,會在未來的 alpha 版本中被完善。
代碼復(fù)用 - Library Chart 支持
Helm 3 中引入了一種新的 Chart 類型,名為 Library Chart 。它不會部署出一些具體的資源,只能被其他的 Chart 所引用,提高代碼的可用復(fù)用性。當(dāng)一個 Chart 想要使用該 Library Chart內(nèi)的一些模板時(shí),可以在 Chart.yaml 的 dependencies 依賴項(xiàng)中指定。
其他的一些變化
- Go Import 的路徑由 k8s.io/helm 變成了 helm.sh/helm。
- 簡化了 Chart 內(nèi)置變量 Capabilities 的一些屬性[2]。
- helm install 不再默認(rèn)生成一個 Release 的名稱,除非指定了 --generate-name 。
- 移除了用于本地臨時(shí)搭建 Chart Repository 的 helm serve 命令。
- helm delete 更名為 helm uninstall , helm inspect 更名為 helm show , helm fetch更名為 helm pull ,但以上舊的命令當(dāng)前仍能使用。
- requirements.yaml 被整合到了 Chart.yaml 中,但格式保持不變。
現(xiàn)在怎么辦呢?
當(dāng)前 Helm 3 仍在緊張而有序地開發(fā)當(dāng)中,如果需要在生產(chǎn)環(huán)境使用,Helm 2 看起來會更加穩(wěn)妥一些。
如果您恰好需要私有的 Helm Chart 倉庫,歡迎申請?jiān)囉冒⒗镌迫萜麋R像服務(wù)企業(yè)版(ACR EE),我們即將上線 Helm Charts 托管功能。
阿里云容器鏡像服務(wù)(ACR)是國內(nèi)最大的公有云鏡像服務(wù)平臺,支撐數(shù)萬名開發(fā)者,共計(jì)十億級別的鏡像拉取,為開發(fā)者的每個應(yīng)用鏡像保駕護(hù)航。容器鏡像服務(wù)企業(yè)版(ACR EE)是新推出的面向企業(yè)級客戶的安全鏡像托管平臺,支持鏡像服務(wù)企業(yè)版實(shí)例獨(dú)享部署、OSS Bucket 獨(dú)享加密存儲、自定義網(wǎng)絡(luò)訪問控制及 P2P 大規(guī)模鏡像分發(fā)功能。
原文鏈接
本文為云棲社區(qū)原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。
轉(zhuǎn)載于:https://juejin.im/post/5cee310ce51d4576bc1a0d86
總結(jié)
以上是生活随笔為你收集整理的Helm V3 新版本发布的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: css详解1
- 下一篇: 记一次Nacos的issue修复之并发导