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

news2024/11/13 9:15:23

在这里插入图片描述

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

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

🏆 作者简介:景天科技苑
🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,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: LoadBalancer
  port: 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-job
        image: "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集成,以实现自动化

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1970057.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

香港电讯亮相2024算网融合产业发展大会,荣获“SD-WAN优秀产品奖”

秉承“开放、创新、融合、共赢”的发展战略&#xff0c;中国通信标准化协会算网融合产业及标准推进委员会&#xff08;CCSATC621&#xff09;联合中国信息通信研究院&#xff0c;于2024年7月10日共同召开“2024年算网融合产业发展大会”。本次大会发布了多项算网融合领域最新研…

SpringBoot 日志:从基础到高级的全面指南

&#x1f4da; SpringBoot 日志&#xff1a;从基础到高级的全面指南 &#x1f50d; &#x1f4da; SpringBoot 日志&#xff1a;从基础到高级的全面指南 &#x1f50d;摘要引言正文内容一、日志概述 &#x1f4dc;二、日志使用 &#x1f4dd;2.1 打印日志 &#x1f4e3;2.2 日志…

主文件表遗失:数据恢复策略与实战指南

深入解析&#xff1a;无法恢复主文件表的困境 在数字化时代&#xff0c;数据不仅是信息的载体&#xff0c;更是企业运营和个人生活的核心。然而&#xff0c;当遭遇“无法恢复主文件表”的困境时&#xff0c;整个数据系统仿佛被按下了暂停键&#xff0c;让人措手不及。主文件表…

数据集成是什么意思?方法有哪些?数据集成三种方法介绍

1 数据集成是什么 数据集成(Data Intergration)&#xff0c;也称为数据整合&#xff0c;是通过将分布式环境中的异构数据集成起来&#xff0c;为用户提供统一透明的数据访问方式。该定义中的集成是指从整体层面上维护数据的一致性&#xff0c;并提高对数据的利用和共享&#x…

智能语音转Markdown的神器

嘿&#xff0c;技术大咖们&#xff0c;今天我要给你们安利一个超酷炫的智能语音转Markdown笔记系统&#xff0c;它融合了前沿的语音识别技术和强大的AI大模型&#xff0c;绝对是记录和整理信息的神器&#xff01; 打造了一个语音转Markdown的神器 智能语音生成Markdown笔记 这…

芋道源码yudao-cloud 二开日记(商品sku数据归类为规格属性)

商品的每一条规格和属性在数据库里都是单一的一条数据&#xff0c;从数据库里查出来后&#xff0c;该怎么归类为对应的规格和属性值&#xff1f;如下图&#xff1a; 在商城模块&#xff0c;商品的单规格、多规格、单属性、多属性功能可以说是非常完整&#xff0c;如下图&#x…

Java新手启航:JDK 21 版本安装,开启编程之行

在Java开发前&#xff0c;JDK是必不可少的环境&#xff0c;接下来&#xff0c;让我们一起完成JDK 21版本的下载和安装&#xff01; 种一棵树最好的时间是10年前&#xff0c;其次就是现在&#xff0c;加油&#xff01; …

【Redis 进阶】事务

Redis 的事务和 MySQL 的事务概念上是类似的&#xff0c;都是把一系列操作绑定成一组&#xff0c;让这一组能够批量执行。 一、Redis 的事务和 MySQL 事务的区别 1、MySQL 事务 原子性&#xff1a;把多个操作打包成一个整体。&#xff08;要么全都做&#xff0c;要么都不做&am…

实时渲染云交互助力汽车虚拟仿真新体验!

汽车虚拟仿真是指利用软件和数学模型&#xff0c;模拟汽车的设计、制造、测试和运行等过程&#xff0c;以及汽车与环境、驾驶员、乘客等的交互。汽车虚拟仿真可以帮助汽车工程师快速验证方案&#xff0c;优化性能&#xff0c;降低成本&#xff0c;提高安全性和可靠性。 ​ 汽车…

S32G3系列芯片Serial Boot功能详解!

《S32G3系列芯片——Boot详解》系列——S32G3系列芯片Serial Boot功能详解&#xff01;★★★ 一、Serial Boot模式概述二、串行下载协议2.1 基于UART和CAN的下载协议概述2.2 基于FlexCAN的Serial Boot2.2.1 IO配置2.2.2 时钟配置2.2.3 通信波特率2.2.4 基于FlexCAN的Serial Bo…

精心准备的高水平的博客【点评语】,来抄啊!

大家好&#xff0c;我是一名_全栈_测试开发工程师&#xff0c;已经开源一套【自动化测试框架】和【测试管理平台】&#xff0c;欢迎大家关注我&#xff0c;和我一起【分享测试知识&#xff0c;交流测试技术&#xff0c;趣聊行业热点】。 第 1 条 这篇博客文章如同灯塔般照亮了技…

ElementPlus 覆盖默认样式的探索

文章目录 问题解决:global 解释改进一下在研究一下 问题 解决 使用 :global(.el-header) :global(.el-header) {padding: 0; } :global(.el-menu--horizontal) {justify-content: center; }:global 解释 在Vue中&#xff0c;:global() 是一个特殊的 CSS 选择器&#xff0c;用…

在Windows中使用VS Code连接远程服务器

①首先生成自己的密钥 ssh-keygen ②打开VS Code的扩展&#xff0c;安装连接工具 Remote-SSH Remote - SSH: Editing Configuration Files ③点击左侧远程资源管理器&#xff0c;之后点击SSH右侧齿轮&#xff0c;选择一个配置文件 注意&#xff1a;此部分的Host名字要与生成…

【Python机器学习系列】一文教你实现决策树模型可视化(案例+源码)

这是我的第335篇原创文章。 一、引言 决策树是一个有监督分类模型&#xff0c;本质是选择一个最大信息增益的特征值进行输的分割&#xff0c;直到达到结束条件或叶子节点纯度达到阈值。根据分割指标和分割方法&#xff0c;可分为&#xff1a;ID3、C4.5、CART算法。每一种颜色代…

GitLab安装方式

一、什么是GitLab GitLab是一个利用Ruby on Rails开发的开源应用程序&#xff0c;实现一个自托管的Git项目仓库&#xff0c;可通过Web界面进行访问公开或者私人项目。它拥有与Github类似的功能&#xff0c;能够浏览源代码&#xff0c;管理缺陷和注释&#xff0c;可以管理团队对…

动态代理对象在 IronPython 中的实现

动态代理对象是一种设计模式&#xff0c;允许在运行时动态地创建对象&#xff0c;并在这些对象上拦截和处理方法调用。它常用于 AOP&#xff08;面向方面编程&#xff09;、日志记录、权限控制等场景。应用非常广泛&#xff0c;下面跟着我来聊一聊我遇到的问题。 1、问题背景 …

通过ProSave对西门子触摸屏进行OS更新的具体操作方法(恢复出厂设置)

通过ProSave对西门子触摸屏进行OS更新的具体操作方法(恢复出厂设置) 首先,打开电脑的控制面板,将右上角的查看方式修改为“大图标”,如下图所示,找到“设置PG/PC接口”, 如下图所示,在弹出的窗口中上方的应用程序访问点的下拉菜单中选择 “S7ONLINE(STEP7)”,并在下…

【深度学习实战(49)】目标检测损失函数:IoU、GIoU、DIoU、CIoU、EIoU、alpha IoU、SIoU、WIoU原理及Pytorch实现

前言 损失函数是用来评价模型的预测值和真实值一致程度&#xff0c;损失函数越小&#xff0c;通常模型的性能越好。不同的模型用的损失函数一般也不一样。损失函数主要是用在模型的训练阶段&#xff0c;如果我们想让预测值无限接近于真实值&#xff0c;就需要将损失值降到最低…

kernel-devel导致的linux网卡驱动安装异常

引言 安装包下载&#xff1a;iso镜像文件解压后进入package路径&#xff0c;可以找到所有想要的rpm安装包 1.检查gcc gcc -v&#xff1a;检查gcc编译程序是否安装&#xff0c;如果已经成功安装直接执行步骤3 2.安装gcc & gcc-c gcc程序准备&#xff0c;拷贝到centos后进入…

大厂linux面试题攻略五之数据库管理

一、数据库管理-MySQL语句 0.MySQL基本语句&#xff1a; 1.SQL语句-增 创建xxx用户&#xff1a; mysql>create user xxx % indentified by 123456; xxx表示用户名 %b表示该用户用来连接数据库的方式&#xff08;远程或本地连接&#xff09; indentified by 123456设置密码…