k8s笔记——helm chat与k8s Operator区别

news2025/2/26 7:06:22

k8s Operator

Kubernetes 为自动化而生。无需任何修改,你即可以从 Kubernetes 核心中获得许多内置的自动化功能。 你可以使用 Kubernetes 自动化部署和运行工作负载,甚至 可以自动化 Kubernetes 自身。

Kubernetes 的 Operator 模式概念允许你在不修改 Kubernetes 自身代码的情况下, 通过为一个或多个自定义资源关联控制器来扩展集群的能力。 Operator 是 Kubernetes API 的客户端, 充当自定义资源的控制器。

自定义资源

Kubernetes 中的自定义资源是对 Kubernetes API 的扩展,它使向 Kubernetes 集群添加默认情况下不可用的功能成为可能。您可以通过创建自定义资源定义(CRD)来实现这一点。

如果要使用 Kubernetes Operator 来安装或管理应用程序,您可以创建实现该应用程序所需功能的 CRD。如果您随后将 CRD 与 Operator 的控制器组合,Kubernetes 控制器例程将检测并部署它。

Operator示例

想要更详细的了解 Operator?下面是一个示例:

  1. 有一个名为 SampleDB 的自定义资源,你可以将其配置到集群中。
  2. 一个包含 Operator 控制器部分的 Deployment,用来确保 Pod 处于运行状态。
  3. Operator 代码的容器镜像。
  4. 控制器代码,负责查询控制平面以找出已配置的 SampleDB 资源。
  5. Operator 的核心是告诉 API 服务器,如何使现实与代码里配置的资源匹配。
    • 如果添加新的 SampleDB,Operator 将设置 PersistentVolumeClaims 以提供持久化的数据库存储, 设置 StatefulSet 以运行 SampleDB,并设置 Job 来处理初始配置。
    • 如果你删除它,Operator 将建立快照,然后确保 StatefulSet 和 Volume 已被删除。
  6. Operator 也可以管理常规数据库的备份。对于每个 SampleDB 资源,Operator 会确定何时创建(可以连接到数据库并进行备份的)Pod。这些 Pod 将依赖于 ConfigMap 和/或具有数据库连接详细信息和凭据的 Secret。
  7. 由于 Operator 旨在为其管理的资源提供强大的自动化功能,因此它还需要一些额外的支持性代码。 在这个示例中,代码将检查数据库是否正运行在旧版本上, 如果是,则创建 Job 对象为你升级数据库。

部署 Operator

部署 Operator 最常见的方法是将自定义资源及其关联的控制器添加到你的集群中。 跟运行容器化应用一样,控制器通常会运行在控制平面之外。 例如,你可以在集群中将控制器作为 Deployment 运行。

使用 Operator

部署 Operator 后,你可以对 Operator 所使用的资源执行添加、修改或删除操作。 按照上面的示例,你将为 Operator 本身建立一个 Deployment,然后:

kubectl get SampleDB                   # 查找所配置的数据库

kubectl edit SampleDB/example-database # 手动修改某些配置

可以了!Operator 会负责应用所作的更改并保持现有服务处于良好的状态。

编写你自己的 Operator

如果生态系统中没有可以实现你目标的 Operator,你可以自己编写代码。

你还可以使用任何支持 Kubernetes API 客户端的语言或运行时来实现 Operator(即控制器)。

以下是一些库和工具,你可用于编写自己的云原生 Operator。

  • Charmed Operator Framework
  • Java Operator SDK
  • Kopf (Kubernetes Operator Pythonic Framework)
  • kube-rs (Rust)
  • kubebuilder ★
  • KubeOps (.NET operator SDK)
  • Mast
  • Metacontroller,可与 Webhook 结合使用,以实现自己的功能。
  • Operator Framework ★
  • shell-operator

现成的Operator

在 OperatorHub.io 上找到现成的、适合你的 Operator

OperatorHub.io is a new home for the Kubernetes community to share Operators. Find an existing Operator or list your own today.

Kubernetes Operator与Helm的11个关键区别

如果您已经阅读到这里,那么您知道 Kubernetes Operator 和 Helm Chart 都可实现相同的目标: 安装和管理应用程序。两者也都可用于部署帮助 Kubernetes 故障排除和监控的工具。

但是 Kubernetes Operator 和 Helm Chart 通过稍微不同的方式实现这些目标。以下是 Operator 和 Helm Chart 的主要区别。

1. 范围和功能

总体来说,Helm Chart 范围更窄。Helm Chart 的主要目的是安装标准应用程序,也就是那些可以根据现有容器镜像运行的应用程序。如果您需要运行依赖特殊 Kubernetes API 扩展的自定义应用程序,那么 Helm 就不是一个好的解决方案,不过您可以为此目的使用 Operator。

类似地,在配置方面 Helm 提供的灵活性更少。您可以在安装 Chart 时向 Helm 传递参数以配置应用程序,但只有在 Chart 被设计为支持这些参数时才行。

相比之下,使用 Kubernetes Operator,在定制应用程序方面,天空——或者更确切地说,您编写的代码——就是极限。

2. 复杂性和灵活性

与 Helm 相比,Operator 增加的灵活性所带来的代价是 Operator 也更复杂。创建 Operator 需要编写 CRD,而您可以根据一些相对简单的 YAML 代码创建 Helm Chart。

此外,从安装的角度来看,Helm 不太复杂,因为您可以用一个命令就安装它。 安装 Operator 通常需要运行长的 kubectl 命令。

3. 定制化

如前所述,Operator 提供了更大的定制化空间,因为您可以实现 CRD 支持的任何功能。 Helm Chart 的某些配置方面是可以定制的,但仅当创建 Helm Chart 的开发人员在构建 Chart 时实现了配置选项。

这里的区别有点像从源代码构建标准应用程序和使用包安装应用程序之间的区别。当您从源代码构建时,您可以修改源代码以自定义应用程序。 但如果您使用包进行安装,则只能修改包管理系统和环境支持的配置选项。

4. 云成本考量

因为 Chart 的定制性通常不如 Operator,所以它们更容易给您的环境带来冗余。 Helm Chart 可能会安装和运行您严格意义上不需要的应用程序特性,除非您重写整个 Chart,否则可能没有办法关闭这些特性。相比之下,使用 Operator,您可以精确控制哪些特性需要运行。

因此,使用 Chart 安装的应用程序更有可能消耗更多资源,从而增加云成本。总体来说,与内存泄漏或浪费 CPU 的有缺陷代码等问题相比,这对您的云端总支出的影响要小得多,但如果您想优化成本,这仍值得考虑。

5. 学习曲线

可以肯定,几乎每个人都会觉得学习使用 Helm 比学习 Operator 更简单。Chart 的工作方式与任何类型的软件包非常相似,所以如果您在其他上下文中使用过软件包,应该可以很快掌握 Helm。

相比之下,Operator 基于 Kubernetes 的独有概念。在您完全理解像控制器和 CRD 这样的关键 Kubernetes 概念之前,您不应该期望理解 Operator 的工作原理,更不用说创建或修改 Operator 了。

6. 自动化

Operator 和 Chart 都可以帮助自动执行您否则必须手动执行的应用程序安装和管理任务。但是,由于 Helm 的范围仅限于管理标准应用程序,所以它不提供太多自动化功能。

您可以使用 Helm 根据容器镜像自动安装或更新应用程序,但您无法自动执行超出 Helm 原生功能范围的定制应用程序配置更改。但是,使用 Operator,您可以自动执行 Kubernetes API 和控制器支持的任何操作。

7. 生命周期管理

Operator 和 Chart 在支持应用程序生命周期管理方面有共同之处,那就是您可以使用它们来安装、更新和删除应用程序。但是,使用 Helm 进行的生命周期管理有点过于简单粗暴,调整不太细致。

要使用 Helm 管理应用程序生命周期,您只能使用内置的命令,如 install、upgrade 和 uninstall。您可以使用新版本替换旧版本的应用程序,或者完全删除应用程序。但是,如果不升级整个应用程序,您就无法对现有应用程序进行细微修改,而通过修改应用程序的 Operator 就可以做到这一点。

8. 维护

同样,在应用程序维护方面,Operator 提供了更大的灵活性和控制能力。如果您只是想升级或删除应用程序,可以使用 Helm 来完成。但是如果您想执行其他应用程序维护任务,如修改应用程序的存储配置,除非您创建一个新的 Helm Chart 并使用它重新安装应用程序,否则 Helm 并无益处。不过,使用 Operator 就可以进行更细粒度的维护更改。

9. 使用案例

总的来说,Operator 支持的使用案例比 Helm 更广泛。后者只擅长应用程序的安装、升级和删除。Operator 可以做到这些,但它们还支持应用程序备份等使用案例。

10. 适合 GitOps

GitOps 意味着使用存储在 Git 仓库中的代码来管理对应用程序部署和基础设施的更改。如果您在 Git 中存储应用程序和基础设施的配置数据,就可以从那里自动将配置推送到生产环境。您还可以根据 Git 中的代码版本历史记录跟踪对资源的更改。
在这里插入图片描述

由于您可以在 Git 中存储 Operator 和 Chart 的代码,两种解决方案都与 GitOps 方法论兼容。也就是说,可以认为当与 Operator 一起使用时,GitOps 提供更多好处,因为您可以对 Operator 进行的更改范围更广。从这个意义上说,能够以细粒度方式跟踪更改更有价值。使用 GitOps,对 Operator 中的一行代码的更改就很容易跟踪 - 如果您更改了 Operator,某些事情发生故障,并且您想找出触发问题的更改,那么这可能很有用。

11. 社区和生态系统

Operator 和 Helm 都拥有强大的社区和生态系统。在 OperatorHub.io 和 Artifact Hub 等网站上可以轻松找到公开可用的 Operator 和 Helm Chart。两种解决方案的丰富文档也可以免费获得。

也就是说,就社区参与而言,Operator 和 Helm 之间的一个重要区别在于,Helm 是一个开源项目,拥有自己的一套官方资源,而 Operator 没有专门的项目(尽管 Kubernetes 项目维护着其文档)。从这个意义上说,Helm 有一个特定的“官方”社区,但 Operator 没有。

Kubernetes Operator与Helm: 该选择哪一个?

对于“应该选择 Operator 还是 Helm?”这个问题,有两种方法。它们取决于您是要将应用程序分发给其他用户,还是仅仅想安装一个应用程序。

应用分发
考虑因素选择什么
无状态应用程序Helm Chart
需要定制的应用程序Operator
用户的 Kubernetes 经验有限Helm Chart
需要支持复杂的维护Operator

如果您正在分发一个应用程序,当以下条件满足时,请选择 Helm Chart:

  • 您的应用程序很简单。
  • 配置相对简单(或者您不需要在安装时支持太多配置选项)。
  • 您希望为用户提供尽可能简单的安装体验。
  • 您的应用程序是无状态的,并且不需要特殊配置。

如果满足以下条件,Operator 是一个更好的选择:

  • 您的应用程序需要特殊的功能或配置(如复杂的有状态存储),这些功能或配置若不使用 CRD 就难以或无法实现。
  • 您想要自动化除应用安装或生命周期管理之外的其他流程(如应用备份)。
应用安装
考虑因素选择什么
没有可用的 Helm ChartOperator
简单安装是首要任务Helm Chart
您的 Kubernetes 经验有限Helm Chart
您想要定制该应用Operator

如果您作为用户要在 Kubernetes 上安装一个应用程序,您应该首先检查该应用程序是否存在 Operator 和/或 Helm Chart。许多项目同时提供两者,但如果只有其中一个可用,那么如何安装该应用程序的问题就解决了:使用任何存在的东西。

如果您同时找到了 Operator 和 Chart,如果满足以下条件,请选择 Helm:

  • 您想要简单的安装体验。
  • 您不需要定制该应用。

如果您已经熟悉 Operator,并且/或者您需要以 Helm 无法实现的方式定制该应用,则 Kubernetes Operator 更具优势。

总结

有时,使用 Operator 而不是 Helm 并没有明确的优势,反之亦然。毕竟,两种解决方案支持大多数相同的用例。

但在底层,Operator 更复杂和可定制化,这对于高级应用程序安装或维护任务来说是一个优势。对于更简单的需求,Helm Chart 通常是更好的解决方案。

参考资料

kubernetes-operator-vs-helm

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

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

相关文章

10位时间戳、13位时间戳、17位时间戳,以及在JavaScript中的格式转换

一、介绍 1、10位时间戳 2、13位时间戳 3、17位时间戳 4、时间戳转换工具 二、13位时间戳的转换 1、转标准日期 2、转格式化日期 三、10位时间戳的转换 1、转标准日期 2、转格式化日期 四、17位时间戳的转换 1、解析思路 2、解析过程 3、完整代码 4、新的问题 …

【学习笔记】Redis学习笔记——第5章 跳跃表

第5章 跳跃表 有序集合,ZSet关键组成部分,时间复杂度媲美平衡树,且实现简单。 5.1 跳跃表的实现 可以简单理解为每个节点会有一些指向后面跨越N个节点的指针,比如说Node1不仅有指向Node2的指针,还可以有Node5的&…

【分布式计算框架 MapReduce】高级编程—搜索日志数据分析

目录 一、对于 sogou_500w_utf 数据,使用 MapReduce 编程模型完成对以下数据的分析任务 1. 统计 2011-12-30 日搜索记录,每个时间段的搜索次数 (1)运行截图 (2) 源代码 2. 统计 2011-12-30 日 3 点至 …

SCCB协议介绍,以及与IIC协议对比

在之前的文章里已经介绍了IIC协议:iic通信协议 这篇内容主要介绍一下SCCB协议。 文章目录 SCCB协议:SCCB时序图iic时序图SCCB时序 VS IIC时序 总:SCCB协议常用在摄像头配置上面,例如OV5640摄像头,和IIC协议很相似&…

Kubernetes Artemis系列 | 使用 ArtemisCloud Operator 部署 artemis

目录 一、ArtemisCloud Operator 介绍二、部署ArtemisCloud Operator三、使用 ArtemisCloud Operator 部署 artemis四、管理队列五、缩减规模时消息迁移 一、ArtemisCloud Operator 介绍 ArtemisCloud Operator 是一个用于管理和部署云端基础设施的工具。它基于 Kubernetes 平…

ArtTS系统能力-通知的学习(3.1)

上篇回顾: ArtTS语言基础类库-容器类库内容的学习(2.10.2) 本篇内容: ArtTS系统能力-通知的学习(3.1) 一、 知识储备 1. 基础类型通知 按内容分成四类: 类型描述NOTIFICATION_CONTENT_BASIC_TEXT普通文…

大物3错题整理

平衡位置:在O点上的位置 相位: 当N很大的时候,wxwywz。因此,平均平动动能除以3,就是能量均分定理。 W F在x上的积分 Π时无单位 180,就是单位 1rad,rad就是单位 左手定则、右手定则、安培定…

金融科技如何多角度助力小微企业融资

一、引言 在全球化与数字化交织的时代背景下,金融科技(FinTech)作为新兴力量,正逐步改变传统的金融业态,尤其在助力小微企业融资方面,金融科技展现出了多元化的价值和优势。本文将从不同角度探讨金融科技如…

数据同步软件有哪些

数据同步软件有哪些呢?随着企业规模的扩大,企业数据也积累得越来越多,万一发生宕机风险,那么这个损失将不可估量。所以为了容灾备用,我们往往需要将数据同步到另一台备胎服务器上,进行冗余。 那么需要同步的…

适配手机《植物大战僵尸杂交版》最新整合包,附Android、iOS、Windows保姆级教程和工具合集!

最近,新版的《植物大战僵尸杂交版》火爆全网啊!许多小伙伴不知道手机和电脑怎样安装设置才能畅玩《杂交版》,所以今天阿星特意为大家准备了一份安装工具集。 里面有安卓、iOS及电脑端的安装包,包含安装视频教程、修改器、防闪退、…

论文阅读《One-Step Image Translation with Text-to-Image Models》

Abstract. 在这项工作中,我们解决了现有条件扩散模型的两个局限性:迭代去噪过程导致的推理速度慢,以及模型微调对配对数据的依赖。为了解决这些问题,我们引入了一种通用方法,通过对抗学习目标将单步扩散模型适应新任务…

【C++】string基本用法(常用接口介绍)

文章目录 一、string介绍二、string类对象的创建(常见构造)三、string类对象的容量操作1.size()和length()2.capacity()3.empty()4.clear()5.reserve()6.resize() 四、string类对象的遍历与访问1.operator[ ]2.正向迭代器begin()和end()3.反向迭代器rbeg…

昇思25天学习打卡营第10天 | 基于MindNLP+MusicGen生成自己的个性化音乐

基于MindNLPMusicGen生成自己的个性化音乐 MusicGen是来自Meta AI的Jade Copet等人提出的基于单个语言模型(LM)的音乐生成模型,能够根据文本描述或音频提示生成高质量的音乐样本,相关研究成果参考论文《Simple and Controllable …

Keepalive技术

文章目录 一、Keepalive基础vrrp技术Keepalived介绍Keepalived架构 二、 Keepalived 相关文件配置文件组成全局配置虚拟路由器配置 三、配置lvs和keepalive联动服务器架构抢占模式配置配置单播、组播配置通知模块日志功能脑裂现象 四、keepalived和nginx联动keepalive和其他应用…

html文章卡片

完成效果 中医网站的文本卡片制作,其中用到了grid布局 css基础知识回顾 阴影样式 好的阴影样式可以保存 box-shadow: 6px 6px 5px hsla(0, 0%, 0%, 0.02), 25px 25px 20px hsla(0, 0%, 0%, 0.03), 100px 100px 80px hsla(0, 0%, 0%, 0.05); grid-template-column…

Python的numpy简单使用

1.可以调用引入numpy里面的函数,如add可以把俩数相加,也可以创建一个数组arr,arr.shape是数组arr的属性,如果后有跟()就是里面的一个函数 type()函数可以知道里面是什么类型 变量.shape可以知道这个变量是…

这些并发编程技术你都知道吗?

与其碌碌无为,不如兴风作浪。 虽然不是所有的系统都需要很多的并发编程技术,但是掌握常见的高并发秘籍,便能让我们的系统快起来,面对访问量的剧增从容应对。 接下来,为我们一起来看看常见的高并发技术有哪些。总结起来…

NAS教程丨铁威马如何登录 SSH终端?

适用型号: 所有TNAS 型号 如您有特殊操作需要通过 SSH 终端登录 TNAS,请参照以下指引: (注意: 关于以下操作步骤中的"cd /"的指令,其作用是使当前 SSH/Telnet 连接的位置切换到根目录,以免造成对卷的占用.请不要遗漏它.) Windows…

Django 对模型创建的两表插入数据

1,添加模型 Test/app8/models.py from django.db import modelsclass User(models.Model):username models.CharField(max_length50, uniqueTrue)email models.EmailField(uniqueTrue)password models.CharField(max_length128) # 使用哈希存储密码first_name …

Excel 数据筛选难题解决

人不走空 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 目录 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌…