wan*_*rew 3 rabbitmq kubernetes kubernetes-operator
我正在使用 Kubernetes golang operator sdk 来实现一个管理 RabbitMQ 队列的 operator。我想知道 k8s 是否有办法在我的自定义资源上强制执行特定规范字段的不变性。我有以下 golang 结构,它代表一个 rabbitMQ 队列和一些参数,让它绑定到一个 rabbitMQ 交换:
type RmqQueueSpec struct {
VHost string `json:"vhost,required"`
Exchange string `json:"exchange,required"`
RoutingKey string `json:"routingKey"`
SecretConfig map[string]string `json:"secretConfig"`
}
Run Code Online (Sandbox Code Playgroud)
我之所以想要不变性,特别是对于该VHost
领域,是因为它是一个参数,用于在 rabbitMQ 中为队列命名。如果为现有的已部署队列更改了它,k8s 协调器将无法为预期队列查询 rabbitMQ,因为它将使用不同的 vhost(实际上是不同的命名空间)进行查询,这可能会导致创建新队列或更新错误的队列。
我正在考虑一些替代方案,例如使用必需的 ObjectMeta.Name 字段来包含连接的虚拟主机和队列名称,以确保它们对于已部署的队列是不可变的。或者以某种方式在操作员中缓存旧规范(还没有弄清楚如何做到这一点)并在协调器中比较旧规范和当前规范,如果VHost
发生变化则返回错误。然而,这两种方法似乎都不理想。理想情况下,如果操作符框架可以在VHost
现场强制执行不变性,那将是一种简单的处理方法。
这种验证可以通过使用ValidatingAdmissionWebhook以及未来通过 CRD 的 OpenAPI 验证提供的支持来实现。
归档时间: |
|
查看次数: |
842 次 |
最近记录: |