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

k8s 部署方式kustomization和helm的区别

KustomizeHelm 是 Kubernetes 中两种流行的配置管理工具,它们都用于管理 Kubernetes 资源,但它们的设计理念、功能和适用场景有所不同。以下是两者的详细对比:


1. 基本概念

Kustomize

  • 功能:原生于 Kubernetes 的工具,用于基于已有的 YAML 配置文件进行修改和覆盖(Patch)。
  • 设计理念:通过声明式的配置管理,对现有的资源文件进行变更,而不依赖模板。
  • 特点
    • 无需模板。
    • 修改现有 YAML 而不改变其基础定义。
    • 通过叠加(Overlay)方式来管理不同环境的配置。

Helm

  • 功能:Kubernetes 的包管理工具,类似于 Linux 的 aptyum,支持应用打包、部署和版本控制。
  • 设计理念:通过模板化机制生成 Kubernetes 资源文件,从而实现灵活的动态配置。
  • 特点
    • 使用 Go 模板系统生成 YAML。
    • 提供版本化管理和打包机制(Charts)。
    • 支持参数化的配置传递。

2. 核心差异

特性/工具KustomizeHelm
模板化无模板,基于已有 YAML 文件直接修改。基于 Go 模板生成 YAML 文件。
学习成本低:只需掌握 YAML 和 kustomization 文件的规则。中:需要理解 Helm Charts 和模板语法。
复杂性简单,适合基础的配置修改和环境覆盖。功能强大,适合复杂的应用部署和动态场景。
部署不支持直接部署,需要配合 kubectl自带部署和管理功能(helm install 等)。
版本控制不支持版本控制,仅修改 YAML 配置。支持应用版本控制和回滚(helm rollback)。
依赖管理不支持依赖管理。内置依赖管理功能,可定义和安装依赖。
环境适配通过 Overlay 实现不同环境的配置覆盖。通过参数化和变量值文件(values.yaml)实现。
生态系统Kubernetes 内置支持,集成简单。生态系统成熟,拥有丰富的社区 Charts。

3. 使用场景

Kustomize 的适用场景

  1. 简单配置变更

    • 对现有的 YAML 资源文件进行环境适配,例如:
      • 修改镜像版本。
      • 覆盖资源限制(CPU、内存)。
      • 为不同环境(开发、测试、生产)设置不同的值。
  2. 已有 YAML 的二次修改

    • 你已经有完整的 YAML 配置文件,只需对其进行小范围调整,而不需要大规模重新定义。
  3. 原生 Kubernetes 集成

    • Kustomize 是 kubectl 原生集成的一部分,可以直接使用:
kubectl apply -k ./path/to/kustomization

Helm 的适用场景

  1. 复杂应用的部署与管理

    • 应用包含多个组件(例如 Deployment、Service、Ingress 等),需要通过模板化灵活定义。
  2. 参数化部署

    • 同一套 Helm Chart 可以通过不同的 values.yaml 部署到多个环境(开发、测试、生产)。
  3. 版本管理与回滚

    • 对应用的版本升级、回滚、历史跟踪有需求。
  4. 依赖管理

    • 应用需要依赖其他子 Chart(例如数据库、缓存服务等)。
  5. 社区 Chart 的复用

    • 直接使用已有的 Helm Chart(例如 NGINX、PostgreSQL、Prometheus 等),快速部署。

4. 示例比较

Kustomize 示例

基础 YAML 文件 (base/deployment.yaml)

apiVersion: apps/v1
kind: Deployment
metadata:name: my-app
spec:replicas: 1template:spec:containers:- name: my-appimage: nginx:1.16

环境覆盖文件 (overlays/production/kustomization.yaml)

resources:- ../../basepatches:- target:kind: Deploymentname: my-apppatch: |- op: replacepath: /spec/replicasvalue: 3

部署命令:

kubectl apply -k overlays/production

Helm 示例

Chart 目录结构

my-chart/
├── templates/
│   ├── deployment.yaml
│   └── service.yaml
├── values.yaml
└── Chart.yaml

模板文件 (templates/deployment.yaml)

apiVersion: apps/v1
kind: Deployment
metadata:name: {{ .Chart.Name }}
spec:replicas: {{ .Values.replicas }}template:spec:containers:- name: {{ .Chart.Name }}image: {{ .Values.image.repository }}:{{ .Values.image.tag }}

默认值文件 (values.yaml)

replicas: 1
image:repository: nginxtag: "1.16"

部署命令:

helm install my-app ./my-chart

覆盖配置部署:

helm install my-app ./my-chart --set replicas=3

5. 选择建议

  • 选择 Kustomize

    • 需要轻量级的工具进行简单的配置修改。
    • 希望完全控制 YAML 文件,并减少外部工具的依赖。
    • 对版本控制或复杂模板功能需求较低。
  • 选择 Helm

    • 应用的部署较复杂,包含多个组件。
    • 需要动态参数化和依赖管理。
    • 需要社区支持的预构建 Charts 或版本管理功能。

总结来说,Kustomize 更适合简单配置覆盖,而 Helm 更适合复杂的动态部署和包管理。在实际项目中,也可以将两者结合使用,例如用 Kustomize 管理生成的 Helm Charts 资源文件。

相关文章:

k8s 部署方式kustomization和helm的区别

Kustomize 和 Helm 是 Kubernetes 中两种流行的配置管理工具,它们都用于管理 Kubernetes 资源,但它们的设计理念、功能和适用场景有所不同。以下是两者的详细对比: 1. 基本概念 Kustomize 功能:原生于 Kubernetes 的工具&#x…...

Alogrithm:骑士走棋盘

1. 说明 骑士旅游(Knights tour)在十八世纪初倍受数学家与拼图迷的注意,它什么时候被提出已不可考,骑士的走法为西洋棋的走法,骑士可以由任一个位置出发,它要如何走完所有的位置? 2. 解法 骑士旅…...

Oracle 与 达梦 数据库 对比

当尝试安装了达梦数据库后,发现达梦真的和Oracle数据库太像了,甚至很多语法都相同。 比如:Oracle登录数据库采用sqlplus,达梦采用disql。 比如查看数据视图:达梦和Oracle都有 v$instance、v$database、dba_users等&a…...

[COLM 2024] V-STaR: Training Verifiers for Self-Taught Reasoners

本文是对 STaR 的改进方法,COLM 是 Conference On Language Models,大模型领域新出的会议,在国际上很知名,不过目前还没有被列入 ccf list(新会议一般不会列入);作者来自高校、微软研究院和 Goo…...

【Python】使用Selenium的find_element模块获取网页上的大段文字和表格的方法(建议收藏!)

发现了一个使用Selenium的find_element模块,快速获取文字和表格的方法,很实在,以后爬网的时候,就不用beautifulSoup 和 pandas的read_html 混起来用了! 文字部分:实现网络节点下,某个节点下的其…...

蓝桥杯刷题——day4

蓝桥杯刷题——day4 题目一题干题目解析代码 题目二题干题目解析代码 题目一 题干 小蓝和朋友们在玩一个报数游戏。由于今年是2024 年,他们决定要从小到大轮流报出是20或24倍数的正整数。前10个被报出的数是:20,24,40,48,60,72,80,96,100,120。请问第2…...

内网是如何访问到互联网(H3C源NAT)

H3C设备NAPT配置 直接打开29篇的拓扑,之前都配置好了 「模拟器、工具合集」复制整段内容 链接:https://docs.qq.com/sheet/DV0xxTmFDRFVoY1dQ?tab7ulgil 现在是出口路由器可以直接访问61.128.1.1,下面的终端访问不了,需要做NAPT源…...

源码分析之Openlayers中的Zoom缩放控件

概述 放大或缩小是地图中最基本的功能,本文主要介绍分析 Openlayers 中Zoom缩放控件的源码实现。 源码分析 Zoom控件继承Control类,关于Control类,可以参考这篇文章源码分析之Openlayers中的控件篇Control基类介绍 如果直接实例化Zoom类&…...

k8s的ConfigMap是什么, 为什么设计ConfigMap, 如何使用ConfigMap

ConfigMap简介, 为什么设计ConfigMap 在k8s中, ConfigMap是一种API对象, 用于将非机密的配置数据存储到键值对中。 Configmap作用是, 把配置数据从应用代码中分隔开, 让镜像和配置文件解耦,实现了镜像的可移植性。 举例: 我有一个Squid(正向代理)的Pod…...

fiddler设置抓取https,还抓取不到https如何解决?

一、清楚 C:\Users\Admin\AppData\Roaming\Microsoft\Crypto\RSA 目录下所有文件(首次安装fiddler请忽略) 二、清除电脑上的根证书,WINR快捷键,输入:certmgr.msc, 然后回车,查找所有fiddler证书…...

Python高性能web框架-FastApi教程:(1)创建一个简单的FastApi

(1)创建一个简单的FastApi 1. 导入必要的库 from fastapi import FastAPI import uvicornFastAPI 是一个用于构建现代、快速(高性能)的Web API的Python框架。uvicorn 是一个ASGI服务器,用于运行异步的Python Web应用…...

Django基础之模板

一.前言 前面我们讲了视图,我们今天来讲一下模板,模板其实也就是视图中render返回的html进行的渲染,然后展示到浏览器页面上去,那我们今天就来和大家来说一下模板的基本用法 二.寻找html模板 这个也就是我们前面说了的找html&a…...

RabbitMQ Work Queues (工作队列模式) 使用案例

Hi~!这里是奋斗的明志,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~ 🌱🌱个人主页:奋斗的明志 🌱🌱所属专栏:RabbitMQ 📚本系列文章为个人学…...

C#高级:Winform桌面开发中TreeView的基础例子

一、方案一&#xff1a;免递归使用树 namespace WinFormsApp1 {public partial class Form1 : Form{public Form1(){InitializeComponent();}/// <summary>/// 自定义树实体/// </summary>public class WinFormTree{/// <summary>/// 标签名称/// </summ…...

大模型的文件有哪些?

在大模型仓库&#xff08;如Hugging Face&#xff09;中&#xff0c;例如&#xff1a;https://modelscope.cn/models/ZhipuAI/glm-4-9b-chat/files&#xff0c;通常会发现以下几类文件&#xff1a; 模型权重文件&#xff1a;存储训练好的模型参数&#xff0c;是模型推理和微调…...

QT 国际化(翻译)

QT国际化&#xff08;Internationalization&#xff0c;简称I18N&#xff09;是指将一个软件应用程序的界面、文本、日期、数字等元素转化为不同的语言和文化习惯的过程。这使得软件能够在不同的国家和地区使用&#xff0c;并且可以根据用户的语言和地区提供本地化的使用体验。…...

C 进阶 — 指针的使用

C 进阶 — 指针的使用 主要内容 1、字符指针 2、数组指针 3、指针数组 4、数组传参和指针传参 5、函数指针 6、函数指针数组 7、指向函数指针数组的指针 8、 回调函数 9、指针和数组练习题 前节回顾 1、指针就是个变量&#xff0c;用来存放地址&#xff0c;地址唯一…...

【经验分享】容器云运维的知识点

最近忙于备考没关注&#xff0c;有次点进某小黄鱼发现首页出现了我的笔记还被人收费了 虽然我也卖了一些资源&#xff0c;但我以交流、交换为主&#xff0c;笔记都是免费给别人看的 由于当时刚刚接触写的并不成熟&#xff0c;为了避免更多人花没必要的钱&#xff0c;所以决定公…...

MFC学习笔记专栏开篇语

MFC&#xff0c;是一个英文简写&#xff0c;全称为 Microsoft Foundation Class Library&#xff0c;中文翻译为微软基础类库。它是微软开发的一套C类库&#xff0c;是面向对象的函数库。 微软开发它&#xff0c;是为了给程序员提供方便&#xff0c;减少程序员的工作量。如果没…...

电子科技大学《高级算法设计与分析》期末复习问题汇总(客观题-选择题、判断题)

电子科技大学《高级算法设计与分析》问题汇总_已知背包问题的动态规划算法时间复杂度为o(nw),其中n为物品数目,w为背包容量。请-CSDN博客 转载自上面这个链接&#xff0c;古希腊掌管成电专业课的神&#xff01;&#xff01;为了防止他的链接失效&#xff0c;自己也转存一份 &…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python&#xff5c;GIF 解析与构建&#xff08;5&#xff09;&#xff1a;手搓截屏和帧率控制 一、引言 二、技术实现&#xff1a;手搓截屏模块 2.1 核心原理 2.2 代码解析&#xff1a;ScreenshotData类 2.2.1 截图函数&#xff1a;capture_screen 三、技术实现&…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型&#xff1a;架构设计与关键步骤 在当今数字化转型的浪潮中&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中&#xff0c;不仅可以优化用户体验&#xff0c;还能为业务决策提供…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解

本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

ElasticSearch搜索引擎之倒排索引及其底层算法

文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

C++使用 new 来创建动态数组

问题&#xff1a; 不能使用变量定义数组大小 原因&#xff1a; 这是因为数组在内存中是连续存储的&#xff0c;编译器需要在编译阶段就确定数组的大小&#xff0c;以便正确地分配内存空间。如果允许使用变量来定义数组的大小&#xff0c;那么编译器就无法在编译时确定数组的大…...

Java + Spring Boot + Mybatis 实现批量插入

在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法&#xff1a;使用 MyBatis 的 <foreach> 标签和批处理模式&#xff08;ExecutorType.BATCH&#xff09;。 方法一&#xff1a;使用 XML 的 <foreach> 标签&#xff…...