Kubernetes Operator 是什么,以及它们的用途

news2025/4/16 11:03:19

最近一个朋友问我关于EKS的升级问题:

场景:

如果我有 100 个 EKS 集群需要升级,那么所有集群都安装了安全插件。由于我不想在升级后手动在每个EKS中重复安装此插件,如何实现EKS升级后自动安装这个安全插件?

答案有多种方法,AWS CLI , shell command。这些方法都可以实现此任务,但是它们并没有充分发挥kubernetes的优势,我们可不可以通过Kubernetes Operator来实现此任务?回答此问题之前,我们先回顾一下它的定义。

什么是 Kubernetes Operator?


Operator 概念由 CoreOS Linux(后来的 Container Linux)开发团队于 2016 年提出。

Kubernetes 项目对“Operator”的定义很简单:“Operator 是使用自定义资源来管理应用程序及其组件的软件扩展”。换句话说,使用 Operator 使我们能够将应用程序视为一个单一对象,该对象仅公开对应用程序有意义的调整,而不是一组原语(例如 Pod、Deployment、Service 或 ConfigMap)。

此外,Operator 实际上允许在 Kubernetes 集群中运行的软件自动执行典型的初始任务(安装、配置等)和后续任务(重新配置、升级、备份、故障转移、恢复等),并与 Kubernetes 概念和 API 原生集成。

这就是为什么它们被称为“原生 Kubernetes 应用程序”,并且这个定义也可以从另一个更具操作性的角度来看待。 K8s Operator 是用于在 Kubernetes 上打包、管理和部署应用程序的控制器。为了实现这些功能,Operator 使用自定义资源 (CR),通过自定义资源定义 (CRD) 定义特定应用程序所需的配置和状态。

Operator 的作用是使用控制循环将应用程序的实际状态与 CRD 所需的状态进行协调,从而自动扩展、更新或重启应用程序。实际上,Kubernetes 提供了一些基本命令和原语,Operator 可以使用它们来定义更复杂的操作。

最终,Operator 是运行在集群中并通过 Kubernetes API 交互的实际程序,用于自动执行比 Kubernetes 原生处理的功能更复杂的功能。

Operator 非常有用,因为它们是特定于应用程序的控制器,可以扩展 Kubernetes API 的功能。换句话说,Operator 教会了 Kubernetes 一些新技巧。但它们具体有哪些好处呢?让我们来看看它们的主要优势。

  1. Operator 使得 Kubernetes 的功能不仅仅限于无状态应用程序,还可以扩展到有状态应用程序。仅凭这一点就足以说明它的重要性,因为有状态的云应用程序和服务的管理比无状态应用程序复杂得多。一些有状态的 Operator 包括:用于监控解决方案的 Prometheus Operator 和用于管理高可用性 PostgreSQL 数据库集群的 Postgres Operator。
  2. Operator 标准化了手动操作,并创建了通用且一致的自动化方法。
  3. Operator 可以轻松地从一个环境迁移到另一个环境,从一个项目迁移到另一个项目。这使得一个包含更多通用 Operator 的生态系统得以形成​​,这些 Operator 可以下载、配置并用于不同的项目,而无需内部开发。

Kubernetes Operator 示例


Operator 模式已被广泛采用。许多流行的开源项目都提供了官方或社区主导的 Operator,这使得在您的堆栈中部署常用的软件组件变得更加容易。让我们来看看另外三个更突出的示例。

Postgres Operator


例如,Postgres Operator 允许您应用以下清单来启动一个 Postgres 部署,该部署包含 1 Gi 的持久存储、自动服务发现和预配置的数据库用户帐户:

apiVersion: acid.zalan.do/v1
kind: postgresql
metadata:
  name: postgres-cluster
spec:
  volume:
    size: 1Gi
  numberOfInstances: 3
  users:
    demo-user:
      - superuser
      - createdb
  databases:
    demo-user: demo-db
  postgresql:
    version: "15"

Operator 会在部署中创建 StatefulSet、Service 和 Volume,但人工管理员无需了解这些细节。他们只需提供相关参数来配置 Postgres 实例即可。

MySQL Operator


MySQL Operator for Kubernetes 是用于在 Kubernetes 中部署 MySQL 的官方解决方案。与上面显示的 Postgres Operator 类似,它允许您通过向集群添加 InnoDBCluster 对象来配置新的 MySQL 数据库实例。

Operator 通过创建适当的 Kubernetes 对象(例如 StatefulSet 和服务)自动管理数据持久化、网络发现和流量路由。它旨在适应整个数据库生命周期,包括未来的 MySQL 升级和到外部对象存储系统的计划备份。

安装 Operator 后,您可以通过将三行 YAML 清单应用于集群来部署新的 MySQL 实例:

apiVersion: mysql.oracle.com/v2
kind: InnoDBCluster
metadata:
  name: demo-db
spec:
  secretName: mysql-creds
  tlsUseSelfSigned: true
  instances: 3
  router:
    instances: 1

在使用此示例之前,您应该按照文档中的指导使用数据库用户名和密码创建 mysql-creds 密钥。

datadog operator

kind: DatadogAgent
apiVersion: datadoghq.com/v2alpha1
metadata:
  name: datadog
spec:
  global:
    site: us5.datadoghq.com
    credentials:
      apiSecret:
        secretName: datadog-secret
        keyName: api-key
      appSecret:
        secretName: datadog-secret
        keyName: app-key
  override:
    clusterAgent:
      image:
        name: gcr.io/datadoghq/cluster-agent:latest
    nodeAgent:
      image:
        name: gcr.io/datadoghq/agent:latest

在使用此示例之前,您应该按照文档中的指导使用api-key和app-key创建 datadog-secret密钥。

Kubernetes Operator:一些示例


目前,有两个官方应用程序可以轻松搜索现有的 Operator:

Artifact HUB – 我们在这里可以找到 Operator 和 Helm Chart(CNCF 项目)
Operator Hub – 专为 Operator 打造(Redhat 项目)
Operator 使我们能够找到各种不同问题的解决方案。我们不会列出所有 Operator,而是从一些需要解决的情况开始,并给出一些示例。

您想监控您的集群吗?


kube-prometheus 技术栈为您提供了一个高效的 Kubernetes 集群端到端监控解决方案。它包含 Kubernetes 清单、Grafana 仪表板、Prometheus 规则以及文档和脚本,并利用 Prometheus Operator 提供用户友好的监控体验。

您想自动化 TLS 证书管理吗?


在这种情况下,我们可以使用 Kubernetes Cert-manager Operator,它允许我们获取由集群中配置的一系列证书颁发机构颁发的 SSL 证书。此解决方案允许我们动态地从每个颁发机构请求新证书,并在服务生命周期中自动使用它们。

您想自动化基于 ISTIO 的服务网格管理吗?


使用 Istio Operator,我们可以自动安装、更新和排查 Istio 冲突。此 Operator 的先决条件很少(实际上只需要 istioctl),并且允许安装和验证所有 API。

当在 DevOps 和 SRE 场景中使用时,此 Operator 可以从一开始就自动化 Kubernetes 集群中使用的微服务的网格管理:管理、编排、安全、通信和监控。之后,可以以非侵入式的方式完善此初始实现。

在公有云上自动创建资源


Crossplane 是一个 Kubernetes Operator,它通过将由 crossplane 提供商提供的一组 CRD 映射到特定供应商提供的云服务,从而可以使用 Kubernetes 声明式语法创建和管理云资源。它旨在供应用程序团队使用,无需编写任何代码即可使用。它的主要功能是自动在公有云上创建资源。

该项目是 CNFC 的一部分,正如其作者所解释的那样:“我们创建 Crossplane 是为了帮助组织像云提供商那样创建自己的云:使用控制平面。”

如何在我们的集群中管理 Elastic Cloud


Elastic Kubernetes Operator(由 Elastic 项目正式实现)能够实现 Elastic Search 和 Kibana 在 Kubernetes 上的自动化,并大大简化部署配置并简化管理。该操作员支持更大存储的 Frozen Indices 和 Kibana Spaces、Canvas 和 Elastic Maps,以及 Kubernetes 基础设施的监控部分。

结论


正如我们所说,到目前为止我们所看到的 Operator 只是几个例子。还有很多其他的 Operator:从 KNative 到 Kubernetes 上的 Cloud Foundry,再到 Azure Spring Cloud。当然,还有许多其他最流行的服务和应用程序类型的 Operator:Grafana、Jaeger、ArgoCD、MongoDB 和 RBAC(基于角色的访问控制模型)。

尽管所有这些案例都大相径庭,但相同的原则始终适用。Operator 的优势在于扩展了 Kubernetes 的自动化可能性。广泛的 K8s Operator 生态系统使得我们能够为大多数用途找到现成的解决方案。

回到最初的问题,我们也可以通过创建一个operator来自动安装安全插件。

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

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

相关文章

计算机视觉——图像金字塔与目标图像边缘检测原理与实践

一、两个图像块之间的相似性或距离度量 1.1 平方差和(SSD) 平方差和(SSD) 是一种常用的图像相似性度量方法。它通过计算两个图像在每个对应位置的像素值差的平方和来衡量两个图像之间的整体差异。如果两个图像在每个位置的像素值…

VRoid-Blender-Unity个人工作流笔记

流程 VRoid 选配模型>减面、减材质>导出vrm Blender(先有CATS、vrm插件) 导入vrm>Fix model>修骨骼>导出fbx Unity 找回贴图、改着色器、调着色器参数…… VRoid 减面 以模型不出现明显棱角为准。脸好像减面100也问题不大。 下…

Domain Adaptation领域自适应

背景与问题定义 传统监督学习假设:训练集与测试集数据分布一致。 Domain Shift:测试数据分布与训练数据不同,模型泛化性能骤降 。 例如在黑白图像上训练数字分类器,测试时用彩色图像,准确率骤降。 Domain Adaptatio…

从自动测量、8D响应到供应链协同的全链路质量管理数字化方案——全星QMS如何破解汽车行业质量困局

全星QMS如何破解汽车行业质量困局:从自动测量、8D响应到供应链协同的全链路数字化方案 在当今竞争激烈的市场环境中,企业要想脱颖而出,必须确保产品质量的稳定性和可靠性。 全星质量QMS软件系统凭借其强大的功能和灵活的架构,为企…

联想电脑开机出现Defalut Boot Device Missing or Boot Failed怎么办

目录 一、恢复bios默认设置 二、关机重启 三、“物理”方法 在图书馆敲代码时,去吃了午饭回来发现刚开机就出现了下图的问题(崩溃),想起之前也发生过一次 这样的问题,现在把我用到的方法写在下面,可能对…

SQL学习笔记-聚合查询

非聚合查询和聚合查询的概念及差别 1. 非聚合查询 非聚合查询(Non-Aggregate Query)是指不使用聚合函数的查询。这类查询通常用于从表中检索具体的行和列数据,返回的结果是表中的原始数据。 示例 假设有一个名为 employees 的表&#xff…

【Vue 3 + Element Plus 实现产品标签的动态添加、删除与回显】

🚀Vue 3 Element Plus 实现产品标签的动态添加、删除与回显 在后台管理系统中,我们经常需要对表单数据进行动态处理,尤其是类似“产品标签”这样的字段,它需要用户能够灵活添加、删除,并在编辑时自动回显。今天我们就…

IntelliJ 配置(二)配置相关类库(2)LineMarkerProvider

一、介绍 LineMarkerProvider 是 IntelliJ 平台插件开发中的一个接口,它的作用是在编辑器左侧的“行标记区域”(就是代码行号左边那一栏)添加各种图标、标记或导航链接。比如Java 类中看到的: 小绿色三角形(可以点击运…

从零开始学java--线性表

数据结构基础 目录 数据结构基础 线性表 顺序表 链表 顺序表和链表的区别: 栈 队列 线性表 线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表中的元素个数就是线性表的长度,表的起始位置称为表头&am…

AD917X系列JESD204B MODE7使用

MODE7特殊在F8,M4使用2个复数通道 CH0_NCO10MHz CH1_NCO30MHZ DP_NCO50MHz DDS1偏移20MHz DDS2偏移40MHz

Spring Cloud之远程调用OpenFeign最佳实践

目录 OpenFeign最佳实践 问题引入 Feign 继承方式 创建Module 引入依赖 编写接口 打Jar包 服务提供方 服务消费方 启动服务并访问 Feign 抽取方式 创建Module 引入依赖 编写接口 打Jar包 服务消费方 启动服务并访问 服务部署 修改pom.xml文件 观察Nacos控制…

【Python爬虫】详细入门指南

目录 一、简单介绍 二、详细工作流程以及组成部分 三、 简单案例实现 一、简单介绍 在当今数字化信息飞速发展的时代,数据的获取与分析变得愈发重要,而网络爬虫技术作为一种能够从互联网海量信息中自动抓取所需数据的有效手段,正逐渐走入…

Win11系统 VMware虚拟机 安装教程

Win11系统 VMware虚拟机 安装教程 一、介绍 Windows 11是由微软公司(Microsoft)开发的操作系统,应用于计算机和平板电脑等设备 。于2021年6月24日发布 ,2021年10月5日发行 。 Windows 11提供了许多创新功能,增加了新…

打造AI应用基础设施:Milvus向量数据库部署与运维

目录 打造AI应用基础设施:Milvus向量数据库部署与运维1. Milvus介绍1.1 什么是向量数据库?1.2 Milvus主要特点 2. Milvus部署方案对比2.1 Milvus Lite2.2 Milvus Standalone2.3 Milvus Distributed2.4 部署方案对比表 3. Milvus部署操作命令实战3.1 Milv…

【深度学习与大模型基础】第11章-Bernoulli分布,Multinoulli分布

一、Bernoulli分布 1. 基本概念 想象你抛一枚硬币: 正面朝上(记为 1)概率是 p(比如 0.6)。 反面朝上(记为 0)概率是 1-p(比如 0.4)。 这就是一个Bernoulli分布&…

基于Windows通过nginx代理访问Oracle数据库

基于Windows通过nginx代理访问Oracle数据库 环境说明: 生产环境是一套一主一备的ADG架构服务器,用户需要访问生产数据,基于安全考虑,生产IP地址不能直接对外服务,所以需要在DMZ部署一个前置机,并在该前置机…

北斗和GPS信号频率重叠-兼容与互操作

越来越多的同学们发现北斗三代信号的B1C,B2a信号居然和美国GPS L1,L5处在同样频率上? 为什么美国会允许这样的事情发生?同频率难道不干扰彼此的信号吗? 思博伦卫星导航技术支持文章TED 这事得从2006年联合国成立全球卫星导航系统…

python爬虫:喜马拉雅案例(破解sign值)

声明: 本文章中所有内容仅供学习交流使用,不用于其他任何目的,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 根据上一篇文章,我们破解了本网站的,手机号和密码验证&#x…

51单片机波特率与溢出率的关系

1. 波特率与溢出率的基本关系 波特率(Baud Rate)表示串口通信中每秒传输的位数(bps),而溢出率是定时器每秒溢出的次数。在51单片机中,波特率通常通过定时器的溢出率来生成。 公式关系: 波特率=溢出率/​分频系数 其中,分频系数与定时器的工作模…

摄影测量——单像空间后方交会

空间后方交会的求解是一个非线性问题,通常采用最小二乘法进行迭代解算。下面我将详细介绍具体的求解步骤: 1. 基本公式(共线条件方程) 共线条件方程是后方交会的基础: 复制 x - x₀ -f * [m₁₁(X-Xₛ) m₁₂(Y-…