【云原生】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。这通常涉及以下几个步骤:
- 创建一个Chart目录结构。
- 编写Chart.yaml文件来描述Chart的基本信息。
- 编写values.yaml文件来定义可配置的参数。
- 编写Kubernetes模板文件(通常是YAML文件),这些文件将使用Go模板语言来动态生成Kubernetes资源定义。
- 使用
helm lint
命令来验证Chart的格式和语法。 - 使用
helm package
命令将Chart打包为tar.gz文件。 - (可选)将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集群的详细使用方法与综合应用实战
✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…...
电源插头应该统一方向
大家在使用插排的时候就会发现,有的横向,有的竖向。 国家强制规定,统一方向,插排能方便使用。...
大学新生编程入门最佳攻略
引言 编程的重要性:简述编程在当今社会的地位,为何它是大学生的必备技能。目标设定:明确文章旨在帮助新生从零基础开始,逐步成长为编程高手。 方向一:编程语言选择 1. 编程语言概览 介绍几种流行语言:如…...
MySQL 的binlog 、undolog 、redolog
Binlog (二进制日志) bin Log 作用 用于记录所有修改数据库数据的 SQL 语句或行级别的变化,主要用于主从复制和数据恢复。 binlog格式 STATEMENT模式:binlog里面记录的就是SQL语句的原文。优点是并不需要记录每一行的数据变化,减少了binlo…...
【计算机网络】三次握手、四次挥手
问:三次握手 四次挥手 TCP 连接过程是 3 次握手,终止过程是 4 次挥手 3次握手 第一步:客户端向服务器发送一个带有 SYN(同步)标志的包,指示客户端要建立连接。 第二步:服务器收到客户端的请求…...
Spring Boot中的全局异常处理:@RestControllerAdvice的应用
在现代Web开发中,异常处理是一个不可或缺的部分。良好的异常处理不仅能提高系统的健壮性,还能提升用户体验。在Spring Boot中,全局异常处理的实现可以通过使用RestControllerAdvice注解来完成。本文将详细介绍如何使用RestControllerAdvice和…...
指令数据的构建
文章目录 基于现有的 NLP 任务数据集构建基于日常对话数据构建基于合成数据构建指令微调(Instruction Tuning)是指使用自然语言形式的数据对预训练后的大语言模型进行参数微调,这一术语由谷歌研究员在 2022 年的一篇 ICLR 论文中正式提出。在另外一些参考文献中,指令微调也…...
论文解读(14)-GeoCLIP
加油,加油! 原文: GeoCLIP: Clip-Inspired Alignment between Locations and Images for Effective Worldwide Geo-localization (2309.16020 (arxiv.org)) 这一篇的重点在于范围放宽到全球了 摘要 首先指出了目前…...
MySQL基础练习题16-电影评分
题目 准备数据 分析数据 总结 题目 查找评论电影数量最多的用户名。如果出现平局,返回字典序较小的用户名。 查找在 February 2020 平均评分最高 的电影名称。如果出现平局,返回字典序较小的电影名称。 准备数据 ## 创建库 create database db; u…...
CRMEB-众邦科技 使用笔记
1.启动项目报错 Unable to load authentication plugin ‘caching_sha2_password’. 参考:http://t.csdnimg.cn/5EqaE 解决办法:升级mysql驱动 <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</ar…...
npm与webpack的学习笔记
npm 定义:npm是Node.js标准的软件包管理器。它起初是作为下载和管理Node.js包依赖的方式,但其现在也已成为前端JavaScript中使用的工具。 包 包:将模块、代码、其他资料聚合成一个文件夹 包的分类: 项目包:主要用…...
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 启动,同时不影响现有的 SSH 登录,可以按照以下步骤进行配置: 步骤 1: 安…...
Java未来还是霸主吗?Java 在当今企业中的未来到底是什么?
Java 及其生态系统对于许多现代企业的成功至关重要。它是一种多功能语言,对许多用例提供强大支持,并具有强大的新功能来应对棘手的情况。但您可能会问自己:Java 的未来是什么? 尽管自 1999 年以来 Java 一直是软件开发领域的关键角…...
【C++】类和对象——Lesson2
Hi~!这里是奋斗的小羊,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~ 💥💥个人主页:奋斗的小羊 💥💥所属专栏:C 🚀本系列文章为个人学习笔记…...
常用传感器讲解十五--触摸传感器(KY-036)
常用传感器讲解十五–触摸传感器(KY-036) 具体讲解 这个比较简单,就是触摸后给个信号 电路连接 在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 默认情况下,只有出现RunTimeException才会回滚事务,rollbackfor属性用于控制出现何种异常类型,回滚…...
【Docker系列】Docker 中-d 和-it 的区别
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
PHP回收废品平台系统小程序源码
🌍绿色行动,从“回收废品平台系统”开始!🚚 🚪【家门口的环保站,废品不再无处安放】 你是否曾为家里的旧报纸、空瓶子、废旧电器等废品头疼不已,不知该如何处理?现在,“…...
IIS解析漏洞~ IIS7.漏洞分析
IIS解析漏洞 文件解析漏洞是由于中间件错误的将特殊格式的文件解析成可执行网页文件(脚本),配合文件上传漏洞进行GetShell的漏洞! 1.2:IIS7.X 在IIS7.0和IIS7.5版本下也存在解析漏洞,在默认Fast-CGI开启状况下,在一个文…...
基于python+django的病人人信息管理系统及安全策略分析设计与实现
博主介绍: 大家好,本人精通Java、Python、C#、C、C编程语言,同时也熟练掌握微信小程序、Php和Android等技术,能够为大家提供全方位的技术支持和交流。 我有丰富的成品Java、Python、C#毕设项目经验,能够为学生提供各类…...
前端必知必会-html表单的input属性
文章目录 HTML 输入属性value 属性readonly 属性disabled 属性size 属性maxlength 属性min 和 max 属性multiple 属性pattern 属性placeholder 属性required 属性step 属性autofocus 属性height 和 width 属性list 属性autocomplete 属性总结 HTML 输入属性 本章介绍 HTML <…...
设计模式:详细拆解策略模式
策略模式 既然是详解,就不以案例开头了,直奔主题,先来看看什么是策略模式。 模式定义 定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式 使得算法可独立于使用它的客户而变化。 结构 Strategy&a…...
Python正则表达式面试题分析总结
Python正则表达式面试题主要围绕Python内置的re模块展开,考察的是应聘者对于正则表达式的理解、使用以及在实际问题中的应用能力。以下是对这些面试题的详细分析总结: 正则表达式基础: re模块简介:Python中的re模块提供了正则表达…...
LeetCode题练习与总结:超过经理收入的员工--181
一、题目描述 SQL Schema > Pandas Schema > 表:Employee ---------------------- | Column Name | Type | ---------------------- | id | int | | name | varchar | | salary | int | | managerId | int | ----…...
LInux:循环语句
LInux:循环语句 if-else语句 if 语句语法格式 if [ $a -gt $b ]; then echo "a>b" fiif [ $a -gt $b ]; then echo "a>b"echo "a!b"echo "true" fiif-else语句 if-else 语句语法格式 if [ $a -gt $b ]; then echo &q…...
NumPy和Pandas中的布尔索引
布尔索引(Boolean Indexing)是数据分析中一种强大且常用的技术,用于通过布尔值数组(即包含 True 和 False 的数组)来选择数据子集。布尔索引可以用于 NumPy 数组、Pandas 数据框等数据结构。 布尔索引是一种非常有用的…...
.NET 一款反序列化打入冰蝎内存马的工具
01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失…...
FPGA实现SDI视频接收转USB3.0传输,GS2971+FT601方案,提供4套工程源码和QT上位机源码
目录 1、前言工程概述免责声明 2、相关方案推荐本博已有的 SDI 编解码方案本博已有的FPGA驱动USB通信方案FPGA基于GS2971的SDI视频解码方案FPGA基于FT601的USB3.0视频传输方案 3、详细设计方案设计原理框图SDI 相机GS2971-SDI解码芯片解读BT1120转RGB888图像缓存FT601-USB3.0芯…...
2024第26届中国(深圳)国际清洁能源、储能科技与新型电力展览会
源网荷储充产业链盛会,2024年续写辉煌,第26届中国国际清洁能源、储能技术与新型电力展览会11月11日将启幕; 2024第二十六届中国国际储能技术与设备展览会 China International Energy Storage Technology and Equipment Exhibition 2024第二…...
价格列表 wordpress/在百度上怎么发布信息
一般只有父pom文件中才有dependencyManagement. dependencies:子POM会完全继承父POM中声明的dependencies,如果子POM中没有声明某个依赖项,但是父POM中声明了该依赖项,就会直接从父POM中继承该依赖项,如果子POM也声明…...
网站建设交接协议书/站长工具seo综合查询官网
关联博客:《kubernetes/k8s CRI 分析-容器运行时接口分析》 《kubernetes/k8s CRI 分析-kubelet创建pod分析》 之前的博文先对 CRI 做了介绍,然后对 kubelet CRI 相关源码包括 kubelet 组件 CRI 相关启动参数分析、CRI 相关 interface/struct 分析、CRI…...
广州易网网站建设/站长统计ios
(注:环境Mac OS X Lion 10.7.3 Xcode 4.2.1 iOS SDK 5.0.)一、新建iOS Application工程,选择Single View Application,不要选中Use Storyboard.假设指定的是product name和class prefix都是one,则完成后自动生成代码视图如下图:…...
商城建站服务/东莞seo优化
下面由sublime教程栏目给大家介绍sublime自动修复eslint报错的方法,希望对需要的朋友有所帮助!问题描述PyQt 环境正常,可以使用 Windows 的 虚拟 DOS 正常运行,但在 Sublime Text 2 下使用 Ctrl B运行后,界面不显示&a…...
网站建设宗旨及商业模式/天津seo诊断
最近想做一个企业邮箱,有C#开发,其功能跟lotus domino差不多,可以发企业内部,也可以外发的那种, 我想用winform,还没有思路,希望园子里的大哥们给点思路。谢谢!! 转载于:…...
电子方案网站建设方案/怎么做微信推广和宣传
字符串类型详解 1、正常字符串我们使用单引号,或者双引号包裹 2、注意转义字符\ \ \n \t \u4e2d \u#### unicode字符 \x41 Asc11字符3、多行字符串编写 //tab 上面iesc键下面 var msg he11owor1d你好ya你好4、模板字符串 //tab 上面 esc键下面 let name &qu…...