0

构建 Kubernetes Operators的最佳实践说我应该编写一大堆 Operators 来管理我的应用程序。运营商之间的通信是如何发生的?

换句话说,我应该如何构建我的 Operator,以便它可以与其他 Operator 对话?

4

1 回答 1

1

他们没有。反正不是直接的。Kubernetes 上的通信完全通过 YAML 文件进行。

例如,如果您的应用程序需要访问数据库,您应该为 Postgresql 安装一个运算符,创建一个 PostgreSQLCluster CR 对象,并在设置完成后从中提取凭据。

但是,从长远来看,这不是一个实用的解决方案,因为 Operator应该能够自动更新且无需交互。您也不允许安装旧版本。为了命名,Crunchy Postgres Operator 实际上在每次更新时都会经历许多重大变化。如果您依赖他们维护他们的 CRD 格式,那么您的架构就会变得脆弱。

确实存在一些例外。Tekton Pipelines 和 Argo Pipelines 等产品的运营商非常稳定,不太可能因设计而改变,完全可以依赖这些运营商。

纯粹谈谈最佳实践,您应该能够使用 webhook 从旧版本的 CRD API 迁移到新版本,尽管尚不清楚任何 Operator 实现是否真正做到这一点。尽管如此,在撰写本文时, OperatorHub.io上还没有依赖其他 Operator 的 Operator(2021 年 2 月 16 日)。读者,你将是第一个。

如果您仍然想这样做,那么您想要依赖的 Operator 很可能在Go 包存储库中可用。您可以只go get使用它们并在您的代码中本地使用它们的 CRD API 类型,这样可以很容易地跟上 API 的最新状态。

奖金不回答

从技术上讲,您想要依赖的 Operator 可以在其管理器中实现 REST API,并将其作为服务公开。我严重怀疑有人会这样做。在 Kubernetes 设计理念中挖洞并打开攻击向量似乎并不聪明。

于 2021-02-17T03:54:53.407 回答