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.mzph.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;的容量。 | 单位 | 符号 | 含义…