登录
首页 >  Golang >  Go问答

如何创建带有 Status 字段的 Kubernetes 对象?

来源:stackoverflow

时间:2024-03-16 20:27:29 329浏览 收藏

在 Kubernetes 中创建自定义资源时,如果使用 `reconcile.Create` 方法,则创建的对象中不会包含 `status` 字段。这是因为 `status` 字段由 Kubernetes 控制器负责更新,而不是客户端在创建资源时指定。控制器在协调循环中监视资源的变化,并根据需要更新其状态。

问题内容

我使用 kubernetes 运算符在集群中创建自定义资源,cr 填充了 status 字段,但创建对象时 status 字段为空。

这就是我创建 cr 的方式:

reconcile.Create(ctx, &object)

这就是我试图用 k8s 运算符实现的目标:


正确答案


kubernetes api 和资源的架构遵循一定的模式。

  1. 客户端可以通过指定所需状态来创建资源(这是资源的 spec: 部分)。这是发送到 api 服务器的“创建”请求。

  2. 控制器订阅/监视资源的更改,在协调循环中执行操作时,它们可能会更新资源的状态(这是资源的 status: 部分) )。

有关如何实现控制器和更新状态的示例,请参阅 Kubebuilder book: Implementing a Controller - Update the Status

示例中的客户端是“控制器运行时客户端”:

"sigs.k8s.io/controller-runtime/pkg/client"

示例代码,其中协调器更新 status 子资源:

if err := r.Status().Update(ctx, &cronJob); err != nil {
    log.Error(err, "unable to update CronJob status")
    return ctrl.Result{}, err
}

以上就是《如何创建带有 Status 字段的 Kubernetes 对象?》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>