多个 Kubernetes Operator 通信

Multiple Kubernetes Operator Communication

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

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

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

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

但是,从长远来看,这不是一个实用的解决方案,因为 Operators should be able to update automatically and without interaction. You are also not allowed to install older versions. To name names, the Crunchy Postgres Operator actually goes through many breaking changes 每次更新。 如果您依赖他们维护他们的 CRD 格式,那么您的架构就会变得脆弱。

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

纯粹就最佳实践而言,you are supposed to be able to migrate from older to newer versions of your CRD API using webhooks,但尚不清楚是否有任何 Operator 实现确实做到了这一点。 尽管如此,截至撰写本文时 post,OperatorHub.io 上还没有依赖其他运营商的运营商(2021 年 2 月 16 日)。 Reader,你会是第一个。

如果您无论如何都想这样做,您想要依赖的 Operator 很可能在 Go package repository 上可用。您可以 go get 它们并在您的代码中原生使用它们的 CRD API 类型,这应该可以很容易地与 API.

保持同步

奖金未回答

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