我正在使用Kubernetes操作符在集群中创建自定义资源,CR填充了Status字段,但在创建对象时,Status字段为空.

这就是我创建CR的方式:

reconcile.Create(ctx, &object)

这就是我试图通过K8S运营商实现的目标:

enter image description here

推荐答案

Kubernetes API和资源的架构遵循一个模式.

  1. 客户端可以通过指定desired state(这是资源的spec:部分)来创建资源.这是一个发送到API服务器的"创建"请求.

  2. 控制器订阅/监视资源的变化,当在reconciliation loop中执行操作时,它们可能更新资源的状态(这是资源的status:部分).

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

示例中的客户端是一个"控制器运行时客户端":

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

示例代码,其中reconciler更新status个子资源:

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

Go相关问答推荐

Zitadel示例Go Webapp加密密钥

GitHub发布Golang子模块

GoFR HTTP服务初始化中Open遥测传输和超时配置的说明

在Mac中使用uname获取处理器体系 struct 时,在为AMD64构建Go二进制时出现错误结果

如何在围棋中从多部分.Part中获取多部分.文件而不保存到磁盘?

不接受来自 stdin 的重复输入

调用库和直接操作效率有区别吗?

Go-如何在递归函数中关闭通道

如何将Golang测试用例的测试覆盖率值与特定阈值进行比较

如何用mpb创建两行进度条?

Opensearch 错误 ping 弹性服务器:由未知权威签署的 x509 证书

如何在 `hashicorp / terraform-exec` 中将 `ApplyConfig` 传递给 `tf.Apply()`?

在密钥不存在时处理 PATCH 部分更新

每次有人进入我的网站时如何运行特定功能?

go:识别重新定义标志的包

Golang 数据库/sql 与 SetMaxOpenConns 挂起

使用 xml.Name 将 xml 解组为 [] struct

如何在 Go 中使用 Pact 返回错误请求(400、500)?

如何使用 context.WithCancel 启动和停止每个会话的心跳?

如何将类型转换为字节数组golang