容器基礎5-Helm 與 K8s 的關系

一、Helm 是什么?為什么需要它?

K8s 是強大的容器編排平臺,但部署復雜應用時(如包含 Web 服務、數據庫、緩存等多個組件的系統),需要編寫大量 YAML 文件,管理成本高。Helm 就是為簡化 K8s 應用部署而生的工具,它被稱為 “K8s 的包管理器”,類似 Ubuntu 的apt或 Mac 的brew

二、Helm 如何工作?核心概念解析
  1. Chart(圖表)

    • Helm 的基本單位,是一組 YAML 文件的集合,描述了一個或多個 K8s 資源(如 Deployment、Service、ConfigMap 等)。
    • 類比:一個 Chart 就像手機應用商店里的 “APP 安裝包”,包含了應用運行所需的所有組件和配置。
  2. Release(發布)

    • Chart 的實例化結果。同一個 Chart 可以在集群中部署多次,每次部署都是一個 Release,就像同一 APP 可以在多部手機上安裝,每個安裝都是獨立的。
  3. Values(配置值)

    • 用于自定義 Chart 的參數。例如,Chart 中定義了數據庫密碼為變量,通過 Values 可以傳入實際密碼,避免硬編碼。
    • 類比:安裝 APP 時的 “個性化設置”,如選擇安裝路徑、是否創建桌面圖標等。
三、Helm vs 直接使用 kubectl:優勢在哪?
場景直接用 kubectl用 Helm
復雜應用部署需要手動編寫 / 管理多個 YAML 文件,易出錯。一鍵安裝預定義的 Chart,自動處理依賴關系。
配置管理配置硬編碼在 YAML 中,難以復用和修改。通過 Values 文件靈活配置,支持環境變量。
版本控制手動記錄 YAML 變更,回滾困難。自動記錄 Release 歷史,支持一鍵回滾到任意版本。
依賴管理需要手動確保組件順序(如先部署 DB 再部署 APP)Chart 中定義依賴關系,自動按順序部署。
四、實戰案例:用 Helm 部署 WordPress

假設你想部署一個 WordPress 博客,包含 Web 服務和 MySQL 數據庫:

  1. 不用 Helm:需要編寫至少 4 個 YAML 文件(WordPress Deployment、Service,MySQL StatefulSet、PVC),還要處理數據庫初始化、密碼配置等細節。
  2. 用 Helm:只需一行命令:

    bash

    helm repo add bitnami https://charts.bitnami.com/bitnami  # 添加官方倉庫
    helm install my-blog bitnami/wordpress  # 安裝WordPress Chart
    

    Helm 會自動:
    • 創建 MySQL 數據庫并配置持久化存儲;
    • 部署 WordPress 應用并連接到數據庫;
    • 生成隨機密碼并保存為 Secret;
    • 創建 Service 暴露 WordPress 服務。
五、Helm 的進階能力:模板與鉤子
  1. 模板引擎

    • Helm 使用 Go 模板語言,允許在 Chart 中定義動態配置。例如:
      # values.yaml
      replicas: 3# deployment.yaml
      replicas: {{ .Values.replicas }}  # 自動從values中獲取值
      
    • 類比:手機 APP 安裝時的 “自定義選項”,如選擇安裝語言、分辨率等。
  2. 鉤子(Hooks)

    • 允許在特定階段執行自定義操作,如部署前執行數據庫遷移、刪除前備份數據等。
    • 類比:手機 APP 安裝前的 “權限申請” 或卸載前的 “數據備份提示”。

一、Helm 安裝準備
1. 安裝 Helm 客戶端
  • macOS(使用 Homebrew):
    brew install helm
    
  • Linux(使用腳本):
    curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
    
  • Windows(使用 Chocolatey):

    choco install kubernetes-helm
    
2. 驗證安裝
helm version
# 輸出類似:version.BuildInfo{Version:"v3.12.0", ...}
二、使用 Helm 安裝應用
1. 添加官方倉庫

Helm 通過?倉庫(Repository)?管理 Charts,類似 npm 或 Maven 的倉庫:

helm repo add bitnami https://charts.bitnami.com/bitnami  # 添加 Bitnami 官方倉庫
helm repo update  # 更新倉庫索引
2. 搜索可用 Charts
helm search repo wordpress  # 搜索 WordPress 相關 Charts
# 輸出類似:
# NAME               CHART VERSION  APP VERSION  DESCRIPTION
# bitnami/wordpress  15.0.0         6.2.2        WordPress is the world's most popular blogging ...
3. 安裝 Chart

以安裝 WordPress 為例:

helm install my-blog bitnami/wordpress  # 安裝名為 my-blog 的 WordPress 實例
  • 關鍵參數
    • --version 15.0.0:指定 Chart 版本
    • --values my-values.yaml:使用自定義配置文件
    • --set service.type=LoadBalancer:臨時覆蓋配置值
4. 查看安裝狀態
helm list  # 查看所有已安裝的 Releases
helm status my-blog  # 查看特定 Release 的詳細信息
kubectl get pods  # 驗證 Pod 是否正常運行
三、自定義配置(Values 文件)
1. 創建自定義 Values 文件

復制默認配置并修改:

helm show values bitnami/wordpress > my-values.yaml
vi my-values.yaml  # 編輯配置,例如修改數據庫密碼、服務類型等
2. 使用自定義配置安裝

bash

helm install my-blog bitnami/wordpress -f my-values.yaml
3. 常見配置示例
# my-values.yaml
wordpressUsername: admin
wordpressPassword: my-strong-password  # 自定義 WordPress 密碼
service:type: NodePort  # 將服務類型改為 NodePort
persistence:size: 20Gi  # 增加持久化存儲大小
四、升級與回滾應用
1. 升級應用
helm upgrade my-blog bitnami/wordpress --set wordpressPassword=new-password  # 升級并修改密碼
2. 查看歷史版本
helm history my-blog
# 輸出類似:
# REVISION  UPDATED                  STATUS     CHART            APP VERSION  DESCRIPTION
# 1         Mon Jul 10 12:00:00 2023  superseded  wordpress-15.0.0  6.2.2        Install complete
# 2         Mon Jul 10 12:30:00 2023  deployed    wordpress-15.1.0  6.2.2        Upgrade complete
3. 回滾到指定版本
helm rollback my-blog 1  # 回滾到版本 1
五、管理 Helm 倉庫
1. 添加自定義倉庫
helm repo add my-repo https://my-company.com/charts
2. 查看已添加的倉庫
helm repo list
3. 更新倉庫索引
helm repo update  # 每次使用前建議更新
六、創建自己的 Chart
1. 初始化 Chart 項目
helm create my-app  # 創建名為 my-app 的 Chart 模板
2. Chart 目錄結構
my-app/
├── charts/          # 依賴的子 Charts
├── templates/       # YAML 模板文件
│   ├── deployment.yaml
│   ├── service.yaml
│   └── _helpers.tpl  # 模板輔助函數
├── Chart.yaml       # Chart 元數據(名稱、版本等)
└── values.yaml      # 默認配置值
3. 編寫模板(示例)
# templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: {{ .Release.Name }}-app
spec:replicas: {{ .Values.replicas }}  # 從 values.yaml 獲取副本數selector:matchLabels:app: {{ .Release.Name }}template:metadata:labels:app: {{ .Release.Name }}spec:containers:- name: {{ .Chart.Name }}image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"ports:- containerPort: {{ .Values.service.port }}
4. 打包 Chart
helm package my-app  # 生成 my-app-0.1.0.tgz 包
5. 安裝本地 Chart
helm install my-release ./my-app
七、常用 Helm 命令速查表
命令作用
helm install release chart安裝 Chart 為一個 Release
helm upgrade release chart升級 Release
helm uninstall release卸載 Release
helm search repo keyword在倉庫中搜索 Chart
helm show values chart查看 Chart 的默認配置值
helm dependency update chart更新 Chart 的依賴
helm lint chart檢查 Chart 語法錯誤
helm template chart渲染 Chart 模板(不安裝)
八、最佳實踐
  1. 使用 Values 文件:避免在命令行中使用大量?--set?參數,將配置保存在文件中便于版本控制。
  2. 命名規范:Release 名稱和 Chart 名稱保持語義化(如?my-prod-api)。
  3. 版本控制:將自定義 Values 文件和 Chart 代碼納入 Git 管理。
  4. 測試先行:使用?helm install --dry-run?預渲染模板,確保配置正確。
  5. 清理不再使用的 Releases:定期?helm uninstall?不再需要的應用。
總結:Helm 是 K8s 的 “應用增強器”
  • Helm 的定位簡化 K8s 應用的部署、升級和管理,尤其適合復雜的分布式系統。
  • 與 K8s 的關系:K8s 提供容器編排能力,Helm 提供應用層面的封裝和管理,二者結合就像 “操作系統”+“應用商店”,讓用戶更高效地使用 K8s。

通過 Helm,開發者可以將精力集中在業務邏輯上,而不是復雜的 K8s 配置,真正實現 “一鍵部署,全家無憂”!

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

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

相關文章

靠機器學習+組合優化就發了CCF-A

這兩年機器學習求解組合優化問題領域取得了顯著的進展。ICLR、ICML、NeurIPS等頂會都有多篇成果發表。 組合優化:它是一種尋找一組變量的最佳組合的方法,以最小化或最大化一個目標函數。組合優化問題通常具有大量的狀態和選擇,需要在有限的…

UI評審時應該注意哪些方面才能有效保障交付質量

需從??評審準備、設計評估、用戶體驗優化、技術實現驗證??四大維度展開,并結合具體實踐經驗 一、評審前的充分準備 ??明確評審目標與范圍?? 確定評審核心目標,如驗證設計是否符合產品需求、評估視覺與交互表現等。劃定評審范圍,聚焦核心頁面與關鍵功能模塊,避免分散…

分塊矩陣怎么取逆?

目錄 一、特殊分塊矩陣取逆 1. 對角分塊矩陣取逆? 2. 副對角分塊矩陣取逆? 3. 三角分塊矩陣 上三角:? 下三角:? 4. 任意二階矩陣? 二、一般分塊矩陣 一、特殊分塊矩陣取逆 1. 對角分塊矩陣取逆 2. 副對角分塊矩陣取逆 3. 三角分塊矩陣…

2025微信小程序wxapkg解包全攻略

好的,以下是優化后的微信小程序 wxapkg 解包工具使用說明,純文本格式,結構清晰,便于直接復制使用: --- 微信小程序 wxapkg 解包工具使用說明 一、查找 __APP__.wxapkg 文件 1. 按 WinR,輸入 cmd&#xff0c…

標簽體系設計與管理:從理論基礎到智能化實踐的綜合指南

這類文章可以直接給大模型做上下文,主頁有更多。 文章目錄 一、標簽體系的理論基礎與概念框架1.1 標簽的本體論定位1.2 邏輯學視角的標簽形式化1.3 語言符號學的標簽機制1.4 信息學的知識組織原理 二、標簽的語義原子化設計原理2.1 語義原子性的理論基礎2.2 語義分解…

【gateway網關】

網關的核心功能 網關(Gateway)作為網絡架構中的關鍵組件,主要承擔不同協議或網絡之間的數據轉換與路由功能。以下是其核心功能的詳細說明: 協議轉換與適配 網關能夠連接使用不同通信協議的網絡或系統,實現數據格式的…

windows平臺+vs2019 編譯 poho mqtt開源庫[C,C++]

參考windows下編譯paho.mqtt_c paho mqtt c windows編譯-CSDN博客這個鏈接 其中要說明幾個重點注意事項: 1,要安裝上面要求準備安裝好相關的工具,我的是vs2019,具體看個人,另外要補充一個安裝git 客戶端,…

【VScode | 格式化文檔】一文掌握VScode使用 clang-format 的文檔格式化(C/C++)

😁博客主頁😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客內容🤑:🍭嵌入式開發、Linux、C語言、C、數據結構、音視頻🍭 🤣本文內容🤣&a…

vs code遠程自動登錄服務器,無需手動輸入密碼的終極方案(windows版)

目錄 步驟1:本地生成 SSH 密鑰對(如果尚未生成)步驟2:將公鑰復制到遠程服務器步驟3:配置 SSH Agent 自動啟動1. 檢查是否已安裝 OpenSSH2. 編輯 .bashrc 或 .profile 文件3. 將私鑰添加到 SSH Agent4. 驗證配置 步驟4&…

7.redis對象介紹(三)

1.類型檢查與命令多態 redis中用于操作鍵的命令可以分為兩種,一種是可以對任何類型的鍵執行的命令,比如del,expire,rename,type,object等;另一種是只能對特定類型的鍵執行,比如set&…

VsCode 配置 C/C++ 開發環境

簡述一下步驟哈: 下載VsCode(這點大家都會哈)下載MingG64(C/C編譯器【gcc】),配置環境變量在VsCode配置一下C/C運行時環境測試運行 1、準備MingG64 VsCode 本身是沒有C/C編譯的,這里我們自己…

用C#編寫一個讀取磁盤第一扇區的程序

1.運行結果 2.WinHex校驗 3.程序 using System; using System.IO;class Program {static void Main(){try{// 以管理員權限運行此程序const string drivePath "\\.\G:";const int sectorSize 512; // 標準扇區大小// 打開邏輯驅動器(需要管理員權限&a…

【PyTorch】PyTorch預訓練模型緩存位置遷移,也可拓展應用于其他文件的遷移

目錄 前言: 一、具體實現: 二、關鍵技術解析 路徑動態拼接 安全目錄創建 環境變量魔法 遷移條件檢查 三、代碼實現: 前言: 當模型文件下載到本地c盤的默認路徑時,可用以下代碼的形式進行文件位置的遷移。 一、…

Python 機器學習核心入門與實戰進階 Day 2 - KNN(K-近鄰算法)分類實戰與調參

? 今日目標 理解 KNN 的原理與“以鄰為近”的思想掌握 K 值選擇與模型效果的關系學會使用 sklearn 訓練 KNN 模型實現 KNN 分類 模型評估 超參數調優 📘 一、KNN 算法原理 KNN(K-Nearest Neighbors)核心思想: 給定一個待預測…

pppoe寬帶連接-系列命令調用

以下是對PPPoE相關命令的詳細解釋及用法說明: 1. pppoe 功能:PPPoE基礎工具集,通常作為其他命令的底層依賴。 用法:一般不直接使用,而是通過pppoe-*系列命令調用。 2. pppoe-connect 功能:建立PPPoE連接…

C# 合并兩個byte數組的幾種方法

1. 使用 Array.Copy 方法(高效推薦)byte[] array1 { 1, 2, 3 }; byte[] array2 { 4, 5, 6 };byte[] combined new byte[array1.Length array2.Length]; Array.Copy(array1, 0, combined, 0, array1.Length); Array.Copy(array2, 0, combined, array1…

Spring AI 源碼

目錄 Spring AI 介紹 Spring AI 組件介紹 Spring AI 結構化輸出 Srping AI 多模態 Spring AI 本地Ollama Spring AI 源碼 Spring AI Advisor機制 Spring AI Tool Calling Spring AI MCP Spring AI RAG Spring AI Agent Spring AI 是一個用于 AI 工程的應用程序框架。 其目標是…

釘釘企業應用開發系列:前端實現自定義右上角菜單(dd.http + Vue3)

本文將圍繞“如何在釘釘企業應用中自定義右上角菜單”這一主題進行講解,并結合現代前端技術棧(Vue3 Composition API)展示完整實現過程,幫助你快速構建具備原生交互體驗的企業應用。一、前置準備1. 注冊釘釘開發者賬號并創建應用…

STC8H驅動兩相四線步進電機

兩相步進電機, STC8H系列 用高級PWM實現SPWM細分驅動 /************* 功能說明 ************** 用B組高級PWM細分驅動2相4線小型步進電機, 支持1、2、4、8、16、32、64細分, 比如1.8度的電機4細分到0.45度. 本程序用于演示SPWM多細分直接驅動2相4線小型步進電機…

讀書筆記:《DevOps實踐指南》

《DevOps實踐指南》 美 Gene Kim, Jez Humble, Patrick Debois, John Willis 著;劉征,王磊,馬博文,曾朝京 譯 個人理解: 向客戶交付價值,快速、高效、高質量交付 信息全流程共享、全過程參與、關注軟件…