暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

启动你的第一个 Kubernetes Operator

云原生CTO 2021-10-11
469

 CTO 

 
 

 
 


 

Go
Rust
Python
Istio
containerd
CoreDNS
Envoy
etcd
Fluentd
Harbor
Helm
Jaeger
Kubernetes
Open Policy Agent
Prometheus
Rook
TiKV
TUF
Vitess
Argo
Buildpacks
CloudEvents
CNI
Contour
Cortex
CRI-O
Falco
Flux
gRPC
KubeEdge
Linkerd
NATS
Notary
OpenTracing
Operator Framework
SPIFFE
SPIRE
  Thanos





启动你的第一个 Kubernetes Operator

Kubernetes Operator
是一种强大的机制,用于扩展 Kubernetes
以执行特定于应用程序的功能。operator
看起来很神奇,可以自动执行确保 Kubernetes
集群健康和最佳的任务。毕竟 Kubernetes
很复杂,开始使用 Operator
似乎令人生畏,但是,它们值得努力理解、使用甚至创建您自己的。

继续阅读以了解 Operator
如何改善您的 Kubernetes
体验并优化您使用 Kubernetes
集群的方式。本文将描绘 Operators
的重要性,涉及:它们是什么以及何时使用它们,从实现和开发角度来看现有的 Operator
生态系统,并提供构建您自己的 Kubernetes Operator
时的一些最佳实践。

为什么要使用 Kubernetes Operator?

当需要持续自动化 Kubernetes
资源时,Operator
很有用。这部分自动化,一旦捆绑为控制器代码,其自定义资源定义就形成了 Kubernetes operator
。'operator
利用自定义资源来管理应用程序及其组件。operator
遵循 Kubernetes
原则,尤其是控制循环。

  • Kubernetes.io

https://kubernetes.io/docs/concepts/extend-kubernetes/operator/

Operators
允许应用程序与 Kubernetes API
交互,其行为由其自己的特定清单驱动,即自定义资源。图 1 概述了operator
如何从用户修改自定义资源以及驱动operator
保持所需状态与当前状态同步的协调循环中工作。

图 1:operator概念 blog.container-solutions.com

您可以使用 Kubernetes
对象(例如 pod
configmap
secret
)来运行您的应用程序。对于简单的应用程序,这很好。但是,如果您想要一个总体管理层来观察这些原生 Kubernetes
对象并根据事件更改它们的状态,该怎么办?这种需求的最简单示例首先由在 Kubernetes
上本地运行的分布式数据库集群表示:

  • etcd
  • Redis

https://operatorhub.io/operator/etcd https://operatorhub.io/operator/redis-enterprise

这些operator
封装了扩展或扩展分布式数据库集群所需的自动化代码。这无需干预实现相同结果所需状态的有状态集或 Kubernetes
配置。

一个更复杂的例子是Elasticsearch operator
。该操作符有助于启动多个应用程序 pod
service
和状态集,它们是其搜索、可视化和日志存储堆栈的一部分——反映了 Kubernetes
世界中operator
的力量。

Elasticsearch operator
: https://operatorhub.io/operator/elastic-cloud-eck

前往Operator.io
,这是一个共享operator
的社区中心,涵盖人工智能/机器学习、数据库、云、网络、集成和 Openshift
等众多类别。

Operator.io
: https://operatorhub.io/

图 2 和图 3 显示了我构建的一个示例,描述了如何在 Kubernetes
中运行机器学习工作流。此图显示了在命令行或 Kubernetes
上运行的基于 Go
的工作流,在自定义operator
的帮助下,从 MLOps
的各个方面为您的机器学习项目提供快速和自动化的数据管道。

机器学习和类似程序需要一个工作流引擎来协调处理数据、训练模型和评估模型的各个步骤。有时,流行的 CI
平台(如 Jenkins
)可用于运行管道,但它们更适合以应用程序为中心的构建和集成管道。然后,有强大的工作流引擎,如 Apache Airflow
Argo
工作流等,它们为工作流管理提供了许多功能以获得最终结果。我实施新工作流引擎 Roiergasias
的动机很简单:

  • 拥有一个非常简单的声明式工作流程,让机器学习工程师始终处于主导地位,让他/她有机会完全控制步骤运行的环境。

  • 重用 Kubernetes operator
    的能力作为工作流引擎的核心驱动程序,从而使其成为 K-native

除此之外,该operator
还有一个独特的卖点,即它允许将工作流拆分为可以在多个工作节点中运行的较小的工作流。

此处给出的示例以一堆 Python
脚本(每个阶段一个——处理数据、训练模型和评估模型)以及预加载到 S3
存储桶的未处理源数据开始。

使用简单的自定义资源清单 yaml
,工作流引擎的说明如下所示:

图 2:自定义资源清单示例

图 3:operator
示例https://github.com/ankursoni/kubernetes-operator-roiergasias

请注意开始的操作序列:

  • 为拆分工作流创建CONFIG MAP1 + JOB 1 — NODE 1上的处理数据。

  • 等待JOB 1 完成。

  • 为拆分工作流创建CONFIG MAP 2 + JOB 2 — NODE 2 上的训练模型

  • 等待JOB 2 完成。

  • 为拆分工作流创建CONFIG MAP 3 + JOB 3 — NODE 2 上的“评估模型”。

  • 等待JOB 3 完成。您可以参考这篇文章以获得更详细的解释。

https://github.com/ankursoni/kubernetes-operator-roiergasias#run-machine-learning-workflow-in-aws

应用 Operator 框架

并非所有应用程序堆栈都需要 Operator
。下面的流程图提供了了解应用程序是否适合使用 Operator
进行自动化的决策过程:

图 4:确定是否需要operator
的过程

构建您的第一个operator
有很多选择,即:

  • operator
    框架SDK
  • Kubebuilder
  • KUDO
    Kubernetes
    通用声明式operator
  • Charmed Operator
    框架

链接地址如下🔗:

operator
框架SDK
: https://operatorframework.io/

Kubebuilder
: https://book.kubebuilder.io/

KUDO
(Kubernetes 通用声明式operator: https://kudo.dev/

Charmed Operato
r 框架: https://juju.is/

Kubebuilder
operator
代码库中涉及的各种组件(如 CRD
Controller-API
)的代码生成提供了快速教程和简单的脚手架。

Momenton 的最佳实践

设置您的第一个 Kubernetes Operator
可能是一项艰巨的任务。根据我们的经验,以下一些注意事项和最佳实践应该可以帮助您入门。这些实践并不详尽,诸如声明式 API
、利用 SDK
之类的事情都是 Operator
的考虑因素。首先,Operators
应该特定于单个应用程序。例如,Airflow
通常与 MySQL
Redis
一起使用。您可以开发一个operator
,为所有三个应用程序的功能自动化:Airflow
MySQL
Redis
。但是,最好构建三个operator
——每个应用程序一个。它使您可以灵活地将 MySQL
Redis
换成另一个数据库。尝试将operator
分解为仍然提供价值的最小组件。这促进了关注点分离、域隔离和operator
更大的灵活性。

其次,operator
中的reconciliation
代码应该是无状态的,只依赖调用Kubernetes API
提供的Kubernetes
对象的当前状态。幂等性,意思是“多次应用相同操作而不改变第一次尝试后的结果的能力”,在协调代码中至关重要。因此,Operator
应该通过搭载本地资源的控制器(如configmap
secret
等)来实现这一点,而不是为应用程序的每个需求创建自定义资源。这将促进最大的重用和最少的自定义资源管理,即协调开销 [2, 3, 4]。

5.3 参考资料

初学者的 Kubernetes Operator [1]

operator模式最佳实践| operator SDK [2]

最佳实践 | operator SDK [3]

operator白皮书 v1.0 [4]

参考资料

[1]

参考地址: https://medium.com/swlh/kubernetes-operator-for-beginners-what-why-how-21b23f0cb9b1

[2]

参考地址: https://kubernetes.io/docs/concepts/extend-kubernetes/operator/

[3]

参考地址: https://sdk.operatorframework.io/docs/best-practices/

[4]

参考地址: https://github.com/cncf/tag-app-delivery/blob/eece8f7307f2970f46f100f51932db106db46968/operator-wg/whitepaper/Operator-WhitePaper_v1-0.md


文章转载自云原生CTO,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论