Kubernetes# Helm工具使用

目錄

概念

核心組件

Helm客戶端

Tiller

Chart

Repository

Release

Helm安裝

Helm使用

創建Helm Chart

定義Chart元數據

定義Template模板

定義values參數

打包和部署

Helm Chart 推送到遠程倉庫

Helm常用命令


概念

Helm 是一個 Kubernetes 的包管理工具,它被稱為 Kubernetes 的 “Yum” 或 “Apt”,用于簡化應用在 Kubernetes 中的部署、升級和管理。通過 Helm,你可以定義、安裝和管理復雜的 Kubernetes 應用。

核心組件

Helm的運行也是依賴各種組件,我們在機器上執行一次Helm實際上也是多個組件執行的結果,Helm總共包括5個核心組件:

Helm客戶端

Helm 是一個命令行下的客戶端工具。主要用于 Kubernetes 應用程序 Chart 的創建、打包、發布以及創建和管理本地和遠程的 Chart 倉庫。

Tiller

Tiller 是 Helm 的服務端,部署在 Kubernetes 集群中。Tiller 用于接收 Helm 的請求,并根據 Chart 生成 Kubernetes 的部署文件( Helm 稱為 Release ),然后提交給 Kubernetes 創建應用。Tiller 還提供了 Release 的升級、刪除、回滾等一系列功能。

Chart

  • Chart 是一個 Helm 包,包含 Kubernetes 應用的資源定義文件(YAML 格式)和模板文件(用于動態生成 Kubernetes 資源)。Chart 是 Helm 的基本單元,相當于一個應用模板包。
  • 一個 Chart 可以用于部署多種環境,例如開發、測試和生產,只需要修改配置值。

Repository

Repository 是存放 Helm Chart 的地方,類似于 Docker 鏡像倉庫。官方的 Chart 倉庫是 Artifact Hub,你也可以搭建私有倉庫。

Release

  • 每次使用一個 Chart 部署應用時,Helm 會創建一個 Release
  • Release 是 Chart 的運行實例。可以有多個 Release 運行同一個 Chart,但每個 Release 會有不同的名稱和配置。

Helm安裝

安裝 Helm CLI

  • 從 Helm 官方獲取安裝腳本:
    curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
    chmod 700 get_helm.sh
    ./get_helm.sh

驗證安裝

helm version// 如果安裝成功,你會看到類似以下的輸出:
version.BuildInfo{Version:"v3.x.x", GitCommit:"xxxx", GitTreeState:"clean", GoVersion:"go1.x"}

Helm使用

介紹了這么多,現在用示例來看看如何使用Helm來部署kubernetes資源。

創建Helm Chart

Chart是一個項目包,也是執行Helm的基礎,所有的定義都是在Chart中定義的,我們使用Helm部署一些中間件的時候,比如nginx、Kafka等這些,都是倉庫中已有的Chart直接使用,這里我們直接自己自定義一個Chart定義自己的項目。

創建Chart命令:

helm create my-app

這樣可以生成一個my-app項目,項目目錄如下:

目錄結構說明:

  • Chart.yaml:Chart的元數據,定義Chart的名稱和版本
  • values.yaml:默認配置參數,配置Kubernetes的一些參數,配合模板使用
  • templates:Kubernetes的資源模板,比如Deployment、service、pod等
  • charts:存放依賴的子Chart目錄,一般是已經打包成.tgz文件的chart文件

定義Chart元數據

apiVersion: v2
name: my-app
description: A Helm chart for my business app
version: 1.0.0
appVersion: 1.0.0

定義Template模板

這里我們定義一個WEB業務項目中常用的資源,有Deployment、Service、Ingress:

創建Deployment模板:

apiVersion: apps/v1
kind: Deployment
metadata:name: {{ .Release.Name }}labels:app: {{ .Chart.Name }}
spec:replicas: {{ .Values.replicaCount }}selector:matchLabels:app: {{ .Chart.Name }}template:metadata:labels:app: {{ .Chart.Name }}spec:containers:- name: {{ .Chart.Name }}image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"ports:- containerPort: 80resources:{{- toYaml .Values.resources | nindent 12 }}

創建Service模板:

apiVersion: v1
kind: Service
metadata:name: {{ .Release.Name }}labels:app: {{ .Chart.Name }}
spec:type: {{ .Values.service.type }}ports:- port: {{ .Values.service.port }}targetPort: 80selector:app: {{ .Chart.Name }}

創建Ingress:

{{- if .Values.ingress.enabled }}
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: {{ .Release.Name }}annotations:nginx.ingress.kubernetes.io/rewrite-target: /
spec:rules:- host: {{ .Values.ingress.host }}http:paths:- path: /pathType: Prefixbackend:service:name: {{ .Release.Name }}port:number: {{ .Values.service.port }}
{{- end }}

這樣一個常規web項目就定義好了,我們定義了項目的鏡像還有訪問方式,可以看到和我們平時用kubernetes app -f xxx.yaml的方式不同,這里的yaml資源值都是用參數表示的,我們僅僅是定義了一個模板,參數都是動態的,可想而知如果是多個這樣的web項目,我們是不是只需要這樣一個模板就可以隨意部署我們的項目了,是不是很方便。


定義values參數

values.yaml是配合template使用的,定義template模板中使用的默認參數:

replicaCount: 2image:repository: myregistry.com/my-apptag: "1.0.0"pullPolicy: IfNotPresentservice:type: ClusterIPport: 80ingress:enabled: truehost: my-app.example.comresources:limits:cpu: 500mmemory: 256Mirequests:cpu: 250mmemory: 128Mi

打包和部署

Chart項目的內容都定義好了,現在只需要打包成.tgz文件,然后通過Helm部署就可以了。

  • 打包Chart
    helm package my-app
    
  • 部署到Kubernetes
    // 命令格式 heml install {name} {chart}// 通過源文件直接部署
    helm install my-app ./my-app// 通過已經打好的chart包部署
    helm install my-app my-app-1.0.0.tgz

這樣資源就部署好了,我們可以通過kubernetes命令進行查看,也可以通過helm list查看

上面這個部署方式用的是默認values.yaml里定義的參數,我們也可以在執行命令的時候定義參數,這樣模板就動態創建不同的資源了:

  • 使用set
    helm install my-app ./my-app \--set replicaCount=3 \--set image.tag="2.0.0"
  • 使用 --set-file 傳遞文件中的值
    如果值較為復雜,或者需要動態加載值,可以將參數放到文件中,通過 --set-file 引入。

    創建一個文件 override-values.yaml
    replicaCount: 5image:repository: custom.registry.com/my-apptag: "3.0.0"
    安裝命令:
    helm install my-app ./my-app -f override-values.yaml

Helm Chart 推送到遠程倉庫

從上面可以看到,Chart是一個模板項目,通過不同的參數可以創建不同的資源,所以模板是共用的,可以保存在Chart的倉庫中。

  • 添加Helm倉庫
    helm repo add my-repo https://my-repo.com/charts
  • 推送Chart使用插件helm-push
    helm push my-app-1.0.0.tgz my-repo
    

Helm常用命令

命令功能說明
helm create <chart-name>創建一個新的 Chart 項目目錄結構。
helm lint <chart-path>檢查 Chart 的語法和結構是否正確。
helm install <release-name> <chart>安裝一個 Chart 并創建一個 Release。
helm upgrade <release-name> <chart>升級指定的 Release,并應用最新的 Chart 更改。
helm uninstall <release-name>刪除指定的 Release,同時清理相關的 Kubernetes 資源。
helm rollback <release-name> <rev>回滾指定 Release 到指定的版本(默認上一個版本)。
helm list列出當前 Kubernetes 集群中所有的 Helm Releases。
helm repo add <repo-name> <repo-url>添加一個 Chart 倉庫到本地。
helm repo update更新本地的 Chart 倉庫索引,拉取最新的倉庫信息。
helm search repo <keyword>在本地添加的倉庫中搜索 Chart。
helm search hub <keyword>在 Helm Hub 上搜索 Chart(需聯網)。
helm template <chart>渲染 Chart 模板為 Kubernetes 資源清單文件(不執行部署)。
helm package <chart-path>將 Chart 打包成一個 .tgz 文件,用于分發和發布。
helm show values <chart>顯示指定 Chart 的默認 values.yaml 配置內容。
helm get values <release-name>查看指定 Release 的實際生效配置值。
helm get manifest <release-name>查看指定 Release 渲染后的 Kubernetes 資源清單文件。
helm get all <release-name>獲取指定 Release 的所有相關信息(包含配置、清單等)。
helm dependency update更新 Chart 的依賴,下載 Chart.yaml 中定義的子 Chart 到 charts/ 目錄。
helm dependency build構建 Chart 的依賴,功能與 helm dependency update 類似,主要用于初始構建。
helm history <release-name>查看指定 Release 的歷史版本記錄。
helm env顯示 Helm 的環境變量信息(例如倉庫路徑、緩存路徑等)。
helm test <release-name>運行 Chart 定義的測試用例,用于驗證部署是否成功。
helm pull <chart-repo>從遠程倉庫拉取 Chart 包到本地(支持版本選擇)。
helm plugin list列出已安裝的 Helm 插件。
helm version顯示 Helm 的版本信息。

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

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

相關文章

Mirror網絡框架-從入門到精通之Mirror簡介

前言 在現代游戲開發中&#xff0c;網絡功能日益成為提升游戲體驗的關鍵組成部分。Mirror是一個用于Unity的開源網絡框架&#xff0c;專為多人游戲開發設計。它使得開發者能夠輕松實現網絡連接、數據同步和游戲狀態管理。本文將深入介紹Mirror的基本概念、如何與其他網絡框架進…

Yocto 項目中的交叉編譯:原理與實例

Yocto 項目是一個強大的工具集&#xff0c;它專注于為嵌入式系統生成定制的 Linux 發行版。交叉編譯在 Yocto 項目中扮演著核心角色&#xff0c;它使得開發者能夠在功能強大的宿主機上構建適用于資源受限目標設備的軟件系統。這篇文章將從運行原理、實際案例和工具鏈組成等角度…

python學opencv|讀取圖像(二十二)使用cv2.polylines()繪制多邊形

【1】引言 前序學習進程中&#xff0c;已經掌握了使用pythonopencv繪制線段、矩形和圓形的基本操作&#xff0c;相關鏈接包括且不限于&#xff1a; python學opencv|讀取圖像&#xff08;十八&#xff09;使用cv2.line創造線段-CSDN博客 python學opencv|讀取圖像&#xff08;…

教師管理系統

大概功能&#xff1a; 1.顯示所有教師 2.按姓名查找教師 3.按工號查找教師 4.增加教師 5.刪除教師 6.退出 數據會保存到 txt 文件里面 姓名&#xff1a;必須是中文 手機號碼&#xff1a;必須是11位&#xff0c;必須是數字 效果展示&#xff1a; 代碼展示&#xff1a; Teache…

小程序配置文件 —— 14 全局配置 - tabbar配置

全局配置 - tabBar配置 tabBar 字段&#xff1a;定義小程序頂部、底部 tab 欄&#xff0c;用以實現頁面之間的快速切換&#xff1b;可以通過 tabBar 配置項指定 tab 欄的表現&#xff0c;以及 tab 切換時顯示的對應頁面&#xff1b; 在上面圖中&#xff0c;標注了一些 tabBar …

[Wireshark] 使用Wireshark抓包https數據包并顯示為明文、配置SSLKEYLOGFILE變量(附下載鏈接)

wireshark 下載鏈接&#xff1a;https://pan.quark.cn/s/eab7f1e963be 提取碼&#xff1a;rRAg 鏈接失效&#xff08;可能會被官方和諧&#xff09;可評論或私信我重發 chrome與firefox在訪問https網站的時候會將密鑰寫入這個環境變量SSLKEYLOGFILE中&#xff0c;在wireshark…

Android筆記(四十一):TabLayout內的tab不滾動問題

背景 假設二級頁面是上面圖片的布局&#xff0c;當進來時TabLayout和ViewPager2綁定完就馬上調setCustomItem&#xff0c;跳轉到最后一個tab頁面時&#xff0c;會發現tab不滾動&#xff0c;手動滑一下ViewPager2時才會滾動tab到正確的位置 原因分析 調用TabLayoutMediator.at…

【Spring】 Bean 注入 HttpServletRequest 能保證線程安全的原理

文章目錄 前言1. 圖示2. 源碼坐標后記 前言 今天看了一段老業務代碼&#xff0c;HttpServletRequest 被注入后直接用于業務邏輯。 好奇Spring是如何解決線程安全問題。 Controller public class TestController {ResourceHttpServletRequest request;ResponseBodyGetMapping(…

CSS面試題|[2024-12-24]

1.說一下CSS的盒模型 在HTML頁面中的所有元素都可以看成是一個盒子 盒子的組成&#xff1a;內容content、內邊距padding、邊框border、外邊距margin 盒模型的類型&#xff1a; 標準盒模型 margin border padding content IE盒模型 margin content&#xff08;包括border p…

Unity中如何修改Sprite的渲染網格

首先打開SpriteEditor 選擇Custom OutLine,點擊Genrate 則在圖片邊緣會出現邊緣線&#xff0c;調整白色小方塊可以調整邊緣 調整后&#xff0c;Sprite就會按照調整后的網格渲染了。 如何在UI中使用&#xff1f; 只要在UI的Image組件中選擇Use Sprite Mesh 即可 結果&#xff1…

【Artificial Intelligence篇】AI 前沿探秘:開啟智能學習的超維征程

目錄 一、人工智能的蓬勃發展與智能學習的重要性: 二、數據的表示與處理 —— 智能學習的基石: 三、構建一個簡單的感知機模型 —— 智能學習的初步探索: 四、神經網絡 —— 開啟超維征程的關鍵一步: 五、超維挑戰與優化 —— 探索智能學習的深度: 六、可視化與交互 —— …

docker-compos mysql5.7主從配置

docker-compos mysql5.7主從配置 docker-compose目錄結構 配置文件 master/my.cnf [client] port 3306 socket /var/run/mysqld/mysqld.sock[mysqld_safe] pid-file /var/run/mysqld/mysqld.pid socket /var/run/mysqld/mysqld.sock nice 0…

開源輕量級文件分享服務Go File本地Docker部署與遠程訪問

???歡迎來到我的博客&#xff0c;很高興能夠在這里和您見面&#xff01;希望您在這里可以感受到一份輕松愉快的氛圍&#xff0c;不僅可以獲得有趣的內容和知識&#xff0c;也可以暢所欲言、分享您的想法和見解。 推薦:kwan 的首頁,持續學習,不斷總結,共同進步,活到老學到老…

路過石巖浪心古村

周末常去的七彩城堡兒童樂園附近經常有老房子&#xff0c;沒想到老房子最多的地方還是浪心古村。而且越看越有歷史。 見到一座寫著《序西書室》的房子&#xff0c;我最開始以為是一個古代的學校。但是查了百度更加不知道什么意思了哈。?“序西書室”?是指《文心雕龍》中的一個…

面經hwl

線程進程協程區別 線程、進程和協程是計算機編程中常見的三個并發模型&#xff0c;它們各自有不同的特點和應用場景&#xff1a; 1. 進程 (Process) 定義: 進程是操作系統中資源分配的基本單位&#xff0c;代表一個正在運行的程序實例。特點: 獨立性: 每個進程有自己獨立的內…

【每日學點鴻蒙知識】PersistentStorage持久化、插槽方法、相對布局、上拉加載下拉刷新、List聯動滑動

1、HarmonyOS 使用PersistentStorage持久化用戶信息無效&#xff1f; 在首頁通過StorageLink(‘userInfoTest’) userInfoTest: string 獲取&#xff0c;獲不到&#xff0c;返回undefind。是什么原因呢&#xff1f; 首先在首頁時&#xff0c;在Entry外聲明PersistentStorage…

torch.tensor

torch.tensor 通過復制數據構造一個張量 &#xff08;構造出的張量是一個沒有自動微分&#xff08;autograd &#xff09;歷史的張量&#xff0c;也稱為葉張量&#xff0c;參考Autograd mechanics&#xff09;。 torch.tensor(data, *, dtypeNone, deviceNone, requires_gra…

探索PyTorch:從入門到實踐的demo全解析

探索PyTorch:從入門到實踐的demo全解析 一、環境搭建:PyTorch的基石(一)選擇你的“利器”:安裝方式解析(二)步步為營:詳細安裝步驟指南二、基礎入門demo:點亮第一盞燈(一)張量操作:深度學習的“積木”(二)自動求導:模型學習的“幕后英雄”三、數據處理demo:喂飽…

SpringMVC學習(二)——RESTful API、攔截器、異常處理、數據類型轉換

一、RESTful (一)RESTful概述 RESTful是一種軟件架構風格&#xff0c;用于設計網絡應用程序。REST是“Representational State Transfer”的縮寫&#xff0c;中文意思是“表現層狀態轉移”。它基于客戶端-服務器模型和無狀態操作&#xff0c;以及使用HTTP請求來處理數據。RES…

Windows中安裝Python3

Windows中安裝Python3 1. 下載Python安裝包 首先&#xff0c;訪問Python的官方網站 Python.org&#xff0c;選擇適合你Windows版本的Python安裝包。 2. 運行安裝包 下載完成.exe文件后&#xff0c;雙擊運行安裝包。在安裝過程中&#xff0c;有一些關鍵的選項需要特別注意&a…