英文:
How to create Kubernetes objects with Status fields?
问题
我正在使用 Kubernetes Operator 在集群中创建自定义资源,CR 的 Status
字段已经填充,但是当对象被创建时,Status
字段为空。
这是我创建 CR 的方式:
reconcile.Create(ctx, &object)
这是我尝试使用 Kubernetes Operator 实现的目标:
英文:
I am using the kubernetes operator to create a custom resource in the cluster, the CR has the Status
field populated, but when the object gets created the Status
field is empty.
This is how I am creating the CR:
reconcile.Create(ctx, &object)
This is what I am trying to accomplish with k8s operator:
答案1
得分: 2
Kubernetes API和资源的架构遵循以下模式。
-
客户端可以通过指定“期望状态”(这是资源的
spec:
部分)来创建资源。这是发送给API服务器的“创建”请求。 -
控制器订阅/监视资源的更改,在“协调循环”中执行操作,它们可能会更新资源的状态(这是资源的
status:
部分)。
有关控制器如何实现并更新状态的示例,请参见Kubebuilder书籍:实现控制器-更新状态。
示例中的客户端是一个“控制器运行时客户端”:
"sigs.k8s.io/controller-runtime/pkg/client"
以下是更新status
子资源的示例代码:
if err := r.Status().Update(ctx, &cronJob); err != nil {
log.Error(err, "无法更新CronJob状态")
return ctrl.Result{}, err
}
英文:
The architecture of Kubernetes API and resources follows a pattern.
-
Clients may create resources, by specifying a desired state (This is the
spec:
part of a resource). This is a "create" request sent to the API Server. -
Controllers, subscribe/watch to changes of resources, while doing actions in a reconciliation loop, they might update the Status of the resource (this is the
status:
part of the resource).
For an example of how a controller is implemented and updates the status, see the Kubebuilder book: Implementing a Controller - Update the Status.
The client in the example is a "controller runtime client":
"sigs.k8s.io/controller-runtime/pkg/client"
Example code, where the reconciler updates the status
sub-resource:
if err := r.Status().Update(ctx, &cronJob); err != nil {
log.Error(err, "unable to update CronJob status")
return ctrl.Result{}, err
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论