5

Kubernetes golang オペレーター SDK を使用して、RabbitMQ キューを管理するオペレーターを実装しています。k8s がカスタム リソースの特定の仕様フィールドの不変性を強制する方法があるかどうか疑問に思っています。私は、rabbitMQ キューを表す次の golang 構造体と、rabbitMQ 交換にバインドするためのいくつかのパラメーターを持っています。

type RmqQueueSpec struct {
    VHost string `json:"vhost,required"`
    Exchange string `json:"exchange,required"`
    RoutingKey string `json:"routingKey"`
    SecretConfig map[string]string `json:"secretConfig"`
}

特にフィールドに対して不変性が必要な理由VHostは、それが rabbitMQ でキューの名前空間を指定するために使用されるパラメーターだからです。既存の展開されたキューに対して変更された場合、k8s リコンサイラーは目的のキューに対して rabbitMQ のクエリに失敗します。これは、別の vhost (事実上別の名前空間) でクエリを実行するためです。これにより、新しいキューの作成または更新が発生する可能性があります。間違ったキューの。

必須の ObjectMeta.Name フィールドを使用して、連結された vhost とキュー名の両方を含め、デプロイされたキューに対してそれらが不変であることを確認するなど、いくつかの代替案を検討しています。または、何らかの方法で古い仕様をオペレーター内にキャッシュし (これを行う方法をまだ正確に把握していません)、リコンサイラーで古い仕様と現在の仕様を比較し、VHost変更された場合はエラーを返します。ただし、これらのアプローチはどちらも理想的とは思えません。理想的には、オペレーター フレームワークがVHostフィールドに不変性を適用できる場合、それはこれを処理するための簡単なアプローチになります。

4

2 に答える 2