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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

爱情再启:庄国栋笑谈“玫瑰人生”爱情觉悟

庄国栋,这位电视剧《玫瑰的故事》中的男主角, 最近在一次采访中坦言:“如果给我一次重来的机会, 我绝对会毫不犹豫地选择爱情!” 听到这话, 我不禁想,庄先生,您是不是被剧里的玫瑰…

PotPlayer安装及高分辨率设置

第1步: 下载安装PotPlayer软件 PotPlayer链接:https://pan.baidu.com/s/1hW168dJrLBonUnpLI6F3qQ 提取码:z8xd 第2步: 下载插件,选择系统对应的位数进行运行,该文件不能删除,删除后将失效。 …

(单机架设教程)凯旋|当年的QQ游戏

前言 今天给大家带来一款单机游戏的架设:凯旋 , 当年的QQ游戏 如今市面上的资源参差不齐,大部分的都不能运行,本人亲自测试,运行视频如下: 凯旋单机 搭建教程 此游戏架设需要安装虚拟机, 没有…

pytest测试框架pytest-cov插件生成代码覆盖率

Pytest提供了丰富的插件来扩展其功能,本章介绍下pytest-cov插件,用于生成测试覆盖率报告,帮助开发者了解哪些部分的代码被测试覆盖,哪些部分还需要进一步的测试。 pytest-cov 支持多种报告格式,包括纯文本、HTML、XML …

什么是 Elasticsearch 数据预热?

引言:在现代的信息检索和数据分析领域,Elasticsearch 已经成为一个广泛应用的分布式搜索和分析引擎。作为开源项目的一部分,Elasticsearch 提供了强大的实时搜索和分析能力,使得处理大规模数据变得更加高效和可靠。然而&#xff0…

GPT-5 一年半后发布,对此你有何期待?

IT之家6月22日消息,在美国达特茅斯工程学院周四公布的采访中,OpenAI首席技术官米拉穆拉蒂被问及GPT-5是否会在明年发布,给出了肯定答案并表示将在一年半后发布。此外,穆拉蒂在采访中还把GPT-4到GPT-5的飞跃描述为高中生到博士生的…

在线教育项目(一):如何防止一个账号多个地方登陆

使用jwt做验证,使用账号作为redis中的key,登录的时候生成token放到redis中,每次申请资源的时候去看token 有没有变,因为token每次登录都会去覆盖,只要第二次登录token就不一样了

在我们的大数据平台(XSailbaot)上进行企业级数据建模的思路

1. 背景 笔者所在的公司是差不多二十年前搞CIM(公共信息模型的)起家的。当时公司的前辈搞了基于CIS协议的模型服务器、数据服务器、模式编辑器等,形成了一套基于公共信息模型建模的平台系统。其中可视化建模,建好了模式类以后&am…

SA 注册流程

目录 1. UE开机后按照3GPP TS 38.104定义的Synchronization Raster搜索特定频点 2.UE尝试检测PSS/SSS,取得下行时钟同步,并获取小区的PCI;如果失败则转步骤1搜索下一个频点;否则继续后续步骤; 3.解析Mib,…

设计NOR Flash(SPI接口)的Flashloader(MCU: stm32f4)

目录 概述 1 软硬件 1.1 软硬件信息表 1.2 NOR Flash芯片(W25Q64BVSSI) 1.2.1 W25Q64BVSSI芯片介绍 1.2.2 NOR Flash接口 1.3 MCU与NOR Flash接口 2 SPI Flash功能实现 2.1 软件框架结构 2.2 代码实现 2.2.1 Dev_Inf文件 2.2.2 W25QXX驱动程…

区间动态规划——最长回文子串(C++)

难得心静。 ——2024年6月30日 什么是区间动态规划? 区间动态规划通常以连续区间的求解作为子问题,例如区间 [i, j] 上的最优解用dp[i][j]表示。先在小区间上进行动态规划得到子问题的最优解,再利用小区间的最优解合并产生大区间的最优解。 …

娱乐圈发生震动,AI大模型技术已经取代了SNH48的小偶像?

自2023年以来,全球都被包裹在AI的惊天大潮之中,所有行业都在主动或被动地迎接改变。目前,各行业已经有大量公司正在把AI作为自身发展的最佳路径。其中,娱乐行业作为最被人们熟知的行业也在面对AI的发展时,发生着巨大变…

视频共享融合赋能平台LntonCVS统一视频接入平台数字化升级医疗体系

医疗健康事关国计民生,然而,当前我国医疗水平的地区发展不平衡、医疗资源分布不均和医疗信息系统老化等问题,制约了整体服务能力和水平的提升。视频融合云平台作为推动数字医疗的关键工具,在医疗领域的广泛应用和普及,…

统计信号处理基础 习题解答11-1

题目 观测到的数据具有PDF 在μ给定的条件下,是相互独立的。均值具有先验PDF: 求μ的 MMSE 和 MAP 估计量。另外,当和时将发生什么情况? 解答 和两者都是独立高斯分布,与例题10.1一致,直接套用(10.11&am…

RedisAtomicInteger并发案例

🍰 个人主页:__Aurora__ 🍞文章有不合理的地方请各位大佬指正。 🍉文章不定期持续更新,如果我的文章对你有帮助➡️ 关注🙏🏻 点赞👍 收藏⭐️ RedisAtomicInteger 提供了对整数的原子性操作&a…

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

14天 本节学了基于MindNLPMusicGen生成自己的个性化音乐。 MusicGen是来自Meta AI的Jade Copet等人提出的基于单个语言模型的音乐生成模型,能够根据文本描述或音频提示生成高质量的音乐样本。 MusicGen模型基于Transformer结构,可以分解为三个不同的阶段…

C++: 如何用C语言实现C++的虚函数机制?

前言 在 googletest的源码中,看到gtest-matchers.h 中实现的MatcherBase 类自定义了一个 VTable,这种设计实现了一种类似于C虚函数的机制。C中的虚函数机制实质上就是通过这种方式实现的,本文用c语言自定义虚函数表VTable实现了一下virtual的…

等保主机测评防骗指南(资产调研)

你是否测评时常被运维给忽悠?是否觉得以下的对话耳熟? 你:您好,请问你们的主机资产有哪些,包括服务器、数据库、中间件、应用系统等。 甲:我们资产就这两台服务器,数据库什么的都这上面&#…

OpenGL3.3_C++_Windows(25)

阴影失真:阴影的不真实感 条纹样式: 首先理解采样原理:同光的视角下,渲染一张深度图,每个像素,存储同一射线下的深度值(不断更新深度缓冲的结果),即最近片段的深度。接着&#xff0…

hadoop词频统计

1 Hadoop 安装与伪分布的搭建 2 Hadoop词频统计 此文章基于搭建好hadoop之后做的词频统计实验,以上是链接为搭建hadoop的教程 目录 1 HDFS 文件系统常用命令 2 词频统计实验准备工作 2.1 启动hadoop 关闭防火墙 2.2 查看图形化界面 2.3 文件上传 3 词频统计…