В операторах 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
как только станет известен идентификатор.