日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

你不得不了解 Helm 3 中的 5 个关键新特性

發(fā)布時(shí)間:2025/3/20 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 你不得不了解 Helm 3 中的 5 个关键新特性 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

作者?|?Rafal

導(dǎo)讀:Helm 是 Kubernetes 的一個(gè)軟件包管理器。兩個(gè)月前,它發(fā)布了第三個(gè)主要版本,Helm 3。在這一新版本中,有許多重大變化。本文作者將介紹自己認(rèn)為最關(guān)鍵的 5 個(gè)方面。

移除了 Tiller

Helm 最終移除了其服務(wù)器端組件,Tiller。現(xiàn)在,它完全沒有代理。Tiller 之前是一個(gè)運(yùn)行在 Kubernetes 上的小型應(yīng)用程序,它用于監(jiān)聽 Helm 命令并處理設(shè)置 Kubernetes 資源的實(shí)際工作。

這是 Helm3 中最重大的更改。為什么 Tiller 的移除備受關(guān)注呢?首先,Helm 應(yīng)該是一種在 Kubernetes 配置上的模板機(jī)制。那么,為什么需要在服務(wù)器上運(yùn)行某些代理呢?

Tiller 本身也存在一些問題,因?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)?#xff0c;在默認(rèn)狀態(tài)下,你沒有給你的 kubectl 上下文分配管理員權(quán)限。現(xiàn)在你了解到了這一點(diǎn),開始搜索為分配管理員權(quán)限的 magic 命令。這一系列操作下來,也許你已經(jīng)開始懷疑 Helm 是否真的是一個(gè)不錯(cuò)的選擇。

此外,由于 Tiller 使用的訪問權(quán)限與你在 kubectl 上下文中配置的訪問權(quán)限不同。因此,你也許可以使用 Helm 創(chuàng)建應(yīng)用程序,但你可能無法使用 kubectl 創(chuàng)建該程序。這一情況如果沒排查出來,看起來感覺像是安全漏洞。

幸運(yùn)的是,現(xiàn)在 Tiller 已經(jīng)被完全移除,Helm 現(xiàn)在是一個(gè)客戶端工具。這一更改會(huì)導(dǎo)致以下結(jié)果:

  • Helm 使用與 kubectl 上下文相同的訪問權(quán)限;
  • 你無需再使用 helm init 來初始化 Helm;
  • Release Name 位于命名空間中。

Helm 3 一直保持不變的是:它應(yīng)該只是一個(gè)在 Kubernetes API 上執(zhí)行操作的工具。如此,如果你可以使用純粹的 kubectl 命令執(zhí)行某項(xiàng)操作,那么也可以使用 helm 執(zhí)行該操作。

分布式倉(cāng)庫(kù)以及 Helm Hub

Helm 命令可以從遠(yuǎn)程倉(cāng)庫(kù)安裝 Chart。在 Helm 3 之前,它通常使用預(yù)定義的中心倉(cāng)庫(kù),但你也能夠添加其他倉(cāng)庫(kù)。但是從現(xiàn)在開始,Helm 將其倉(cāng)庫(kù)模型從集中式遷移到分布式。這意味著兩個(gè)重要的改變:

  • 預(yù)定義的中心倉(cāng)庫(kù)被移除;
  • Helm Hub(一個(gè)發(fā)現(xiàn)分布式 chart 倉(cāng)庫(kù)的平臺(tái))被添加到 helm search。

為了能夠更好地理解這一改變,我給你們一個(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ù)中名稱中包含 “hazelcast” 的 Chart。

現(xiàn)在,我來問你一個(gè)問題。移除掉中心倉(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 沒有得到很好地維護(hù)。這一情況與我們?cè)?Ubuntu/Debian 包倉(cāng)庫(kù)中所經(jīng)歷的很相似。你可以使用默認(rèn)倉(cāng)庫(kù),但它常常只有舊的軟件包版本。

第二種觀點(diǎn)來自 Chart 的使用者。對(duì)于他們來說,雖然現(xiàn)在安裝一個(gè) chart 比之前稍微困難了一些,但另一方面,他們能夠從主要的倉(cāng)庫(kù)中安裝到最新的 chart。

JSON Schema 驗(yàn)證

從 Helm 3 開始,chart 維護(hù)者可以為輸入值定義 JSON Schema。這一功能的完善十分重要,因?yàn)槠駷橹鼓憧梢栽?values.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è)問題難以分析和理解。

此外,Helm 3 默認(rèn)添加了針對(duì) Kubernetes 對(duì)象的 OpenAPI 驗(yàn)證,這意味著發(fā)送到 Kubernetes API 的請(qǐng)求將會(huì)被檢查是否正確。這對(duì)于 Chart 維護(hù)者來說,是一項(xiàng)重大利好。

Helm 測(cè)試

Helm 測(cè)試是一個(gè)小小的優(yōu)化。盡管微小,但它也許實(shí)際上鼓勵(lì)了維護(hù)者來寫 Helm 測(cè)試以及用戶在安裝完每個(gè) chart 之后執(zhí)行 helm test 命令。在 Helm 3 之前,進(jìn)行測(cè)試多少都顯得有些奇怪:

  • 此前測(cè)試作為 Pod 執(zhí)行(好像需要一直運(yùn)行);現(xiàn)在你可以將其定義為 Job;
  • 測(cè)試 Pod 不會(huì)自動(dòng)被移除(除非你使用 magic flag –cleanup),所以默認(rèn)狀態(tà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 命令語法有所改變。從積極的一面來看,我認(rèn)為所有的改變都是為了讓體驗(yàn)更好;從消極的方面看,這一語法不與之前的版本兼容。因此,現(xiàn)在編寫有關(guān)如何使用 Helm 安裝東西的步驟時(shí),需要明確指出所使用的命令是用于 Helm 2 還是用于 Helm 3。

舉個(gè)例子,從 helm install 開始說起。現(xiàn)在版本名稱已經(jīng)成為必填參數(shù),盡管在 Helm 2 中你可以忽略它,名稱也能夠自動(dòng)生成。如果在 Helm3 中要達(dá)成相同的效果,你需要添加參數(shù) --generate-name。所以,使用 Helm 2 進(jìn)行標(biāo)準(zhǔn)的安裝應(yīng)該如下:

$ helm2 install --name my-release --set service.port=string- $ helm2 install --name my-release hazelcast/hazelcast

在 Helm 3 中,需要執(zhí)行以下命令:

$ helm3 install my-release hazelcast/hazelcast

還有另一個(gè)比較好的改變是,刪除 Helm 版本后,無需添加— purge。簡(jiǎn)單地輸入命令 helm uninstall 即可刪除所有相關(guān)的資源。

還有一些其他改變,如一些命令被重命名(不過使用舊的名稱作為別名),有一些命令則被刪除(如 helm init)。如果你還想了解更多關(guān)于 Helm 命令語法更改的信息,請(qǐng)參考官方文檔:https://helm.sh/docs/faq/#cli-command-renames

結(jié)? 論

Helm 3 的發(fā)布,使得這一工具邁向一個(gè)新的階段。作為用戶,我十分喜歡 Helm 現(xiàn)在只是一個(gè)單純的客戶端工具。作為 Chart 維護(hù)者,Helm Hub 以及分布式倉(cāng)庫(kù)的方法深得我心。我希望能在未來看到更多更有意思的改變。

如果你想了解 Helm 3 中的所有變化,請(qǐng)查看官方文檔:https://helm.sh/docs/faq/#changes-since-helm-2

本文轉(zhuǎn)載自:RancherLabs,點(diǎn)擊查看原文。

“阿里巴巴云原生關(guān)注微服務(wù)、Serverless、容器、Service Mesh 等技術(shù)領(lǐng)域、聚焦云原生流行技術(shù)趨勢(shì)、云原生大規(guī)模的落地實(shí)踐,做最懂云原生開發(fā)者的技術(shù)圈。”

總結(jié)

以上是生活随笔為你收集整理的你不得不了解 Helm 3 中的 5 个关键新特性的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。