当前位置: 首页 > news >正文

【云原生】Helm来管理Kubernetes集群的详细使用方法与综合应用实战

在这里插入图片描述

✨✨ 欢迎大家来到景天科技苑✨✨

🎈🎈 养成好习惯,先赞后看哦~🎈🎈

🏆 作者简介:景天科技苑
🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。
🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi,flask等框架,云原生k8s,linux,shell脚本等实操经验,网站搭建,数据库等分享。

所属的专栏:云原生K8S,零基础到进阶实战
景天的主页:景天科技苑

在这里插入图片描述

文章目录

  • Helm
    • 引言
    • 环境准备
      • 1. 主机初始化配置
      • 2. 部署Docker环境
      • 3. 部署Kubernetes集群
    • 安装Helm
      • 1. 下载并安装Helm
      • 2. 初始化Helm
      • 3. 配置Helm仓库
    • 使用Helm部署应用
      • 1. 查找Chart
      • 2. 安装Chart
      • 3. 查看部署状态
      • 4. 自定义Chart
      • 5. 升级Chart
      • 6. 回滚Chart
      • 7. 删除Chart
      • 8. 创建自己的Chart
      • 9. Helm Chart的高级功能
        • 9.1 依赖管理
        • 9.2 模板功能
        • 9.3 钩子(Hooks)
        • 9.4 Chart版本管理
        • 9.5 Chart测试
      • 10. Helm与CI/CD集成
    • 结论

Helm

引言

随着容器化和微服务架构的普及,Kubernetes(简称K8s)已成为云原生应用部署和管理的首选平台。然而,对于复杂的Kubernetes应用,直接通过kubectl管理大量的YAML配置文件变得非常繁琐和容易出错。Helm,作为Kubernetes的包管理工具,通过引入Chart概念,极大地简化了Kubernetes应用的部署、升级、回滚和删除过程。本教程将结合实际案例,详细介绍如何通过Helm来管理Kubernetes集群。

环境准备

1. 主机初始化配置

在部署Kubernetes集群之前,我们需要准备几台满足要求的服务器。推荐配置为CPU: 2C+,Memory: 2G+。所有主机需要禁用防火墙和SELinux,并配置好主机名和hosts文件。

# 禁用SELinux
setenforce 0
sed -i '/^SELINUX=/s/enforcing/disabled/' /etc/selinux/config# 关闭防火墙和网络管理器
systemctl stop firewalld
systemctl disable firewalld
systemctl stop NetworkManager
systemctl disable NetworkManager# 配置主机名
hostnamectl set-hostname k8s-master
echo "192.168.147.137 k8s-master" >> /etc/hosts
# 类似地,为其他节点配置主机名和hosts# 安装必要的工具
yum -y install vim wget net-tools lrzsz# 禁用swap
swapoff -a
sed -i '/swap/s/^/#/' /etc/fstab# 配置网络桥接
cat <<EOF >> /etc/sysctl.conf
net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-iptables=1
EOF
modprobe br_netfilter
sysctl -p

2. 部署Docker环境

Kubernetes依赖Docker来管理容器,因此需要在所有节点上安装Docker。推荐使用阿里云的YUM源来安装Docker。

# 添加Docker的YUM源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum clean all && yum makecache fast# 安装Docker
yum -y install docker-ce# 启动Docker服务
systemctl start docker
systemctl enable docker# 配置Docker镜像加速
cat <<END > /etc/docker/daemon.json
{"registry-mirrors": ["https://nyakyfun.mirror.aliyuncs.com"]
}
END
systemctl daemon-reload
systemctl restart docker

3. 部署Kubernetes集群

这里我们使用kubeadm来部署Kubernetes集群。详细步骤包括安装kubelet、kubeadm、kubectl,配置init-config.yaml,初始化master节点,加入node节点等。

# 配置阿里云YUM源(略)# 安装kubelet kubeadm kubectl
yum install -y kubelet kubeadm kubectl# 初始化master节点(详细步骤省略,需要配置init-config.yaml)
kubeadm init --config=init-config.yaml# 将kubeadm join命令保存到文件,以便后续添加node节点
kubeadm join ... > join-command.sh# 在node节点上执行kubeadm join命令
# scp join-command.sh k8s-node01:/root
# scp join-command.sh k8s-node02:/root
# 在每个node节点上执行 bash join-command.sh# 安装flannel网络插件(略)

安装Helm

1. 下载并安装Helm

Helm是一个命令行工具,可以从其GitHub仓库下载并安装。

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

2. 初始化Helm

Helm 3版本移除了Tiller组件,简化了初始化流程。

# 初始化Helm,无需指定kube-context(如果使用默认的kube-context)
helm init# 或者,如果您有多个Kubernetes集群上下文,可以指定kube-context
# helm init --kube-context [CONTEXT_NAME]

3. 配置Helm仓库

Helm支持从多个仓库中查找和安装Chart。首先,需要添加您需要的Helm仓库。

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

使用Helm部署应用

1. 查找Chart

在部署应用之前,您可能需要查找适合您需求的Helm Chart。Helm提供了一个搜索功能,允许您按名称或描述查找Chart。

helm search repo nginx

这将列出所有与nginx相关的Chart,包括它们所属的仓库、版本以及简短描述。

2. 安装Chart

找到您需要的Chart后,就可以使用helm install命令来安装它了。以下是一个安装Nginx Chart的示例:

helm install my-nginx stable/nginx

在这个命令中,my-nginx是您给这个Nginx部署的自定义名称,stable/nginx是Chart的标识符(包括仓库名和Chart名)。

3. 查看部署状态

安装完成后,您可以使用kubectl命令来查看部署的状态。

kubectl get pods

您应该能看到与my-nginx相关的Pod正在运行。

4. 自定义Chart

Helm允许您通过values文件来自定义Chart。values文件是一个YAML文件,其中包含了可以覆盖Chart默认配置的键值对。

首先,您可以使用helm show values命令来查看Chart的默认values文件。

helm show values stable/nginx

然后,您可以创建一个自定义的values文件,例如custom-values.yaml,并在其中设置您想要的配置。

# custom-values.yaml
replicaCount: 3
service:type: LoadBalancerport: 80

最后,在安装Chart时指定这个values文件。

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

5. 升级Chart

当Chart的新版本发布时,您可以使用helm upgrade命令来升级已部署的Chart。

helm upgrade my-nginx stable/nginx

如果您想同时应用一些自定义配置,可以像安装时一样指定values文件。

6. 回滚Chart

如果升级后出现问题,您可以使用helm rollback命令将Chart回滚到之前的版本。

helm rollback my-nginx [REVISION]

其中[REVISION]是您想要回滚到的版本编号。您可以使用helm history my-nginx命令来查看部署的历史版本。

7. 删除Chart

当您不再需要某个Chart时,可以使用helm uninstall命令来删除它。

helm uninstall my-nginx

这将删除与该Chart相关的所有Kubernetes资源,但不会删除Chart本身或values文件。

8. 创建自己的Chart

除了使用现有的Chart之外,Helm还允许您创建自己的Chart。这通常涉及以下几个步骤:

  1. 创建一个Chart目录结构。
  2. 编写Chart.yaml文件来描述Chart的基本信息。
  3. 编写values.yaml文件来定义可配置的参数。
  4. 编写Kubernetes模板文件(通常是YAML文件),这些文件将使用Go模板语言来动态生成Kubernetes资源定义。
  5. 使用helm lint命令来验证Chart的格式和语法。
  6. 使用helm package命令将Chart打包为tar.gz文件。
  7. (可选)将Chart添加到Helm仓库中,以便其他人可以安装它。

创建自己的Chart需要一定的Kubernetes和Helm知识,但一旦掌握了,就可以大大提高在Kubernetes上部署和管理应用的效率。

9. Helm Chart的高级功能

Helm Chart不仅仅是一个简单的应用部署工具,它还支持许多高级功能,可以帮助您更灵活地管理Kubernetes资源。

9.1 依赖管理

Helm Chart可以声明对其他Chart的依赖。这意味着您可以创建一个Chart,它依赖于其他Chart来提供某些功能或服务。当您安装这个Chart时,Helm会自动解析依赖关系,并按照正确的顺序安装所有必要的Chart。

Chart.yaml文件中,您可以使用dependencies字段来声明依赖项。但是,从Helm 3开始,推荐使用helm dependency命令来管理依赖项,而不是直接在Chart.yaml中声明它们。

# 初始化Chart的依赖目录
helm dependency init# 更新Chart的依赖项
helm dependency update
9.2 模板功能

Helm Chart使用Go模板语言来动态生成Kubernetes资源定义。这意呀着您可以在模板中嵌入逻辑,以便根据不同的配置或环境生成不同的资源。

模板文件通常位于Chart的templates目录中,并以.yaml.tpl结尾。在模板中,您可以使用{{ ... }}来包含Go模板表达式,这些表达式可以访问values文件中的数据、Helm的内置对象(如Release对象)以及自定义的函数和管道。

9.3 钩子(Hooks)

Helm Chart支持钩子,这是一种在Chart生命周期的特定点运行的特殊模板。钩子允许您在安装、升级、删除Chart之前或之后执行自定义操作,例如加载配置、执行测试或清理资源。

钩子是通过在模板文件的文件名中添加特定的注释来定义的。Helm会识别这些注释,并在适当的生命周期点执行相应的模板。

例如,您可以在Chart中定义一个post-install钩子来执行一些安装后的初始化任务:

# templates/post-install-job.yaml
apiVersion: batch/v1
kind: Job
metadata:name: "{{ .Release.Name }}-post-install-job"annotations:"helm.sh/hook": post-install"helm.sh/hook-weight": "-5""helm.sh/hook-delete-policy": hook-succeeded
spec:template:spec:containers:- name: post-install-jobimage: "my-image"command: ["/bin/sh", "-c", "echo Hello from the post-install hook > /usr/share/nginx/html/index.html"]restartPolicy: Never
9.4 Chart版本管理

Helm Chart遵循语义化版本控制(SemVer 2),这意味着Chart的版本号遵循主版本号.次版本号.修订号的格式。当您更新Chart时,应该根据所做的更改的类型来递增相应的版本号部分。

Helm仓库中的Chart版本是独立的,但您可以在Chart的Chart.yaml文件中指定对特定Chart版本的依赖。这有助于确保安装的Chart之间的兼容性。

9.5 Chart测试

Helm支持在Chart中定义测试,这些测试将在Chart安装后自动运行。这有助于验证Chart是否按预期工作,并捕获可能的问题。

测试是通过在Chart的templates目录中定义测试模板来完成的。这些模板通常定义Kubernetes作业(Job)或Pod,它们包含执行测试所需的命令和脚本。

在Chart的Chart.yaml文件中,您可以使用schema字段来指定测试模板的路径。然后,您可以使用helm test命令来运行这些测试。

helm test my-nginx

10. Helm与CI/CD集成

Helm非常适合与持续集成/持续部署(CI/CD)管道集成,以实现自动化和可重复的Kubernetes应用部署。通过将Helm Chart存储在版本控制系统中,并在CI/CD管道中执行Helm命令,您可以确保每次部署都使用相同的配置和依赖项。

许多CI/CD工具(如Jenkins、GitLab CI/CD、GitHub Actions等)都支持Helm命令,并且可以轻松地将它们集成到您的部署流程中。

结论

Helm是一个功能强大的Kubernetes包管理工具,它通过引入Chart概念,极大地简化了Kubernetes应用的部署、升级、回滚和删除过程。通过使用Helm,您可以更高效地管理复杂的Kubernetes集群,并确保您的应用在不同的环境中以一致的方式运行。

通过本教程,您已经了解了Helm的基础知识,包括环境准备、安装、使用Chart、自定义Chart、升级、回滚和删除Chart,以及创建自己的Chart。此外,您还学习了Helm的一些高级功能,如依赖管理、模板功能、钩子、版本管理和测试。最后,您还了解了如何将Helm与CI/CD集成,以实现自动化

相关文章:

【云原生】Helm来管理Kubernetes集群的详细使用方法与综合应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…...

电源插头应该统一方向

大家在使用插排的时候就会发现&#xff0c;有的横向&#xff0c;有的竖向。 国家强制规定&#xff0c;统一方向&#xff0c;插排能方便使用。...

大学新生编程入门最佳攻略

引言 编程的重要性&#xff1a;简述编程在当今社会的地位&#xff0c;为何它是大学生的必备技能。目标设定&#xff1a;明确文章旨在帮助新生从零基础开始&#xff0c;逐步成长为编程高手。 方向一&#xff1a;编程语言选择 1. 编程语言概览 介绍几种流行语言&#xff1a;如…...

MySQL 的binlog 、undolog 、redolog

Binlog (二进制日志) bin Log 作用 用于记录所有修改数据库数据的 SQL 语句或行级别的变化&#xff0c;主要用于主从复制和数据恢复。 binlog格式 STATEMENT模式&#xff1a;binlog里面记录的就是SQL语句的原文。优点是并不需要记录每一行的数据变化&#xff0c;减少了binlo…...

【计算机网络】三次握手、四次挥手

问&#xff1a;三次握手 四次挥手 TCP 连接过程是 3 次握手&#xff0c;终止过程是 4 次挥手 3次握手 第一步&#xff1a;客户端向服务器发送一个带有 SYN&#xff08;同步&#xff09;标志的包&#xff0c;指示客户端要建立连接。 第二步&#xff1a;服务器收到客户端的请求…...

Spring Boot中的全局异常处理:@RestControllerAdvice的应用

在现代Web开发中&#xff0c;异常处理是一个不可或缺的部分。良好的异常处理不仅能提高系统的健壮性&#xff0c;还能提升用户体验。在Spring Boot中&#xff0c;全局异常处理的实现可以通过使用RestControllerAdvice注解来完成。本文将详细介绍如何使用RestControllerAdvice和…...

指令数据的构建

文章目录 基于现有的 NLP 任务数据集构建基于日常对话数据构建基于合成数据构建指令微调(Instruction Tuning)是指使用自然语言形式的数据对预训练后的大语言模型进行参数微调,这一术语由谷歌研究员在 2022 年的一篇 ICLR 论文中正式提出。在另外一些参考文献中,指令微调也…...

论文解读(14)-GeoCLIP

加油&#xff0c;加油&#xff01; 原文&#xff1a; GeoCLIP: Clip-Inspired Alignment between Locations and Images for Effective Worldwide Geo-localization &#xff08;2309.16020 (arxiv.org)&#xff09; 这一篇的重点在于范围放宽到全球了 摘要 首先指出了目前…...

MySQL基础练习题16-电影评分

题目 准备数据 分析数据 总结 题目 查找评论电影数量最多的用户名。如果出现平局&#xff0c;返回字典序较小的用户名。 查找在 February 2020 平均评分最高 的电影名称。如果出现平局&#xff0c;返回字典序较小的电影名称。 准备数据 ## 创建库 create database db; u…...

CRMEB-众邦科技 使用笔记

1.启动项目报错 Unable to load authentication plugin ‘caching_sha2_password’. 参考&#xff1a;http://t.csdnimg.cn/5EqaE 解决办法&#xff1a;升级mysql驱动 <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</ar…...

npm与webpack的学习笔记

npm 定义&#xff1a;npm是Node.js标准的软件包管理器。它起初是作为下载和管理Node.js包依赖的方式&#xff0c;但其现在也已成为前端JavaScript中使用的工具。 包 包&#xff1a;将模块、代码、其他资料聚合成一个文件夹 包的分类&#xff1a; 项目包&#xff1a;主要用…...

Vue 生命周期选项:2.x 与 3.x 的全面解析及案例分享二

目录 Vue3.X生命周期 介绍 流程图 案例 ​​​​​​​this.$nextTick Vue 生命周期选项:2.x 与 3.x 的全面解析及案例分享一-CSDN博客 Vue3.X生命周期 介绍 beforeCreate:在实例初始化之后,数据观测 (data observer) 和 event/watcher 事件配置之前被调用。此时无法访…...

Linux centos7 安装sftp

这里写自定义目录标题 指定 SSH 默认端口 (通常是22)添加自定义端口确保 SFTP 子系统配置存在匹配自定义端口的配置 在 CentOS 7 上安装 SFTP 并使用自定义端口 22345 启动&#xff0c;同时不影响现有的 SSH 登录&#xff0c;可以按照以下步骤进行配置&#xff1a; 步骤 1: 安…...

Java未来还是霸主吗?Java 在当今企业中的未来到底是什么?

Java 及其生态系统对于许多现代企业的成功至关重要。它是一种多功能语言&#xff0c;对许多用例提供强大支持&#xff0c;并具有强大的新功能来应对棘手的情况。但您可能会问自己&#xff1a;Java 的未来是什么&#xff1f; 尽管自 1999 年以来 Java 一直是软件开发领域的关键角…...

【C++】类和对象——Lesson2

Hi~&#xff01;这里是奋斗的小羊&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f4a5;&#x1f4a5;个人主页&#xff1a;奋斗的小羊 &#x1f4a5;&#x1f4a5;所属专栏&#xff1a;C &#x1f680;本系列文章为个人学习笔记…...

常用传感器讲解十五--触摸传感器(KY-036)

常用传感器讲解十五–触摸传感器&#xff08;KY-036&#xff09; 具体讲解 这个比较简单&#xff0c;就是触摸后给个信号 电路连接 在Arduino上将VCC引脚连接到5V。 将GND连接到Arduino的GND。 将OUT连接到Arduino上的D2 代码实现 void setup() {pinMode(2, INPUT);Seri…...

web后端--Spring事务管理

事务也要日志配置 !!!!debug前面记得加空格 logging:level:org.springframework.jdbc.support.JdbcTransactionManager: debugrollbackFor 默认情况下&#xff0c;只有出现RunTimeException才会回滚事务&#xff0c;rollbackfor属性用于控制出现何种异常类型&#xff0c;回滚…...

【Docker系列】Docker 中-d 和-it 的区别

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

PHP回收废品平台系统小程序源码

&#x1f30d;绿色行动&#xff0c;从“回收废品平台系统”开始&#xff01;&#x1f69a; &#x1f6aa;【家门口的环保站&#xff0c;废品不再无处安放】 你是否曾为家里的旧报纸、空瓶子、废旧电器等废品头疼不已&#xff0c;不知该如何处理&#xff1f;现在&#xff0c;“…...

IIS解析漏洞~ IIS7.漏洞分析

IIS解析漏洞 文件解析漏洞是由于中间件错误的将特殊格式的文件解析成可执行网页文件(脚本)&#xff0c;配合文件上传漏洞进行GetShell的漏洞&#xff01; 1.2&#xff1a;IIS7.X 在IIS7.0和IIS7.5版本下也存在解析漏洞&#xff0c;在默认Fast-CGI开启状况下&#xff0c;在一个文…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序

一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

QT: `long long` 类型转换为 `QString` 2025.6.5

在 Qt 中&#xff0c;将 long long 类型转换为 QString 可以通过以下两种常用方法实现&#xff1a; 方法 1&#xff1a;使用 QString::number() 直接调用 QString 的静态方法 number()&#xff0c;将数值转换为字符串&#xff1a; long long value 1234567890123456789LL; …...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer &#xff08;1&#xff09;资源 论文&a…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中&#xff0c;我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道&#xff0c;它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill

视觉语言模型&#xff08;Vision-Language Models, VLMs&#xff09;&#xff0c;为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展&#xff0c;机器人仍难以胜任复杂的长时程任务&#xff08;如家具装配&#xff09;&#xff0c;主要受限于人…...

MinIO Docker 部署:仅开放一个端口

MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...

tauri项目,如何在rust端读取电脑环境变量

如果想在前端通过调用来获取环境变量的值&#xff0c;可以通过标准的依赖&#xff1a; std::env::var(name).ok() 想在前端通过调用来获取&#xff0c;可以写一个command函数&#xff1a; #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...

rknn toolkit2搭建和推理

安装Miniconda Miniconda - Anaconda Miniconda 选择一个 新的 版本 &#xff0c;不用和RKNN的python版本保持一致 使用 ./xxx.sh进行安装 下面配置一下载源 # 清华大学源&#xff08;最常用&#xff09; conda config --add channels https://mirrors.tuna.tsinghua.edu.cn…...