В операторах k8s, как связать уникальное имя metadata.name в спецификации CRD с уникальным идентификатором объекта, который генерирует мой сервер

Я разрабатываю нового оператора для управления CRD объектов моей бизнес-логики. Мои бизнес-объекты хранятся в Mongo, и поэтому нам нужен этот BSON ID (GUID длиной 12 букв), чтобы вносить последующие изменения в этот объект.

Вопрос в том, как связать CR, который оператор должен создать, с этим вышестоящим объектом? Где хранить этот уникальный BSON ID способ K8S, чтобы я мог использовать его для дальнейших поисков.

Пример, вот CRD для одного из моих восходящих объектов:

apiVersion: my.custom.object/v1alpha1
kind: ApiDefinition
metadata:
  name: httpbin
spec:
  description: my first api
  use_keyless: true
  protocol: http

Когда я делаю kubectl apply -f в этот CRD он создается.

kubectl apply -f "the_above_yaml.yaml"
ApiDefinition created!

Затем мой оператор берет его в цикле согласования, где затем создает этот объект на моем сервере. Сервер генерирует идентификатор BSON. Мне нужно использовать этот идентификатор BSON для дальнейших поисков.

Как я могу сохранить конкретный сервер BSON ID, так что разработчикам просто нужно использовать уникальные metadata имя в спецификации, в то время как под капотом мой оператор заботится о связывании двух?

1 ответ

Если каждый настраиваемый объект ресурса коррелирует с одним документом MongoDB, вы можете сохранить идентификатор документа в виде строки в поле статуса вашего настраиваемого ресурса.

// +kubebuilder:subresource:status
type MyOwnCR struct {
    metav1.TypeMeta   `json:",inline"`
    metav1.ObjectMeta `json:"metadata,omitempty"`

    Spec   MyOwnCRSpec   `json:"spec,omitempty"`
    Status MyOwnCRStatus `json:"status,omitempty"`
}

// MyOwnCRStatus defines the observed state of MyOwnCR
type MyOwnCRStatus struct {
    //+optional
    DocumentID string `json:"documentID,omitempty"`
}

Обратите внимание на //+optional и omitemptyключевые слова, пометив это поле статуса как необязательное. Таким образом, пользователь API K8s может создавать ресурсы без указания идентификатора документа. Затем ваш оператор может взаимодействовать с вашим MongoDB при согласовании запросов и обновлении / исправлении. status.documentID как только станет известен идентификатор.

Другие вопросы по тегам