当前位置: 首页 > 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集成,以实现自动化

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 《看漫画学Python》全彩PDF教程,495页深度解析,零基础也能轻松上手!
  • Java中的SSL/TLS安全通信实现
  • 职场里有3个错觉,如果正好说中你,抓紧醒过来
  • 数据同步策略概览
  • 计算机网络-IGMP Snooping特性
  • python 参数输入
  • 【黄啊码】Gradio配合Openai接口实现机器人问答对话
  • JAR文件中混淆和加密class文件
  • Linux系统编程-多路IO套接字
  • GenAI 会消灭软件开发人员的工作吗?
  • Modbus通讯协议
  • linux top
  • 蓝牙网关北京厂家_蓝牙网关型号价格介绍
  • 软件安全测试内容和方法大揭秘,湖南软件测评公司推荐
  • ubuntu22安装k8s-1.24.17
  • 深入了解以太坊
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • Android 架构优化~MVP 架构改造
  • DOM的那些事
  • express + mock 让前后台并行开发
  • HashMap剖析之内部结构
  • Java比较器对数组,集合排序
  • js操作时间(持续更新)
  • leetcode讲解--894. All Possible Full Binary Trees
  • Solarized Scheme
  • 闭包--闭包之tab栏切换(四)
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 面试总结JavaScript篇
  • 配置 PM2 实现代码自动发布
  • 前端面试总结(at, md)
  • 数据科学 第 3 章 11 字符串处理
  • 一、python与pycharm的安装
  • 一个项目push到多个远程Git仓库
  • kubernetes资源对象--ingress
  • 如何用纯 CSS 创作一个货车 loader
  • # Java NIO(一)FileChannel
  • #{}和${}的区别?
  • #QT(串口助手-界面)
  • #数据结构 笔记三
  • (02)vite环境变量配置
  • (2024,RWKV-5/6,RNN,矩阵值注意力状态,数据依赖线性插值,LoRA,多语言分词器)Eagle 和 Finch
  • (31)对象的克隆
  • (C++哈希表01)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (规划)24届春招和25届暑假实习路线准备规划
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (十二)Flink Table API
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (数据大屏)(Hadoop)基于SSM框架的学院校友管理系统的设计与实现+文档
  • (贪心 + 双指针) LeetCode 455. 分发饼干
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • (转)socket Aio demo
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。