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

kubernetes的包管理器Helm介绍和架构说明

 

 

 

 

包管理器

*.rpm: 打包文件,rpm yum,dnf 包仓库工具
*.deb: dpkg apt 包仓库工具

 

Nginx 源码部署软件,ansible playbook

1)download nginx.tar.gz
2) tar xvf
3 安装依赖的相关包,gcc make libxx
4) cd nginx; configure --prefix=/apps/nginx --xxx && make && make install
5) useradd nginx
6) chown -R nginx:nginx /apps/nginx
7) nginx.service

 

k8s 部署应用

写一堆yaml,wordpress+mysql
1)wordpress
configmap
deployment:requests/limits
pvc/pv/sc
service:
ingress

kubectl apply -f
helm

2)mysql
configmap
statefulset
pvc/pv/sc
headless service:clusterIP

A项目:wordpress+mysql nsa
B项目:wordpress+mysql nsb
C项目:wordpress+mysql nsc

wordpress

 

k8s包(Chart)管理器:helm

app.tar.gz
app.tgz

 

 

Kubernetes 包管理器 Helm

 

Helm 说明和部署

Helm 说明

Helm 介绍

传统的软件管理机制
传统的软件安装基于编译安装方式非常繁琐,所以会使用包管理方式简化软件安装的过程
包管理器:

  • deb,dpkg
  • rpm, rpm

程序包仓库:维护有仓库内部各程序文件元数据,其中包含了包依赖关系
前端工具:客户端

  • yum, dnf, ...
  • apt-get, ...

 

将应用服务部署到 Kubernetes 集群的传统流程

  • 拉取源代码
  • 打包编译
  • Dockerfile构建容器的镜像
  • 上传到镜像仓库Harbor
  • 准备一堆相关部署资源清单的 yaml 文件(如:deployment、statefulset、service、ingress、
  • RABC、configmap、secret、PVC等)
  • kubectl apply 部署

 

传统方式部署引发的问题

  • 随着资源引用的增多,需要维护大量的yaml文件
  • 微服务场景下,每个微服务所需配置差别不大,但是众多的微服务的yaml文件无法高效复用
  • 无法将相关yaml文件做为一个整体管理,并实现应用级别的升级和回滚等功能
  • 无法根据一套yaml文件来创建多个环境,需要手动进行修改,尤其是微服务众多的情况,效率低下
  • 例如: 部署的环境都分为开发、预生产、生产环境,在开发这套环境部署完了,后面再部署到预生产和生产环境,还需要重新复制出两套配置文件,并手动修改才能完成

 

 

Kubernetes 的软件管理器 Helm 介绍

Kubernetes也提供了类似于包管理机制 Helm
Helm (船舵,掌舵 )是一个用于简化和管理 Kubernetes 应用部署的包管理器。
Helm 可以将部署应用所需要的所有配置清单文件YAML打包至一个Chart的包文件中,并使用一套资源
实现定制发布到多套环境
Helm 允许用户进行定义、安装和升级 Kubernetes 应用程序的资源,称为 Helm Charts。
Helm 不是 Kubernetes 官方提供的工具,但它是由 Kubernetes 社区维护和支持的。
Helm 在社区中得到了广泛的支持和采用,并成为 Kubernetes 生态系统中流行的部署工具之一。
Helm 是CNCF在2020年已经毕业的项目
https://www.cncf.io/projects/helm/

 

Helm 官网

https://helm.sh/
https://github.com/helm/helm

Helm 文档

https://helm.sh/zh/docs/
https://helm.sh/zh/docs/intro/quickstart/

 

Helm 重要特性

  • 将各种资源YAML文件按照分类进行打包,基于包的方式安装,更加方便
  • 提供template功能,可以基于同一套template文件,但对于不同环境可以赋予不同的值从而实现
  • 的灵活部署
  • 提供版本管理功能,比如,安装,删除,升级,回滚等

 

Helm 的历史

  • 2015 年:Deis 团队开发了 Helm 1.0,最初称为 Kubernetes Deployment Manager。
  • 2016 年:Helm 1.0 与 Kubernetes 项目合并,并更名為 Helm 2.0。Helm 2.0 引入了 Tiller 服务器,它用于管理 Helm 圖表。
  • 2018 年:Helm 2.0 成为 CNCF 毕业項目。
  • 2019 年:Helm 3.0 发布,刪除了 Tiller 服务器,并引入了新的功能,例如 Chart templating 和Chart hooks。
  • 2020 年:Helm 3.0 成为 CNCF 毕业项目

 

Helm 相关概念
Helm:Helm的客户端工具,负责和 API Server 通信
Helm 和 kubectl 类似,也是Kubernetes API Server的命令行客户端工具支持kubeconfig认证文件
需要事先从仓库或本地加载到要使用目标Chart,并基于Chart完成应用管理Chart可缓存于Helm本
地主机上
支持仓库管理和包管理的各类常用操作,例如Chart仓库的增、删、改、查,以及Chart包的制作、
发布、搜索、下载等


Chart:图表,打包文件,将所有相关的资源清单文件YAML的打包文件
https://helm.sh/
https://github.com/helm/helm
https://helm.sh/zh/docs/
https://helm.sh/zh/docs/intro/quickstart/Chart 是一种打包格式,文件后缀为tar.gz或者 tgz,代表着可由Helm管理的有着特定格式的程序
包,类似于RPM,DEB包格式

Chart 包含了应用所需的资源相关的各种yaml/json配置清单文件,比如:deployment,service等
清单文件,但不包含容器的镜像
Chart 可以使用默认配置,或者定制用户自已的配置进行安装应用
Chart 中的资源配置文件通常以模板(go template)形式定义,在部署时,用户可通过向模板参数赋
值实现定制化安装的目的
Chart 中各模板参数通常也有默认值,这些默认值定义在Chart包里一个名为values.yml的文件中


Release:表示基于chart部署的一个实例。通过chart部署的应用都会生成一个唯一的Release,即使
同一个chart部署多次也会产生多个Release.将这些release应用部署完成后,也会记录部署的一个
版本,维护了一个release版本状态,基于此可以实现版本回滚等操作


Repository:chart包存放的仓库,Harbar可以实现,类似于APT和YUM仓库

 

 

 Helm 版本

Helm-v2z

image

 

 

image

 

C/S 架构:

  • Client : helm 命令行程序 client,通过gRPC协议和Tiller通信
  • Server: 称为Tiller, 以Operator形式部署Kubernetes 集群内,表现为相应的一个Pod,还需要做RBAC的授权

Tiller Server
Tiller Server是一个部署在Kubernetes集群内部的 server,其与 Helm client、Kubernetes API server进行交互。

Tiller server 主要负责如下:

  • 监听来自 Helm client 的请求
  • 通过 chart 及其配置构建一次发布安装 chart 到Kubernetes集群,并跟踪随后的发布
  • 通过与Kubernetes交互升级或卸载 chart

权限管理:
Helm 客户端配置 kubeconfig 文件,以便能够与 Kubernetes API 服务器通信。这个配置通常在~/.kube/config 文件中。加载认证配置文件的机制同kubectl
Tiller 服务端需要在其运行的命名空间中具有足够的权限来管理 Kubernetes 资源。

这通常通过创建一个服务账户(ServiceAccount)并绑定适当的角色(例如 ClusterRole 和ClusterRoleBinding)来实现。


 

Helm-v3

2019年11月发布Helm-v3版本

image

 

Helm 3 的变化
Tiller 服务器端被废弃
仅保留helm客户端,helm 通过 kubeconfig 认证到 API Server , 加载认证配置文件的机制同kubectl

Helm 3 的 Release 可以在不同名称空间重用,每个名称空间名称唯一即可,而Helm 2 中,Release的名称在整个 Kubernetes 集群中必须是唯一的。虽然 Helm 2 支持将 Release 安装到不同的命名
空间中,但它们的名称仍然不能重复
支持将Chart 推送至Docker 镜像仓库
支持更强大的 Chart templating 语法,包括 Go 模板和新的 templating 函数。
这使得 Helm 3 更灵活,可以用于更复杂的部署场景

Helm 3 默认使用secrets来存储发行信息,提供了更高的安全性。
Helm 2 默认使用configmaps存储发行信息。


自动创建名称空间
在不存在的命名空间中创建Release时,Helm 2可以自动创建名称空间。
Helm 3遵循其他Kubermetes对象的行为,如果命名空间不存在则返回错误。
Helm 3 可以通过 --create-namespace 选项当名称空间不存在时自动创建
不再需要requirements.yaml,依赖关系是直接在 Chart.yaml中定义。


命令变化
删除 release 命令变化
helm delete RELEASE_NAME --purge => helm uninstall RELEASE_NAME
查看 chart 信息命令变化
helm inspect RELEASE_NAME => helm show RELEASE_NAME
拉取 chart包命令变化
helm fetch CHART_NAME => helm pull CHART_NAME
生成release的随机名
helm-v3 必须指定release名,如果想使用随机名,必须通过--genrate-name 选项实现,helm-v2可以自动生成随机名
helo install ./mychart --generate-name

 

Chart 仓库
Chart 仓库:用于实现Chart包的集中存储和分发,类似于Docker仓库Harbor
Chart 仓库:

  • 官方仓库: https://artifacthub.io/
  • 微软仓库: 推荐使用, http://mirror.azure.cn/kubernetes/charts/
  • 阿里云仓库: http://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
  • 项目官方仓库:项目自身维护的Chart仓库
  • Harbor 仓库:新版支持基于 OCI:// 协议,将Chart 存放在公共的docker 镜像仓库


Chart 官方仓库Hub:
https://artifacthub.io/

可以搜索需要的应用,如下示例:redis

 

使用Helm部署应用流程

image

 

 

使用Helm部署应用流程
安装 helm 工具
查找合适的 chart 仓库
配置 chart 仓库(可选)
定位 chart 包
通过向Chart中模板文件中字串赋值完成其实例化,即模板渲染, 实例化的结果就可以部署到目标Kubernetes上
模板字串的定制方式三种:

  • 默认使用chart中的values.yaml中定义的默认值
  • 直接在helm install的命令行,通过--set选项进行
  • 自定义values.yaml,由helm install -f values.yaml 命令加载该文件

同一个chart 可以部署出来的多个不同的实例,每个实例称为一个release
Chart 和Release的关系,相当于OOP开发中的Class和对象的关系,相当于image和container
应用release 安装命令:helm install

 

 Helm 客户端安装

官方说明

https://helm.sh/docs/intro/install/

 

Helm 下载链接

https://github.com/helm/helm/releases

 

 

 

http://www.jsqmd.com/news/911446/

相关文章:

  • 魔兽争霸3现代兼容性解决方案:WarcraftHelper如何让你的经典游戏焕发新生
  • OpCore Simplify:三步完成黑苹果OpenCore EFI配置的终极解决方案
  • KoLlama-3-8B-Instruct高级应用:5个自定义推理管道与批量处理技巧终极指南
  • 从DBSCAN到TRACLUS:给空间聚类算法“动个手术”,让它看懂移动轨迹
  • Granite-3.0-2B-Base安全与伦理考量:负责任AI开发的5个重要原则
  • Zotero Style:从文献管理到知识可视化,打造个性化学术工作流
  • 【Linux学习】Linux中的进程程序替换
  • 从图片到代码:Qwen3-VL-8B-Thinking视觉编码能力实战教程
  • 抖音批量下载终极指南:3分钟搞定全作品,免费去水印!
  • 面试官问我SHAP值怎么算?我用一个房价预测的例子给他讲明白了
  • 我把一个依赖安装到了本地仓库,但是IDEA 刷新 maven 提示远程私服仓库找不到,怎么解决
  • 3大功能+5个技巧:用Zotero Style插件让你的文献管理效率翻倍
  • L298N驱动直流电机,你的代码可能一直有隐患!详解电源隔离与共地的正确姿势
  • Easypoi停更了?别慌!手把手教你无缝迁移到Apache Fesod(FastExcel)并保留模板功能
  • Arduino驱动28BYJ-48步进电机:从硬件连接到代码优化的完整指南
  • 华为路由基础及静态路由详解
  • League Akari:英雄联盟玩家的终极智能助手,告别繁琐操作提升游戏体验
  • 如何用MindSpore-Lab/mobilenetv1实现高效图像分类:从理论到实践的完整指南
  • Lindy预约自动化实施失败率高达61%?资深架构师复盘12个真实故障案例(含日志级调试清单)
  • 从40G到400G:一文读懂Infiniband带宽演进与你的数据中心选型指南
  • 【计算机组成原理】 栈帧访问机制
  • AU‑60 全功能 AI 语音处理模组:工程师视角的一站式声学解决方案
  • VisionPro 9.0 C#脚本性能优化实战:从‘爆红’工具到毫秒级提速的避坑指南
  • Paperxie 智能排版:告别论文格式内耗,一键对齐全校规范
  • Spek音频频谱分析器:免费开源的声音可视化工具完整指南
  • 5分钟搞定三大音乐平台逐字歌词:ESLyric-LyricsSource终极使用指南
  • MVC、MVP、MVVM 架构 笔记
  • BERT Miniatures系列解析:为什么BERT uncased L-12 H-256 A-4适合资源受限环境
  • 终极Windows防撤回指南:微信QQ消息永久保存的简单解决方案
  • 如何解决终端开发效率瓶颈:终极WaveTerm自定义小部件指南