K8S的Helm包管理器

一、背景

? ? ? ? 官網:??https://helm.sh/

? ? ? ? 我們針對K8S環境中,部署對應的應用,無外乎就是編寫一堆yaml資源清單文件. 資源清單、依賴性少的時候,可以直接手動維護。但是,隨著資源清單越來越復雜,越來越多,不同的環境切換不同的資源清單配置,如果還是手動維護,那將會是一場運維災難。

?????????沒有Helm之前的問題:?

? ? ? ? ? ? ? ? 1、手動管理YAML文件:需要手動編寫和維護大量YAML文件,容易出錯

? ? ? ? ? ? ? ? 2、缺乏標準化:各團隊有自己的部署方式,難以統一管理

? ? ? ? ? ? ? ? 3、部署流程復雜:需要按特定順序創建資源,容易遺漏步驟

? ? ? ? ? ? ? ? 4、環境差異處理困難:不同環境的配置需要手動修改或維護多套文件

? ? ? ? ? ? ? ? 5、回滾機制不完善:需要手動記錄變更并反向操作才能回滾

????????Helm 是 Kubernetes 的包管理工具,相當于 Linux 系統中的 apt/yum 或 macOS 中的 homebrew。它通過將 Kubernetes 應用打包成可復用的單元(稱為 Chart),簡化了復雜應用的部署和管理流程。

? ? ? ? Helm的核心原理就是:? 使用go template模板語法,嵌入到K8S的資源清單yaml文件中,為yaml資源清單文件提供了動態編程能力的工具,動態生成最終部署的yaml清單文件。? 并且還支持了repo倉庫機制生態、依賴聲明等功能。

????????在Kubernetes生態系統中,Helm的出現主要解決了以下幾個核心問題:

? ? ? ? ? ? ? ? 1、應用管理的復雜性:Kubernetes原生資源文件(YAML)在管理復雜應用時變得冗長且難以維護,特別是當應用由多個組件組成時。

? ? ? ? ? ? ? ? 2、配置管理的挑戰:沒有標準化的方式來管理不同環境的配置(開發、測試、生產),導致大量重復或輕微修改的YAML文件。

? ? ? ? ? ? ? ? 3、版本控制的缺失:缺乏應用級別的版本控制機制,難以回滾到特定版本。

? ? ? ? ? ? ? ? 4、共享和復用困難:沒有統一的方式打包和共享Kubernetes應用模板,各團隊重復造輪子。

二、Helm核心概念

1、Chart

????????Chart是Helm的應用打包格式,包含了一組Kubernetes資源文件的模板和配置。Chart的結構如下:

mychart/Chart.yaml          # Chart的元數據文件values.yaml         # 默認配置值charts/             # 依賴的子Charttemplates/          # 模板目錄deployment.yaml   # 部署模板service.yaml      # 服務模板...               # 其他Kubernetes資源模板

? ? ? ? 類比docker里面的鏡像image。?

2、Release

????????Release是Chart在Kubernetes集群中的一次部署實例。同一個Chart可以多次安裝到同一集群,每次安裝都會創建一個新的Release。

? ? ? ? 類比docker當做的容器。 同一個namespace只能部署唯一名稱的release, release名稱不同,則可以部署多個不同的release。? (除非nodeport等端口沖突)

3、Repository (Repo)

????????Chart倉庫是存放和共享Chart的地方。Helm客戶端可以連接多個倉庫來查找和下載Chart。

? ? ? ? 類比docker當中的鏡像倉庫, Chart也有自己的倉庫進行存儲,方便分發、拉取。

三、Helm常用命令

1. Chart相關命令

# 創建新Chart
helm create mychart# 打包Chart
helm package mychart# 檢查Chart語法
helm lint mychart# 查看Chart模板渲染結果(不實際部署)
helm template mychart# 驗證Chart是否安裝成功(dry-run模式)
helm install --dry-run myrelease mychart

2. Repository相關命令?

# 添加Chart倉庫
helm repo add bitnami https://charts.bitnami.com/bitnami# 列出已配置的倉庫
helm repo list# 更新本地倉庫緩存
helm repo update# 搜索Chart
helm search repo nginx# 移除倉庫
helm repo remove bitnami

3. Release相關命令

# 安裝Release
helm install myrelease mychart# 列出已安裝的Release
helm list# 查看Release狀態
helm status myrelease# 升級Release
helm upgrade myrelease mychart# 回滾Release
helm rollback myrelease 1# 卸載Release
helm uninstall myrelease# 查看Release歷史
helm history myrelease

四、實戰示例

1、創建并部署一個簡單的Chart

# 創建新Chart
helm create myapp# 編輯Chart配置
cd myapp
vim values.yaml  # 修改副本數、鏡像等配置# 安裝Chart
helm install myapp-release ./myapp# 檢查部署狀態
kubectl get pods
helm status myapp-release

?2、使用外部Chart部署應用

# 添加bitnami倉庫
helm repo add bitnami https://charts.bitnami.com/bitnami# 搜索nginx Chart
helm search repo nginx# 安裝nginx
helm install my-nginx bitnami/nginx# 自定義配置安裝
helm install my-nginx bitnami/nginx --set service.type=LoadBalancer,replicaCount=2

?3、高級配置示例

創建自定義values.yaml:

# custom-values.yaml
replicaCount: 3
image:repository: nginxtag: "1.21.0"pullPolicy: IfNotPresent
service:type: NodePortport: 80

然后使用自定義值安裝:

helm install -f custom-values.yaml my-nginx bitnami/nginx

4、最佳實踐

  1. 版本控制:將Chart和values文件納入版本控制系統

  2. 環境分離:為不同環境(dev/staging/prod)維護不同的values文件

  3. 模板測試:使用helm template--dry-run測試模板渲染

  4. 依賴管理:明確聲明Chart依賴關系

  5. 安全實踐:只使用可信的Chart倉庫,審查第三方Chart

  6. 資源命名:使用.Release.Name作為資源名前綴確保唯一性

  7. 配置默認值:為模板參數提供合理的默認值

五、總結

????????Helm作為Kubernetes的包管理器,極大地簡化了復雜應用的部署和管理。通過模板化、版本控制和依賴管理等特性,Helm為Kubernetes應用提供了類似于Linux包管理工具的體驗。掌握Helm不僅可以提高部署效率,還能實現配置的標準化和可重復性,是Kubernetes生態中不可或缺的工具。?

? ? ? ? 可以方便我們直接部署和使用,也可以支持快速安裝、快速回滾。

? ? ? ? 核心原理:

????????使用go template模板語法,嵌入到K8S的資源清單yaml文件中,為yaml資源清單文件提供了動態編程能力的工具,動態生成最終部署的yaml清單文件。? 并且還支持了repo倉庫機制生態、依賴聲明等功能。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/91063.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/91063.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/91063.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

多模態數據處理新趨勢:阿里云ODPS技術棧深度解析與未來展望

多模態數據處理新趨勢:阿里云ODPS技術棧深度解析與未來展望 🌟 嗨,我是IRpickstars! 🌌 總有一行代碼,能點亮萬千星辰。 🔍 在技術的宇宙中,我愿做永不停歇的探索者。 ? 用代碼丈…

AI數據分析儀設計原理圖:RapidIO信號接入 平板AI數據分析儀

AI數據分析儀設計原理圖:RapidIO信號接入 平板AI數據分析儀 1 、概述 本儀器是一款面向工業控制、新能源、震動測量等業務開發的平板AI數據分析儀。基于 Jetson Orin Nano(AI邊緣計算)、實現RapidIO接口數據接入,進行AI分析。Rap…

人工智能正逐步商品化,而“理解力”才是開發者的真正超能力

每周跟蹤AI熱點新聞動向和震撼發展 想要探索生成式人工智能的前沿進展嗎?訂閱我們的簡報,深入解析最新的技術突破、實際應用案例和未來的趨勢。與全球數同行一同,從行業內部的深度分析和實用指南中受益。不要錯過這個機會,成為AI領…

玩轉ClaudeCode:ClaudeCode安裝教程(Windows+Linux+MacOS)

Windows 環境安裝 Claude Code 一、安裝 WSL 環境 1. 確認 Windows 功能已開啟 打開 “控制面板 → 程序 → 啟用或關閉 Windows 功能” 勾選 “適用于 Linux 的 Windows 子系統” 和 “虛擬機平臺” 點“確定”后重啟電腦。 開機后,管理員模式打開 Terminal…

PyTorch多層感知機(MLP)模型構建與MNIST分類訓練

沖沖沖😊 here😊 文章目錄PyTorch多層感知機模型構建與MNIST分類訓練筆記🎯 1. 任務概述?? 2. 環境設置2.1 導入必要庫2.2 GPU配置🧠 3. 模型構建3.1 模型定義關鍵點3.2 損失函數選擇3.3 模型初始化與設備選擇🔧 4. …

android tabLayout 切換fragment fragment生命周期

1、TabLayout 與 Fragment 結合使用的常見方式 通常會使用 FragmentPagerAdapter 或 FragmentStatePagerAdapter 與 ViewPager 配合,再將 TabLayout 與 ViewPager 關聯,實現通過 TabLayout 切換 Fragment。 以下是布局文件示例 activity_main.xml: <LinearLayout xmln…

馬蹄集 BD202401補給

可怕的戰爭發生了&#xff0c;小度作為后勤保障工作人員&#xff0c;也要為了保衛國家而努力。現在有 N(1≤N≤)個堡壘需要補給&#xff0c;然而總的預算 B(1≤B≤)是有限的。現在已知第 i 個堡壘需要價值 P(i) 的補給&#xff0c;并且需要 S(i) 的運費。 鑒于小度與供應商之間…

《Llava:Visual Instruction Tuning》論文精讀筆記

論文鏈接&#xff1a;arxiv.org/pdf/2304.08485 參考視頻&#xff1a;LLAVA講解_嗶哩嗶哩_bilibili [論文速覽]LLaVA: Visual Instruction Tuning[2304.08485]_嗶哩嗶哩_bilibili 標題&#xff1a;Visual Instruction Tuning 視覺指令微調 背景引言 大模型的Instruction…

【DataWhale】快樂學習大模型 | 202507,Task01筆記

引言 我從2016年開始接觸matlab看別人做語音識別&#xff0c;再接觸tensorflow的神經網絡&#xff0c;2017年接觸語音合成&#xff0c;2020年做落地的醫院手寫數字識別。到2020年接觸pytorch做了計算機視覺圖像分類&#xff0c;到2021年做了目標檢測&#xff0c;2022年做了文本…

機器學習中的樸素貝葉斯(Naive Bayes)模型

1. 用實例來理解樸素貝葉斯 下面用具體的數據來演示垃圾郵件 vs 正常郵件的概率計算假設我們有一個小型郵件數據集郵件內容類別&#xff08;垃圾/正常&#xff09;“免費 贏取 大獎”垃圾“免費 參加會議”正常“中獎 點擊 鏈接”垃圾“明天 開會”正常“贏取 免費 禮品”垃圾 …

document.documentElement詳解

核心概念定義 它始終指向當前文檔的根元素&#xff0c;在 HTML 文檔中對應 <html> 標簽。與 document.body&#xff08;對應 <body>&#xff09;和 document.head&#xff08;對應 <head>&#xff09;形成層級關系。與 document.body 的區別 <html> &l…

c#進階之數據結構(動態數組篇)----Queue

1、簡介這個是c#封裝的隊列類型&#xff0c;同棧相反&#xff0c;這個是先進先出&#xff0c;一般用于事件注冊&#xff0c;或者數據的按順序處理&#xff0c;理解為需要排隊處理的可以用隊列來處理。注意&#xff0c;隊列一定是有順序的&#xff0c;先進確實是會先出&#xff…

使用 keytool 在服務器上導入證書操作指南(SSL 證書驗證錯誤處理)

使用 keytool 在服務器上導入證書操作指南(SSL 證書驗證錯誤處理) 一、概述 本文檔用于指導如何在運行 Java 應用程序的服務器上,通過keytool工具將證書導入 Java 信任庫,解決因證書未被信任導致的 SSL/TLS 通信問題(如PKIX path building failed錯誤)。 二、操作步驟…

VUE export import

目錄 命名導出 導出變量 導出函數 總結 默認導出 導出變量 導出函數 總結 因為總是搞不懂export和Import什么時候需要加{}&#xff0c;什么時候不用&#xff0c;所以自己測試了一下&#xff0c;以下是總結。 需不需要加{}取決于命名導出還是默認導出&#xff0c;命名導…

端側寵物識別+拍攝控制智能化:解決設備識別頻次識別率雙低問題

隨著寵物成為家庭重要成員&#xff0c;寵物影像創作需求激增&#xff0c;傳統相機系統 “人臉優先” 的調度邏輯已難以應對寵物拍攝的復雜場景。毛發邊緣模糊、動態姿態多變、光照反差劇烈等問題&#xff0c;推動著智能拍攝技術向 “寵物優先” 范式轉型。本文基于端側 AI 部署…

Popover API 實戰指南:前端彈層體驗的原生重構

&#x1fa84; Popover API 實戰指南&#xff1a;前端彈層體驗的原生重構 還在用 position: absolute JS 定位做 tooltip&#xff1f;還在引入大型 UI 庫只為做個浮層&#xff1f;現在瀏覽器已經支持了真正原生的「彈出層 API」&#xff0c;一行 HTMLCSS 就能構建可交互、無障…

CCS-MSPM0G3507-6-模塊篇-OLED的移植

前言基礎篇結束&#xff0c;接下來我們來開始進行模塊驅動如果懂把江科大的OLED移植成HAL庫&#xff0c;那其實也沒什么難首先配置OLED的引腳這里我配置PA16和17為推挽輸出&#xff0c;PA0和1不要用&#xff0c;因為只有那兩個引腳能使用MPU6050 根據配置出來的引腳&#xff0c…

意識邊界的算法戰爭—腦機接口技術重構人類認知的顛覆性挑戰

一、神經解碼的技術奇點當癱瘓患者通過腦電波操控機械臂飲水&#xff0c;當失語者借由皮層電極合成語音&#xff0c;腦機接口&#xff08;BCI&#xff09;正從醫療輔助工具演變為認知增強的潘多拉魔盒。這場革命的核心突破在于神經信號解析精度的指數躍遷&#xff1a;傳統腦電圖…

詳解彩信 SMIL規范

以下內容將系統地講解彩信 MMS&#xff08;Multimedia Messaging Service&#xff09;中使用的 SMIL&#xff08;Synchronized Multimedia Integration Language&#xff09;規范&#xff0c;涵蓋歷史、語法結構、在彩信中的裁剪與擴展、常見實現細節以及最佳實踐。末尾附示例代…

《紅藍攻防:構建實戰化網絡安全防御體系》

《紅藍攻防&#xff1a;構建實戰化網絡安全防御體系》文章目錄第一部分&#xff1a;網絡安全的攻防全景 1、攻防演練的基礎——紅隊、藍隊、紫隊 1.1 紅隊&#xff08;攻擊方&#xff09; 1.2 藍隊&#xff08;防守方&#xff09; 1.3 紫隊&#xff08;協調方&#xff09; 2、5…