Coursera 笔记

Module 04 · The Kubernetes Ecosystem: OpenShift, Istio, etc.

OperatorsKubernetes Operators 深度解析

Coursera ↗

Operator 的定义与作用

Operator 是一种自动化集群任务的机制,它充当自定义控制器(Custom Controller)来扩展 Kubernetes API。

Operator 的功能

  • 扩展 API: 充当自定义控制器,扩展 Kubernetes API 功能。
  • 运行环境: 运行在 Pod 中,与 API Server 交互。
  • 应用管理: 封装、部署和管理 Kubernetes 原生应用程序。
  • 自动化决策: 通过持续的实时决策,自动化应用程序的创建、配置和管理。
  • 任务自动化: 自动化其他任务,并确保包含所有相关组件。

人类操作员 vs. 软件操作员

类型 角色 目标
人类操作员 (Human Operators) 了解他们所控制的系统;知道如何部署服务以及如何识别和修复问题。 确保系统正常运行。
软件操作员 (Software Operators) 试图捕获人类操作员的知识,并自动化相同的流程。 实现系统运维的自动化和标准化。

Operator 的优势

  • 安装升级: 易于实现可重复的安装和升级过程。
  • 健康检查: 对系统中的每个组件进行定期的全面系统健康检查。
  • 自动更新: 为组件和软件供应商内容提供 OTA(Over-The-Air)更新。
  • 知识传播: 收集和传播现场工程师的知识给所有用户。
  • 集成: 与 kubectl 和 oc 等 API 和 CLI 工具集成。

Service Broker 与 Operator 对比

特性 Service Broker (服务代理) Operator (操作器)
进程类型 短时运行(Short-running)进程。 长时运行(Long-running)进程。
连续操作 无法执行连续操作,例如:升级、故障转移或伸缩。 可以每天执行升级、故障转移或伸缩等操作。
定制化 仅在安装时进行定制和参数化。 持续监控集群的当前状态,随时进行定制和参数化。
服务位置 集群外服务(Off-cluster services)。 集群外服务。

Operator 模式的基础组件

Operator 模式是基于 CRD 和自定义控制器的组合。

1. 自定义资源定义 (Custom Resource Definitions, CRDs)

  • 作用: 存储和检索 Kubernetes API 中的对象。
  • 扩展性: 扩展 Kubernetes 功能,超越了 Deployment 和 Pod 等内置资源。
  • 灵活性: 使 Kubernetes API 更具模块化和灵活性。
  • 可用性: CRD 仅在其安装的集群内可用。
  • 访问: 一旦安装,CRD 对象即可使用 kubectl 访问,类似于 Pod 和其他资源。

2. 自定义控制器 (Custom Controllers)

  • 作用: 用于改变集群状态。
  • 工作原理: 协调集群的实际状态与其配置状态。
    • 自定义控制器对自定义资源执行相同的协调工作。

Operator 模式(Operator Pattern)

  • 定义: CRDs 与自定义控制器结合使用,创建了一个声明式 API。
  • 工作原理: 自定义控制器将 CRD 数据解释为期望状态,并协调集群的实际状态以匹配 CRD 数据 .

Operator Framework 与生态

Operator Framework 是一个开源工具集,涵盖了 Operator 的编码、测试、交付和更新。

组件 描述
Operator SDK 帮助作者构建、测试和打包 Operator,无需了解复杂的 Kubernetes API 细节。包括 Helm、Go 和 Ansible 能力。
Operator Lifecycle Manager (OLM) 控制集群中 Operator 的安装、升级和基于角色的访问控制 (RBAC)。
Operator Registry 存储 CRDs、集群服务版本 (CSVs) 以及用于包和通道的 Operator 元数据。它在集群中运行,为 OLM 提供 Operator 目录数据。
Operator Hub 一个 Web 控制台,允许集群管理员查找并一键安装 Operator 到其集群中。

Operator 成熟度模型 (Maturity Model)

Operator 成熟度模型定义了 Operator 在日常操作活动中的成熟度阶段,范围从基本安装到自动驾驶(Autopilot)。

  • 它还展示了 Operator SDK 的 Helm、Go 和 Ansible 功能支持哪些活动。

Operator 示例与应用

Operator 的应用示例包括:

  1. 应用部署: 不仅限于 Deployment,还包括 Secret、ConfigMap 和存储资源等。
  2. 应用伸缩: 根据应用类型,在多个副本的帮助下伸缩应用。
  3. 例行任务自动化: 自动化集群中的例行任务,例如对应用程序状态进行备份和恢复。
  4. 集成: 与其他系统集成。

详细示例:部署完整应用程序

  1. 为应用创建自定义资源(CR)。
  2. 为该 CRD 创建自定义控制器。
  3. Operator 逻辑确定如何协调实际状态和配置状态。
  4. 一个 CRD 需要创建 Deployment、Service、Storage 和其他对象。

Operator Hub 上的 Operator 类型

通过 OpenShift Web Console 的 Operator Hub 视图,可以一键安装 Operator。Operator Hub 提供了多种类型的 Operator:

  • Red Hat Operators
  • 认证 Operators:来自与 Red Hat 合作的独立服务供应商(ISV)。
  • 社区 Operators:来自开源社区,但未得到 Red Hat 官方支持。
  • 自定义 Operators:由用户自行定义。

📌 应用: 您可以通过 Operator Hub 安装许多 Kubernetes 生态系统中的工具,例如 Istio Service Mesh。


总结

  • CRDs 扩展了 Kubernetes API。
  • CRDs 与自定义控制器结合,在 Kubernetes 中创建新的声明式 API。
  • Operators 使用 CRDs 和自定义控制器来自动化集群任务。
  • Operator Framework 涵盖了编码、测试、交付和更新。
  • Operator 成熟度模型定义了日常操作活动的成熟度阶段。