如何解决在k8s运算符中,如何将CRD规范中的唯一metadata.name链接到服务器生成的唯一对象ID
我正在开发一个新的Operator来管理我的业务逻辑对象的CRD。我的业务对象存储在Mongo中,因此,我们需要此BSON ID(12个字母长的GUID)来对该对象进行后续更改。
问题是,如何将操作员需要创建的CR链接到该上游对象?我可以在哪里以K8S方式存储这种独特的BSON ID
,以便可以将其用于进一步的查找。
示例,这是我的上游对象之一的CRD:
apiVersion: my.custom.object/v1alpha1
kind: ApiDefinition
metadata:
name: httpbin
spec:
description: my first api
use_keyless: true
protocol: http
当我对此CRD做kubectl apply -f
时,它就被创建了。
kubectl apply -f "the_above_yaml.yaml"
ApiDefinition created!
然后,我的操作员在协调循环中将其拾取,然后在该循环中在我的服务器中创建此对象。服务器生成一个BSON ID。我需要使用此BSON ID进行进一步的查找。
我该如何存储服务器特定的BSON ID
,以便开发人员只需要在规范中使用唯一的metadata
名称,而我的操作员则将两者联系起来?
解决方法
如果每个自定义资源对象都与一个MongoDB文档相关,则可以将文档ID作为字符串存储在自定义资源的状态字段中。
// +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
关键字,并将此状态字段标记为可选。这样,K8s api用户可以创建资源而无需指定文档ID。然后,您的操作员可以在协调请求上与MongoDB进行交互,并在知道ID后更新/修补status.documentID
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。