带你读《云原生应用开发:Operator原理与实践》——1.2.1 Operator 简介

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 带你读《云原生应用开发:Operator原理与实践》——1.2.1 Operator 简介

1.2  Operator 介绍


在 Kubernetes 中我们经常使用 Deployment、DaemonSet、Service、ConfigMap 等资源,这些资源都是 Kubernetes 的内置资源,它们的创建、更新、删除等均由 Controller Manager 负责管理,触发相应的动作来满足期望状态(Spec),这种声明式的方式简化了用户的操作,用户在使用时只需关心应用程序的最终状态即可。随着 Kubernetes 的发展,在大数据、人工智能等领域出现了一些场景更为复杂的分布式应用系统,原生 Kubernetes内置资源在这些场景下就显得有些力不从心。

(1)不同应用平台需要管理的目标各有差异,如何在 Kubernetes 中兼容定义管理的目标?

(2)如何管理和备份系统的应用数据,协调各应用之间不同生命周期的状态?

(3)能否用同样的 Kubectl 命令来管理自己定义的复杂分布式应用?

在这些场景下,Kubernetes 自身基础模型已经无法支撑不同业务领域下的自动化场景。为了满足这些需求,谷歌提出了 Third Party Resources(TPR)概念,允许开发者根据业务需求的变化自定义资源和控制器,用于编写面向领域知识的业务逻辑控制,这就是Operator 的核心概念。

Operator 是 一 种 封 装、 部 署 和 管 理 Kubernetes 应 用 的 方 法, 用 户 可 以 使 用 Kubernetes API 和 Kubectl 工 具 在 Kubernetes 上 部 署 并 管 理 Kubernetes 应 用。Operator 基于基本 Kubernetes 资源和控制器概念构建,但又涵盖了特定领域或应用的知识,用于实现其所管理软件的整个生命周期的自动化,它是一种特定于应用的控制器,可扩展 Kubernetes API 的功能,是 Kubernetes 用户创建、配置和管理复杂应用的实例。

在 Kubernetes 内置资源中,Controller Manager 实施控制循环,反复比较集群中的期望状态和实际状态,如果集群的实际状态和期望状态不一致,则采取措施使二者一致。Operator 使用自定义资源(CR)管理应用,CR 引入新的对象类型后,Operator 监视 CR 类型,并采取特定于应用的操作,确保 CR 对象当前实际状态和期望状态一致,用户可通过在Operator 中编写自定义规则来扩展新功能和更新现有功能,可以像操作 Kubernetes 原生组件一样,通过声明式的方式定义一组业务应用的期望状态,监控操作自定义资源,该特性使Operator 几乎可以在 Kubernetes 中执行任何操作,包括扩展复杂的应用、版本升级、管理有状态的服务等。这种设计使应用维护人员只需要关注配置自身应用的期望运行状态,而无须投入大量的精力在部署应用或业务运行过程中频繁操作可能出错的运维命令。


1.2.1 Operator 简介


1. Operator 历史

Kubernetes(k8s)作为云原生应用的基石,已然成为当今容器编排的事实标准,为用户提供了很多拿来即用的基础资源组件,如 Deployment、Pod、Service、Configmap 等,这些基础组件为用户应用的部署和运维提供了极大的方便,Operator 的出现更是将 Kubernetes在容器化道路上推向了一个新的高度。现在,让我们先来了解 Kubernetes 和 Operator 的历史。

Docker 在 2014—2015 年是容器领域的佼佼者。Docker 公司前身是一个平台即服务的初创公司 dotCloud,它们发现,许多应用程序在管理依赖关系和二进制文件时需要做大量的工作,因此它们将 Linux Cgroups 和 Namespaces 的一些功能组合成一个包,这个包就是 Docker 镜像,它可以让应用程序在任何基础设施上持续运行,并提供简单的命令操作 Docker。随着 Docker 的风靡,Docker 容器上的应用越来越多,如何协调编排这些容器成为一个新的研究方向,因此,涌现了一批容器编排工具,包括 Nomad、Kubernetes、DockerSwarm 等,各种编排工具都可以使用容器来部署、管理和扩展应用程序,但是每个工具侧重点不同,最终 Kubernetes 脱颖而出。

谷 歌 于 2015 年 2 月 发 布 Kubernetes 并 于 2016 年 3 月 将 其 捐 赠 给 了 CNCF。Kubernetes 对应用开发人员非常有吸引力,它减少了对基础设施的依赖,并为开发人员提供了强大的工具来编排无状态的 Docker 容器。Kubernetes 项目是容器编排的核心,在于一个叫作“控制器模式”的机制中,它通过对 ETCD 中的 API 对象的变化进行监听,并在Controller 中对这些变化进行响应,无论是 Pod 等应用对象,还是存储设备、网络等服务对象,任何一个 API 对象发生变化时,Kubernetes 都会调用对应的 Controller 执行响应动作,实现编排动作。

2016 年,原 CoreOS 工程师邓洪超和他的同事在编程过程中突然有了一个想法,作为 Kubernetes 项目的用户,我们能不能编写一个 Controller 来定义自己所期望的编排动作呢?于是,这两位工程师将这个小项目称为 Operator,旨在通过扩展 Kubernetes原生 API 的方式,在 Kubernetes 中添加一个新的 API 对象,自定义该对象的运维动作,就可以为 Kubernetes 应用提供创建、配置和管理应用生命周期能力。这个小项目一经公布,引起了大量 Kubernetes 开发者的热烈追捧,很快大量的分布式项目都通过 Operator 运行起来。

相比 Helm 描述静态关系的编排工具,Operator 定义的是应用运行起来后整个集群的动态逻辑。得益于 Kubernetes 良好的 API 设计范式,Operator 在保证自由度的同时,还可以展现出清晰的架构和设计逻辑,开发者们可以专注于填写自己的业务逻辑,只需很小的开发量即可完成一个复杂的分布式系统的运维工作。

虽 然 Operator 一 经 面 世 就 受 到 热 烈 追 捧, 但 是 它 的 发 展 并 不 是 一 帆 风 顺 的。Operator 的诞生使得 Kubernetes 项目的负责人 Google 团队极为不适应,对于他们来说,Controller 应该是隐藏在 Kubernetes 内部实现的核心机制,即使开放了,也应该按照 Kubernetes 现有 API 规范成为 Controller Manager 管理下的一部分,Google 不希望失去 Kubernetes 生态系统的主导权。随着 Kubernetes 项目的发起人之一 Brendan Burns加入 Red Hat,Google 团队和 RedHad 在社区推广 UAS(User Aggregated APIServer),它允许用户编写一个自定义的 APIServer,在这里面添加自定义 API,就可以与原生的APIServer 绑定,部署在一起统一提供服务。并且 Red Hat 和 Google 还建议废弃 TPR,也就是 Operator 依赖的第三方接口资源,Operator 面临被关闭的风险。

在这种困境下,CoreOS 公司在 GitHub 上发布了一个帖子,让社区的开发者发声,挽救 TPR 和 Operator,由于 Operator 的用户太多,在来自社区的压力下,Google 和 Red Hat 最终选择了让步,Operator 从绝境中重生。后来 Kubernetes 使用 CRD 替代了 TPR,这两种机制除了名称,其他方面并没有什么变化。

2018 年,RedHad 完成了对 CoreOS 公司的收购,并推出了 Operator 框架,进一步完善了 Operator 相关工具,使 Operator 的地位得到了稳固。


2. Operator 组成

简单来说 Operator=Controller+CRD,Operator 是由 Kubernetes 自定义资源(CRD)和控制器(Controller)构成的云原生拓展服务,其中 CRD 定义了每个 Operator 需要创建和管理的自定义资源对象,底层实际就是通过 APIServer 接口在 ETCD 中注册一种新的资源类型,注册完成后就可以创建该资源类型的对象了。但是仅注册资源和创建资源对象是没有任何实际意义的,CRD 最重要的是需要配合对应的 Controller 来实现自定义资源的功能,达到自定义资源期望的状态,比如内置的 Deployment Controller 用来控制 Deployment资源的功能,根据配置生成特定数量的 Pod 监控其状态,并根据事件做出相应的动作。


3. Operator 使用

用户想为自己的自定义资源构建一个 Kubernetes Operator,有很多工具可供选择,比如 Operator SDK、Kubebuilder,甚至可以使用 Operator SDK(Helm、Ansible、Go)。这些工具创建 Kubernetes Operator 用来监控自定义资源,并且根据资源的变化调整资源状态,如图 1-9 所示。

image.png

图 1-9 Operator 使用

Operator 作 为 自 定 义 扩 展 资 源 以 Deployment 的 方 式 部 署 到 k8s 中, 通 过 ListWatch 方式监听对应资源的变化,当用户修改自定义资源中的任何内容时,Operator 会监控资源的更改,并根据更改内容执行特定的操作,这些操作通常会对 Kubernetes API 中某些资源进行调用。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
1月前
|
Kubernetes 监控 Cloud Native
云原生时代下的应用开发与部署实践
【10月更文挑战第4天】在云原生的浪潮中,开发者和运维人员面临着新的挑战和机遇。本文将通过实际案例,展示如何在云平台上高效地开发、部署和管理应用,同时确保系统的可扩展性和高可用性。我们将深入探讨容器化技术、微服务架构以及持续集成/持续部署(CI/CD)流程的实施策略,旨在为读者提供一套完整的云原生解决方案框架。
|
2月前
|
Kubernetes Cloud Native 持续交付
云原生技术在现代应用开发中的角色与实践
【9月更文挑战第9天】 随着云计算技术的飞速发展,云原生(Cloud Native)已经成为推动企业数字化转型的核心力量。本文将深入探讨云原生的基本概念、关键技术及其在实际开发中的应用案例,旨在为读者提供一条清晰的云原生技术学习路径和应用指南。通过实例分析,我们将揭示云原生如何优化资源管理、提升应用性能及加快部署速度,进而帮助企业构建更加灵活、可靠和高效的软件系统。
|
7天前
|
Kubernetes Cloud Native 持续交付
云原生技术在现代应用开发中的实践与思考
【10月更文挑战第35天】云原生技术,作为云计算的进阶形态,正引领着软件开发和运维的新潮流。本文将深入探讨云原生技术的核心理念、关键技术组件以及在实际项目中的应用案例,帮助读者理解如何利用云原生技术优化应用架构,提高开发效率和系统稳定性。我们将从容器化、微服务、持续集成/持续部署(CI/CD)等角度出发,结合实际代码示例,展现云原生技术的强大能力。
|
16天前
|
监控 Cloud Native 持续交付
云原生技术深度解析:重塑现代应用开发与部署范式####
本文深入探讨了云原生技术的核心概念、关键技术组件及其在现代软件开发中的重要性。通过剖析容器化、微服务架构、持续集成/持续部署(CI/CD)等关键技术,本文旨在揭示云原生技术如何促进应用的敏捷性、可扩展性和高可用性,进而推动企业数字化转型进程。不同于传统摘要仅概述内容要点,本部分将融入具体案例分析,直观展示云原生技术在实际应用中的显著成效与挑战应对策略,为读者提供更加丰富、立体的理解视角。 ####
|
27天前
|
Kubernetes Cloud Native 持续交付
云原生技术:重塑现代应用开发与部署模式####
本文深入探讨了云原生技术的核心概念、发展历程及其在现代软件开发和部署中的关键作用。通过分析云原生架构的特点,如容器化、微服务、持续集成与持续部署(CI/CD),以及它如何促进应用的可伸缩性、灵活性和效率,本文旨在为读者提供一个关于云原生技术全面而深入的理解。此外,还将探讨实施云原生策略时面临的挑战及应对策略,帮助组织更好地把握数字化转型的机遇。 ####
|
27天前
|
人工智能 Serverless API
云原生应用开发平台CAP:一站式应用开发及生命周期管理解决方案
阿里云的云应用开发平台CAP(Cloud Application Platform)是一款一站式应用开发及应用生命周期管理平台。它提供丰富的Serverless与AI应用模板、高效的开发者工具链及企业级应用管理功能,帮助开发者快速构建、部署和管理云上应用,大幅提升研发、部署和运维效能。
83 1
|
1月前
|
Kubernetes Cloud Native 持续交付
云原生技术在现代应用开发中的实践与展望
【10月更文挑战第7天】随着技术的不断演进,云计算已从简单的资源租用模式转变为支持复杂、高效、灵活的云原生应用架构。本文将深入探讨云原生技术的核心概念及其在现代应用开发中的应用,通过分析Kubernetes容器编排和微服务架构的实践案例,揭示云原生技术如何推动软件开发的现代化进程。文章旨在为开发者和架构师提供一套实用的云原生应用开发指南,同时展望未来云原生技术的发展方向。
29 8
|
1月前
|
Cloud Native 测试技术 云计算
云原生技术在现代应用开发中的角色与实践
【9月更文挑战第31天】本文深入探讨了云原生技术如何革新现代应用开发流程,通过实际案例分析,揭示了其对提高开发效率、确保系统可扩展性和可靠性的显著影响。文章不仅介绍了云原生的核心概念,还提供了实施策略和最佳实践,旨在为开发者提供一条清晰的云原生转型之路。
|
2月前
|
Kubernetes Cloud Native 持续交付
云原生技术在现代应用开发中的实践与思考
【9月更文挑战第23天】本文将深入探讨云原生技术如何革新现代应用的开发流程。通过分析云原生的核心概念、优势以及实际应用案例,我们旨在揭示这一新兴技术范式如何助力开发者和企业更高效、灵活地构建和部署应用程序。文章还将提供具体代码示例,展示云原生技术在实际项目中的应用,帮助读者更好地理解和掌握该技术。
|
2月前
|
Cloud Native 持续交付 开发者
云原生技术在现代应用开发中的应用与实践
【9月更文挑战第22天】本文将深入探讨云原生技术如何革新现代应用开发,通过实际案例分析其对提高开发效率、促进持续集成与交付的显著影响。我们将从云原生的基本概念出发,逐步展开到容器化、微服务架构、自动化管理的实践操作,以及这些技术如何协同工作以支持复杂应用的快速迭代和扩展。文章旨在为开发者提供一套云原生技术的实践框架,帮助他们构建更加灵活、可维护的应用系统。