您好,登錄后才能下訂單哦!
Helm 3版本中改了哪些內(nèi)容?針對(duì)這個(gè)問(wèn)題,今天小編總結(jié)這篇有關(guān)Helm 3的文章,希望能幫助更多想解決這個(gè)問(wèn)題的朋友找到更加簡(jiǎn)單易行的辦法
Helm最終移除了其服務(wù)器端組件,Tiller。現(xiàn)在,它完全沒(méi)有代理。Tiller之前是一個(gè)運(yùn)行在Kubernetes上的小型應(yīng)用程序,它用于監(jiān)聽(tīng)Helm命令并處理設(shè)置Kubernetes資源的實(shí)際工作。
這是Helm3中最重大的更改。為什么Tiller的移除備受關(guān)注呢?首先,Helm應(yīng)該是一種在Kubernetes配置上的模板機(jī)制。那么,為什么需要在服務(wù)器上運(yùn)行某些代理呢?
Tiller本身也存在一些問(wèn)題,因?yàn)樗枰汗芾韱T的ClusterRole才能創(chuàng)建。因此,假設(shè)你要在Google Cloud Platform中啟動(dòng)的Kubernetes集群上運(yùn)行Helm應(yīng)用程序。首先,你需要啟動(dòng)一個(gè)新的GKE集群,然后使用helm init初始化Helm,然后…發(fā)現(xiàn)它失敗了。這種情況之所以會(huì)發(fā)生是因?yàn)?,在默認(rèn)狀態(tài)下,你沒(méi)有給你的kubectl上下文分配管理員權(quán)限?,F(xiàn)在你了解到了這一點(diǎn),開(kāi)始搜索為分配管理員權(quán)限的magic命令。這一系列操作下來(lái),也許你已經(jīng)開(kāi)始懷疑Helm是否真的是一個(gè)不錯(cuò)的選擇。
此外,由于Tiller使用的訪(fǎng)問(wèn)權(quán)限與你在kubectl上下文中配置的訪(fǎng)問(wèn)權(quán)限不同。因此,你也許可以使用Helm創(chuàng)建應(yīng)用程序,但你可能無(wú)法使用kubectl創(chuàng)建該程序。這一情況如果沒(méi)排查出來(lái),看起來(lái)感覺(jué)像是安全漏洞。
幸運(yùn)的是,現(xiàn)在Tiller已經(jīng)被完全移除,Helm現(xiàn)在是一個(gè)客戶(hù)端工具。這一更改會(huì)導(dǎo)致以下結(jié)果:
Helm使用與kubectl上下文相同的訪(fǎng)問(wèn)權(quán)限
你無(wú)需再使用helm init來(lái)初始化Helm
Helm 3一直保持不變的是:它應(yīng)該只是一個(gè)在Kubernetes API上執(zhí)行操作的工具。如此,如果你可以使用純粹的kubectl命令執(zhí)行某項(xiàng)操作,那么也可以使用helm執(zhí)行該操作。
Helm命令可以從遠(yuǎn)程倉(cāng)庫(kù)安裝Chart。在Helm 3之前,它通常使用預(yù)定義的中心倉(cāng)庫(kù),但你也能夠添加其他倉(cāng)庫(kù)。但是從現(xiàn)在開(kāi)始,Helm將其倉(cāng)庫(kù)模型從集中式遷移到分布式。這意味著兩個(gè)重要的改變:
預(yù)定義的中心倉(cāng)庫(kù)被移除
為了能夠更好地理解這一改變,我給你們一個(gè)示例。在Helm 3之前,如果你想要安裝一個(gè)Hazelcast集群,你需要執(zhí)行以下命令:
$ helm2 install --name my-release stable/hazelcast
現(xiàn)在,這個(gè)命令不起作用了。你需要先添加遠(yuǎn)程倉(cāng)庫(kù)才能進(jìn)行安裝。這是因?yàn)檫@里不再存在一個(gè)預(yù)定義中心倉(cāng)庫(kù)。要安裝Hazelcast集群,你首先需要添加其倉(cāng)庫(kù)然后安裝chart:
$ helm3 repo add hazelcast https://hazelcast.github.io/charts/
$ helm3 repo update
$ helm3 install my-release hazelcast/hazelcast
好消息是現(xiàn)在Helm 命令可以直接在Helm Hub中尋找Chart。例如,如果你想知道在哪個(gè)倉(cāng)庫(kù)中可以找到Hazelcast,你只需執(zhí)行以下命令即可:
$ helm3 search hub hazelcast
以上命令列出在Helm Hub中所有分布式倉(cāng)庫(kù)中名稱(chēng)中包含“hazelcast”的Chart。
現(xiàn)在,我來(lái)問(wèn)你一個(gè)問(wèn)題。移除掉中心倉(cāng)庫(kù)是進(jìn)步還是退步?這有兩種觀點(diǎn)。第一種是chart維護(hù)者的觀點(diǎn)。例如,我們維護(hù)Hazelcast Helm Chart,而Chart中的每個(gè)更改都需要我們將其傳播到中心倉(cāng)庫(kù)中。這項(xiàng)額外的工作使得中心倉(cāng)庫(kù)中的許多Helm Chart沒(méi)有得到很好地維護(hù)。這一情況與我們?cè)赨buntu/Debian包倉(cāng)庫(kù)中所經(jīng)歷的很相似。你可以使用默認(rèn)倉(cāng)庫(kù),但它常常只有舊的軟件包版本。
第二種觀點(diǎn)來(lái)自Chart的使用者。對(duì)于他們來(lái)說(shuō),雖然現(xiàn)在安裝一個(gè)chart比之前稍微困難了一些,但另一方面,他們能夠從主要的倉(cāng)庫(kù)中安裝到最新的chart。
從Helm 3開(kāi)始,chart維護(hù)者可以為輸入值定義JSON Schema。這一功能的完善十分重要,因?yàn)槠駷橹鼓憧梢栽趘alues.yaml中放入任何你所需的內(nèi)容,但是安裝的最終結(jié)果可能不正確或出現(xiàn)一些難以理解的錯(cuò)誤消息。
例如,你在port參數(shù)中輸入字符串而不是數(shù)字。那么你會(huì)收到以下錯(cuò)誤:
$ helm2 install --name my-release --set service.port=string-name hazelcast/hazelcast
Error: release my-release failed: Service in version "v1" cannot be handled as a Service:
v1.Service.Spec: v1.ServiceSpec.Ports: []v1.ServicePort: v1.ServicePort.Port: readUint32:
unexpected character: ?, error found in #10 byte of ...|","port":"wrong-name|..., bigger
context ...|fault"},"spec":{"ports":[{"name":"hzport","port":"wrong-name","protocol":
"TCP","targetPort":"hazelca|...
你不得不承認(rèn)這個(gè)問(wèn)題難以分析和理解。
此外,Helm 3默認(rèn)添加了針對(duì)Kubernetes對(duì)象的OpenAPI驗(yàn)證,這意味著發(fā)送到Kubernetes API的請(qǐng)求將會(huì)被檢查是否正確。這對(duì)于Chart維護(hù)者來(lái)說(shuō),是一項(xiàng)重大利好。
Helm測(cè)試是一個(gè)小小的優(yōu)化。盡管微小,但它也許實(shí)際上鼓勵(lì)了維護(hù)者來(lái)寫(xiě)Helm測(cè)試以及用戶(hù)在安裝完每個(gè)chart之后執(zhí)行helm test命令。在Helm 3之前,進(jìn)行測(cè)試多少都顯得有些奇怪:
1、 此前測(cè)試作為Pod執(zhí)行(好像需要一直運(yùn)行);現(xiàn)在你可以將其定義為Job。
2、 測(cè)試Pod不會(huì)自動(dòng)被移除(除非你使用magic flag –cleanup
),所以默認(rèn)狀態(tài)下,沒(méi)有任何技巧,對(duì)于既定的版本你不能多次執(zhí)行helm test。但幸運(yùn)的是,現(xiàn)在可以自動(dòng)刪除測(cè)試資源(Pod、Job)。
當(dāng)然舊的測(cè)試版本也并非不能使用,只需要使用Pod并始終記得執(zhí)行helm test –cleanup
。但也不得不承認(rèn),這一改進(jìn)有助于提升測(cè)試體驗(yàn)。
最后一點(diǎn)是,Helm命令語(yǔ)法有所改變。從積極的一面來(lái)看,我認(rèn)為所有的改變都是為了讓體驗(yàn)更好;從消極的方面看,這一語(yǔ)法不與之前的版本兼容。因此,現(xiàn)在編寫(xiě)有關(guān)如何使用Helm安裝東西的步驟時(shí),需要明確指出所使用的命令是用于Helm 2還是用于Helm 3。
舉個(gè)例子,從helm install
開(kāi)始說(shuō)起?,F(xiàn)在版本名稱(chēng)已經(jīng)成為必填參數(shù),盡管在Helm 2中你可以忽略它,名稱(chēng)也能夠自動(dòng)生成。如果在Helm3中要達(dá)成相同的效果,你需要添加參數(shù)--generate-name
。所以,使用Helm 2進(jìn)行標(biāo)準(zhǔn)的安裝應(yīng)該如下:
$ helm2 install --name my-release hazelcast/hazelcast
在Helm 3中,需要執(zhí)行以下命令:
$ helm3 install my-release hazelcast/hazelcast
還有另一個(gè)比較好的改變是,刪除Helm版本后,無(wú)需添加—purge。簡(jiǎn)單地輸入命令helm uninstall <release-name>
即可刪除所有相關(guān)的資源。
還有一些其他改變,如一些命令被重命名(不過(guò)使用舊的名稱(chēng)作為別名),有一些命令則被刪除(如 helm init
)。如果你還想了解更多關(guān)于Helm 命令語(yǔ)法更改的信息,請(qǐng)參考官方文檔:
https://helm.sh/docs/faq/#cli-command-renames
關(guān)于Helm 3的新特點(diǎn)就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。