Helm核心概念與常見操作介紹

在管理Kubernetes集群里的應用時,Helm能幫上大忙,它把應用的部署、升級和管理變得簡單多了,有如是Kubernetes的 “應用商店”。

Helm的三個重要概念

三大概念最直接的理解:Helm 安裝 charts 到 Kubernetes 集群中,每次安裝都會創建一個新的 release。你可以在 Helm 的 chart repositories 中尋找新的 chart。接下來分個介紹。

Chart

Chart是Helm里特別關鍵的東西,它其實就是個提前配置好的軟件包,包含在Kubernetes集群部署某個應用要用的所有資源。你可以把它想成是一份詳細的 “應用搭建指南”,能幫你在Kubernetes集群里把應用搭起來。Chart主要包含以下幾個重要部分:

  • Chart.yaml:這個文件記錄著Chart的基本信息,比如Chart的名字、版本號、對它的描述,還有它依賴哪些其他的Chart等。就好比產品說明書的封面,讓你對這個Chart有個初步的了解。例如,在一個部署WordPress應用的Chart里,Chart.yaml會寫明這是WordPress的Chart,版本是多少,以及簡單介紹它能做什么。
  • templates目錄:這里面放著各種Kubernetes資源的模板文件,像deployment.yaml用來規定應用的部署方式,比如要部署多少個副本;service.yaml負責把應用服務對外展示,讓外部能訪問到應用;還有configmap.yaml可以存一些配置信息,像是數據庫連接字符串等。這些模板就像是搭建應用的各個零件圖紙,告訴Kubernetes該怎么創建和配置這些資源。比如說deployment.yaml模板里,會定義使用個Docker鏡像來運行應用,以及應用運行所需的資源限制等。
  • values.yaml:部署應用的時候,你能通過它靈活地改各種參數。比如在部署一個Web應用的Chart時,你能在values.yaml文件里輕松修改數據庫連接字符串,把它改成你實際要用的數據庫地址;還能調整應用副本數量,根據業務量來決定部署多少個實例;以及設置資源請求和限制,比如給應用分配多少CPU和內存。通過修改values.yaml里的參數,能讓應用適應不同的運行環境。比如在測試環境,你可能把副本數量設為1,方便調試;在生產環境,根據業務量把副本數調高,保證應用的性能。

Repository

Repository就是存Helm圖表(Chart)的地方,就跟一個大軟件倉庫似的,里面放著各種各樣的Chart。Helm官方有公共倉庫,咱們自己也能搭私有倉庫。倉庫里,每個Chart都按特定的目錄結構存著。我們通過helm repo相關的命令和倉庫打交道。比如,用helm repo add命令添加倉庫,把遠程倉庫地址和一個好記的別名連起來,后面用著方便;helm repo update命令是把遠程倉庫的最新信息同步到本地,這樣就能拿到最新版的Chart;helm repo list能列出現在已經配置好的所有倉庫信息,方便我們查看和管理。有了倉庫,大家分享和重復使用Chart就方便多了,大大提高了部署應用的效率。

Release

當我們用Helm把一個Chart裝到Kubernetes集群里的時候,每裝一次,就會生成一個Release。Release其實就是Chart在Kubernetes集群里的一個具體實例,它記著Chart在某個時間點的部署狀態、配置信息,還有相關的元數據。每個Release都有個獨一無二的名字,方便我們管理和追蹤。比如說,你裝了個叫my - nginx的Release,它對應的就是nginxChart在集群里的一次部署。通過Release,我們能很方便地對應用進行升級、回滾、卸載這些操作,而且這些操作都是根據Release記錄的信息來進行的。

Helm的常用操作

1. 倉庫操作

添加倉庫

helm repo add這個命令來添加倉庫。比如說:

helm repo add stable https://charts.helm.sh/stable

這里,stable是我們給倉庫起的別名,最緊要好記;https://charts.helm.sh/stable就是官方穩定倉庫的地址。如果是私有倉庫需要認證,添加的時候帶上用戶名和密碼參數:

helm repo add --username myuser --password mypass private_repo https://my_private_repo.com
列出倉庫

運行helm repo list就能看到已經添加的倉庫列表:

helm repo list

結果會顯示倉庫別名和對應的URL,讓我們清楚現在都配置了哪些倉庫,方便后面管理和使用。

在官方倉庫搜索

helm search hub這個命令能在官方倉庫找Chart。比如說,你想找和nginx有關的Chart,就這么做:

helm search hub nginx

Helm會在官方倉庫里找名字或者描述里有nginx的Chart,然后把相關信息列出來,像Chart名字、版本、描述啥的,這樣我們就能很快找到想要的應用。

在自己配置的倉庫搜索

要是想在自己配的倉庫里找Chart,就用helm search repo命令。假設倉庫別名是myrepo,找和nginx相關的Chart:

helm search repo myrepo/nginx

這樣就能在指定倉庫里精準找到特定的Chart,提高搜索效率。

刪除倉庫

要是不用某個倉庫了,用helm repo remove命令刪掉。比如說刪別名是stable的倉庫:

helm repo remove stable

執行完,這個倉庫的相關信息就從本地配置里沒了,清理掉沒用的倉庫配置。

2. 安裝操作

下載圖表

helm pull命令下載Chart。默認下,下載的是最新版本,比如:

helm pull stable/nginx

要是想指定版本下載,加個--version參數:

helm pull stable/nginx --version 1.2

下載下來的Chart是個壓縮包,解壓后能看到里面的文件結構,有Kubernetes資源模板文件、values.yaml文件等,方便我們在安裝前研究,或者用來離線安裝。

安裝倉庫里的Chart

helm install命令把Chart裝到Kubernetes集群里。比如說,裝stable倉庫的nginxChart,給Release起名叫my - nginx

helm install my - nginx stable/nginx

安裝的時候,Helm會從指定倉庫把Chart下載下來,然后按照Chart里的定義,在集群里創建對應的Kubernetes資源。

使用自定義的values.yaml文件

安裝的時候,能通過-f參數指定自定義的values.yaml文件,用自己的配置把默認配置換掉。比如:

helm install my - nginx stable/nginx - f myvalues.yaml

myvalues.yaml文件里,我們能根據實際需要改各種參數,像調整副本數量、改服務端口,讓應用更符合實際運行環境。

升級版本或者修改配置

應用更新了,或者需求變了,就得升級已經安裝的Release。拿my - nginx來說,假設要升級到stable/nginx圖表的新版本,還想把副本數改成4:

helm upgrade my - nginx stable/nginx --set replicaCount = 4

升級的時候,Helm對原配置的處理機制是這樣的:它會先讀取當前Release的配置信息,這些信息存儲在values.yaml文件以及Release的元數據中 。對于那些在新版本Chart里依然存在且未發生重大變更的配置項,Helm會保留原有的配置值。例如,如果原配置里設置了image.repositorynginx:1.18,在新版本Chart里該配置項的結構和用途未變,那么升級時這個配置值會被繼續沿用,實現平滑轉移 。

但如果新版本Chart引入了新的配置項,Helm會按照以下規則處理:若用戶在升級命令中沒有顯式指定新配置項的值,Helm會嘗試使用新版本Chart中values.yaml文件里定義的默認值。比如新版本stable/nginx圖表新增了一個extraEnvVars配置項用于設置額外的環境變量,而用戶升級時沒有通過--set-f參數指定其值,那么Helm會采用新版本values.yaml里為extraEnvVars設置的默認值。若用戶在升級命令中通過--set-f參數指定了新配置項的值,Helm則會使用用戶指定的值。例如用戶執行helm upgrade my - nginx stable/nginx --set extraEnvVars[0].name=TEST_VAR --set extraEnvVars[0].value=test,那么Helm會按照用戶指定的內容,為應用配置新的環境變量。

在更新資源時,Helm會盡量用滾動更新的辦法,保證服務一直能用。比如說對于Deployment資源,Helm會一個一個把舊的Pod換成新配置的Pod,同時盯著整個更新過程,一有問題,馬上能回滾到上一個版本。

卸載

helm uninstall命令卸載Release。比如說卸載叫my - nginx的Release:

helm uninstall my - nginx

Helm會把這個Release對應的所有Kubernetes資源都刪掉,像Deployment、Service這些。不過要注意,如果Chart創建了PVC(PersistentVolumeClaim)這種持久化資源,默認情況下,Helm不會刪這些資源,得我們自己手動清理,不然就浪費資源了。

預安裝檢查

在安裝或者升級Release之前,可以用--dry - run--debug參數做個預安裝檢查。比如:

helm install my - redis stable/redis --dry - run --debug

--dry - run能讓Helm模擬安裝過程,但不會真的創建資源,這樣能提前發現潛在問題,像模板渲染錯誤、資源沖突這些;--debug參數會輸出詳細的調試信息,方便我們找到問題、解決問題,保證正式安裝或者升級能順順利利的。

3. 創建chart

創建一個基礎框架

helm create命令生成Chart的基礎結構。比如說創建一個叫my - nginx的Chart:

helm create my - nginx

這個命令會在當前目錄生成一個my - nginx文件夾,里面有Chart的基本文件和目錄結構。像Chart.yaml(存圖表的基本信息,比如名字、版本、描述)、templates目錄(放Kubernetes資源模板文件,像deployment.yamlservice.yaml)、values.yaml(用來配置圖表參數)。我們可以根據實際需要,修改這些文件,做出符合項目要求的Chart。

打包成壓縮包

自定義圖表做好了之后,用helm package命令把它打成壓縮包,方便分享或者部署。在my - nginx圖表目錄下運行:

helm package my - nginx

命令會在當前目錄生成my - nginx - 0.1.0.tgz(版本號在Chart.yaml里定好的)壓縮包,這個壓縮包就是打包好的Chart,后面能用來上傳或者分發。

上傳壓縮包

要是有自己的私有Helm倉庫,用helm push命令上傳打包好的圖表。假設私有倉庫地址是https://my_private_repo.com,用戶名是myuser,密碼是mypass,上傳my - nginx - 0.1.0.tgz

helm push my - nginx - 0.1.0.tgz --username myuser --password mypass https://my_private_repo.com

上傳之后,這個Chart就能在私有倉庫里,供其他用戶使用了。

4. 查看操作

Release列表

運行helm list能看到集群里已經安裝的Release列表:

helm list

結果會顯示Release的名字、在哪個命名空間、版本號、更新時間、狀態,還有對應的Chart名字和應用版本等信息,讓我們全面了解現在集群里都部署了哪些應用。

升級Release

升級Release的操作前面講過了,用helm upgrade命令。比如說把my - nginx升級到stable/nginx的新版本,還改改配置:

helm upgrade my-nginx stable/nginx --set replicaCount = 4

升級的時候,Helm會根據現在Release的狀態和配置,再結合新版本Chart的變化,巧妙地決定怎么更新Kubernetes資源。要是有新資源,Helm就創建;要是已有資源的配置變了,Helm會按照資源類型的更新規則去更新。比如說對于Deployment資源,會用滾動更新的方式,一個一個把舊Pod換成新的,保證服務一直能用。同時,Helm會記錄升級過程中的狀態和事件,方便我們跟蹤和排查問題。

查看Release配置

helm get values命令查看Release的配置參數。比如說查看叫my - nginx的Release配置:

helm get values my - nginx

結果會顯示這個Release現在用的配置參數,和values.yaml文件里的配置是對應的,方便我們檢查配置對不對,了解現在的運行配置情況。

獲取Release詳細信息

運行helm status命令能拿到Release的詳細信息,像配置、狀態、事件這些。比如說查看my - nginx的詳細信息:

helm status my - nginx

輸出的內容有Release現在的狀態(比如deployed表示已經成功部署)、資源狀態(像Deployment的副本數、Pod的運行狀態)、配置參數,還有相關的NOTES信息(一般是Chart作者給的一些使用說明),能幫我們排查問題,更深入了解部署情況。

5. 回滾操作

查看Release歷史版本

helm history命令查看Release的歷史版本信息。比如說查看my - nginx的歷史版本:

helm history my-nginx

結果會顯示每個版本的修訂號、更新時間、狀態、對應的Chart版本,還有操作描述(比如安裝、升級)。通過看歷史版本,我們能知道Release都有哪些變化,為回滾操作提供依據。

回滾Release

要是升級之后出問題了,需要回滾到之前的某個版本,就用helm rollback命令。比如說把my - nginx回滾到版本1:

helm rollback my-nginx 1

回滾的時候,Helm會根據歷史記錄,把Release對應的Kubernetes資源變回指定版本的狀態。它會重新用舊版本Chart的配置,改資源的參數,像Deployment的鏡像版本、副本數量,讓它們和目標版本一樣。同時,Helm也會像升級操作那樣,采用合理的資源更新策略,保證回滾過程中服務穩定、連續。要是回滾過程出問題了,Helm會試著恢復,盡量讓系統保持一致。

6. 名稱空間

-n namespace

直接在以上的命令后面加上這個,就能在具體的namespace里面運行這些命令,比如:

helm list -n mynamespce
helm history alias -n mynamespace

掌握了Helm這些核心概念和常用操作,在管理Kubernetes集群里的應用時,我們就能更高效地部署、升級、維護應用,充分發揮Kubernetes的優勢,提高開發運維效率。要是在使用Helm的時候遇到問題,或者對上面這些操作有不明白的地方,比如在特定場景下怎么調整配置,隨時來交流。

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

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

相關文章

rkmpp 解碼 精簡mpi_dec_test.c例程

rkmpp 解碼流程(除 MPP_VIDEO_CodingMJPEG 之外) 源碼 輸入h264碼流 輸出nv12文件 /** Copyright 2015 Rockchip Electronics Co. LTD** Licensed under the Apache License, Version 2.0 (the "License");* you may not use this file exce…

用一個實際例子快速理解MCP應用的工作步驟

已經有很多的文章介紹MCP server,MCP Client工作原理,這里不做太多介紹。但是很多介紹都只是側重介紹概念,實際的工作原理理解起來對初學者還是不太友好。本文以一個智能旅游咨詢系統為例,詳細說明在利用 Model Context Protocol&…

【LeetCode 題解】數據庫:1321.餐館營業額變化增長

一、問題描述 本題給定了一個名為 Customer 的表,記錄了餐館顧客的交易數據,包括顧客 ID、姓名、訪問日期和消費金額。作為餐館老板,我們的任務是分析營業額的變化增長情況,具體來說,就是計算以 7 天(某日…

【Python】讀取xlsb或xlsx的單一或連續單元格工具類

代碼主要來自Kimi.ai,有修改。 優先使用工作表序號索引工作表,序號從1開始。 運行需要先安裝openpyxl和pyxlsb兩個第三方庫。 import openpyxl from openpyxl.utils import range_boundaries from pyxlsb import open_workbook as open_xlsbclass Exc…

【藍橋杯】動態規劃:背包問題

這篇文章主要記錄動態規劃方面的學習。 動態規劃的核心思想: 把大問題分解成小問題,記住小問題的解,避免重復計算。 動態規劃(DP)的三大特點: ①最優子結構:大問題的最優解可以由小問題的最優解推導出來 ②重疊子問題:在求解過程中會反復遇到相同的小問題 ③無后效…

華為數字芯片機考2025合集1已校正

單選 1.以下低功耗措施中,哪種不是降低電路翻轉率的方法? A.在不進行算術運算的時候,使這些模塊的輸入保持不變,不讓新的操作數進來 B.采用Gray 碼或One‐hot 碼作為狀態機編碼 C.減少電路中的glitch D.重新安排“if‐else”表達…

React 列表渲染

開發環境:Reacttsantd 你可能經常需要通過 JavaScript 的數組方法 來操作數組中的數據,從而將一個數據集渲染成多個相似的組件。在這篇文章中,你將學會如何在 React 中使用 filter() 篩選需要渲染的組件和使用 map() 把數組轉換成組件數組。 …

力扣刷題DAY11(動態規劃-線性DP)

一、最長上升子序列 300. 最長遞增子序列 &#xff08;一&#xff09;初版代碼 class Solution { public:int lengthOfLIS(vector<int>& nums) {int n nums.size();vector<int> f(n 1, 1); //初始化為1&#xff0c;因為每個數至少可以作為一個單獨的序列in…

DFS--

數字的全排列 #include <bits/stdc.h> using namespace std;//最大的排列數目 const int N10; int n; //存儲排列的路徑 int path[N]; //標記數字是否已經被使用 bool st[N];void dfs(int u){//到達遞歸邊界&#xff0c;輸出一個排列if(un){//輸出循環for(int i0; i<…

棧與隊列及其基礎應用

一.棧 1.棧的定義 棧是一種特殊的線性表&#xff0c;其只允許在固定的一端進行插入和刪除元素操作。進行數據插入和刪除操作的一端稱為棧頂&#xff0c;另一端稱為棧底。棧中的數據元素遵守后進先出LIFO&#xff08;Last In First Out&#xff09;的原則。其結構可以參考羽毛…

openEuler-22.03-LTS-SP3 編譯安裝 Greenplum-db 6.20.0

openEuler-22.03-LTS-SP3 編譯安裝 Greenplum-db 6.20.0 1、配置 yum 華為源2、安裝依賴3、源碼安裝 openssl 1.0.1u3.1、openssl 1.1.1 降級到 openssl 1.0.1 4、源碼安裝 python 2.75、使用 pip3 安裝 Python 相關依賴6、編譯安裝 Greenplum-db 6.20.06.1、修改配置6.2、基于…

機器學習02——概要

一、簡介 機器學習是一門在沒有明確編程的情況下讓計算機學習的科學。 監督學習是有目標的&#xff0c;輸入數據對應明確的輸出&#xff1b;無監督學習則是“探索”型的&#xff0c;模型的目標是從數據中發現潛在的模式或結構&#xff0c;而不需要預先知道標簽。 二、機器學…

swift-08-屬性、匯編分析inout本質

一、Swift中跟實例相關的屬性可以分為2大類 1.1 存儲屬性&#xff08; Stored Property&#xff09; 類似于成員變量這個概念 存儲在實例的內存中 結構體、類可以定義存儲屬性 枚舉不可以定義存儲屬性&#xff08;因為枚舉只存儲關聯值和case&#xff09; 1.2 計算屬性&am…

【HarmonyOS Next之旅】DevEco Studio使用指南(十二)

目錄 1 -> Code Linter代碼檢查 2 -> 配置代碼檢查規則 3 -> 查看/處理代碼檢查結果 1 -> Code Linter代碼檢查 Code Linter針對ArkTS/TS代碼進行最佳實踐/編程規范方面的檢查。 可根據掃描結果中告警提示手工修復代碼缺陷&#xff0c;或者執行一鍵式自動修復…

前端vue項目打包成桌面端exe應用

主要 使用 Electron將 vue項目打包為 exe 1.首先下載Electron git clone https://github.com/electron/electron-quick-start cd electron-quick-start npm install安裝完依賴之后 npm start運行成功 注意&#xff1a;如果你的項目使用了VueRouter&#xff0c;那么切記&…

基于springcloud的“微服務架構的巡游出租管理平臺”的設計與實現(源碼+數據庫+文檔+PPT)

基于springcloud的“微服務架構的巡游出租管理平臺”的設計與實現&#xff08;源碼數據庫文檔PPT) 開發語言&#xff1a;Java 數據庫&#xff1a;MySQL 技術&#xff1a;springcloud 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系統展示 系統總體結構圖 E-R實體關系圖…

新一代達夢官方管理工具SQLark:可視化建表操作指南

在數據庫管理工作中&#xff0c;新建表是一項基礎且頻繁的操作。SQLark 的可視化建表功能為我們提供了一種高效、便捷且絲滑流暢的建表新體驗。一起來了解下吧。 SQLark 官方下載鏈接&#xff1a;www.sqlark.com 新建表作為常見的功能&#xff0c;相比其他管理工具&#xff0c;…

Scala相關知識學習總結6

1、集合計算高級函數說明 - 過濾&#xff1a;遍歷集合&#xff0c;提取滿足特定條件的元素組成新集合。 - 轉化/映射&#xff08;map&#xff09;&#xff1a;將集合里的每個元素應用到指定函數進行轉換。 - 扁平化&#xff1a;文檔未詳細闡述其具體含義和操作。 - 扁平化映射&…

pandas.DataFrame.dtypes--查看和驗證 DataFrame 列的數據類型!

查看每列的數據類型&#xff0c;方便分析是否需要數據類型轉換 property DataFrame.dtypes[source] Return the dtypes in the DataFrame. This returns a Series with the data type of each column. The result’s index is the original DataFrame’s columns. Columns with…

計算機中的單位

在計算機科學中&#xff0c;單位用于衡量數據存儲、內存、數據傳輸速率等。以下是一些常見的計算機單位及其含義&#xff1a; ### **1. 數據存儲單位** 數據存儲單位用于衡量計算機存儲設備&#xff08;如硬盤、內存、閃存等&#xff09;的容量。 | 單位 | 符號 | 含義…