使用Operator-SDK开发K8s操作符。要求是侦听CR并执行操作,如创建secret和secretMap,然后通过挂载secret和secretMap来更新工作负载(Deployment/DaemonSet/StatefulSet)。在协调CR之前,工作负载应处于挂起状态。
为了实现这一点,在CRD规范中,嵌入k8s Deployment,StatefulSet或DaemonSet对象。完成预处理并调整工作负载后,将工作负载应用到集群。
type Foo struct{
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec FooSpec `json:"spec,omitempty"`
Status FooStatus `json:"status,omitempty"`
}
type FooSpec struc{
Template <Deployment|DaemonSet|StatefulSet> `json:"template,omitempty"`
}
上面是模板示例。在此Template
可以是deployment或statefulSet或DaemonSet。
如何在golang中使用operator-sdk定义这样的CRD规范?
如何在协调循环中将Template
强制转换为实际对象(Deployment/DaemonSet/StatefulSet)?
1条答案
按热度按时间lymnna711#
一种选择是拆分模板类型并添加一个决定工作负载类型的字段。验证标记可用于指定工作负载的种类。
然后,您可以使用
reflect
包来比较您想要的工作负载和协调器中的实际工作负载。