searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享

K8S Operator简介

2023-11-01 07:14:50
28
0

K8S Operator简介

Operator 是 Kubernetes 的扩展软件, 它利用自定义资源Custom Resource管理应用及其组件。Operator 遵循 Kubernetes 的设计理念,特别是在控制回路(control loop)方面。

初衷

Operator 模式 旨在帮助(正在管理一个或一组服务的)运维人员完成其关键目标。 这些负责维护一些特定应用和服务的运维人员拥有较深的背景知识,以协助他们清楚地知道系统应该如何运行、如何部署以及出现问题时如何处理。

在 Kubernetes 上运行工作负载的人们都喜欢通过自动化来处理重复的任务。 通过Operator 模式能够封装你编写的(Kubernetes 本身提供功能以外的)任务自动化代码。

Kubernetes 上的 Operator

Kubernetes 为自动化而设计,开箱即用,你可从 Kubernetes 核心组件中获得许多内置的自动化功能。 你可以使用 Kubernetes 自动化部署和运行工作负载,甚至可以将Kubernetes如何处理这些工作都自动化

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

Operator 示例

可以通过 Operator进行自动化的工作包括:

  • 按需部署应用
  • 对应用状态进行备份或还原
  • 处理应用代码的升级以及相关改动。例如数据库 Schema 或额外的配置设置
  • 发布一个Kubernetes API无法自动发现的应用接口(Service)
  • 模拟整个或部分集群中的故障以测试其稳定性
  • 在没有内部成员选举程序的情况下,为分布式应用选举leader角色

下面是一个可以更详细地了解 Operator的示例

  1. 一个名为 SampleDB 的自定义资源,可以将其配置到集群中。
  2. 一个包含 Operator 控制器部分的 Deployment,用来确保 Pod 处于运行状态。
  3. 一个Operator 源码的容器镜像。
  4. 负责查询控制平面以找出已配置 SampleDB 资源的控制器代码
  5. Operator 的核心是通过源码告诉 API Server如何使现实与配置的资源匹配。
    • 当添加新的 SampleDB时,Operator 将设置 PVC 以提供持久化的数据库存储, 设置 StatefulSet 以运行 SampleDB,并设置 Job 来初始化配置。
    • 当删除SampleDB时,Operator将建立快照,然后确保StatefulSet和存储卷已被删除。
  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

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

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

以下是一些用于编写云原生 Operator的库和工具

  • Charmed Operator Framework
  • Java Operator SDK
  • Kopf(Kubernetes Operator Pythonic Framework)
  • kube-rs(Rust)
  • kubebuilder
  • KubeOps(.NET operator SDK)
  • KUDO(Kubernetes 通用声明式 Operator)
  • Mast
  • Metacontroller,可与 Webhook 结合使用,以实现自己的功能。
  • Operator Framework
  • shell-operator
0条评论
0 / 1000