Operator SDK - 更新 CreationTimestamp
Operator SDK - Update CreationTimestamp
我目前正在使用 Golang 和 Operator SDK 编写 Kubernetes Operator。
为了知道创建资源是否超时,我检查了我当前资源的 CreationTimestamp
属性。成功 Update
后,我想更新该资源的 CreationTimestamp
,但是当我这样做时,什么也没有发生,CreationTimestamp
保持不变...
我的 Reconcile
循环看起来像这样:
func (r *MyReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
myObject := &v1alpha1.My{}
err := r.Get(ctx, req.NamespacedName, myObject)
if err != nil {
// do something
}
//if marked to be deleted
//do something
//...
//if marked to be updated
myObject.SetCreationTimestamp(v1.Now())
err = r.Update(ctx, configMap) //updates all fields that I changed except for CreationTimestamp...
if err != nil {
println("ERR:", err.Error()) //doesnt get thrown
}
println(myObject.CreationTimestamp) //still the old timestamp instead of v1.Now()
//...
}
或者是否有任何其他方法可以跟踪上次协调资源的时间?
我认为没有办法实现这一点,但我找到了解决方法。
在您的 CRD
中,字段 metadata.annotations
可以将信息存储在 map[string]string
中,不会被覆盖。
所以我创建了一个名为 CreationTimestamp
的字段,并使用 myObject.ObjectMeta.Annotations["creationTimestamp"]
在我的 go 代码中检索它。
我可以像这样更新值:myObject.ObjectMeta.Annotations["creationTimestamp"] = "newvalue"
然后执行 Update
来保存更改
我目前正在使用 Golang 和 Operator SDK 编写 Kubernetes Operator。
为了知道创建资源是否超时,我检查了我当前资源的 CreationTimestamp
属性。成功 Update
后,我想更新该资源的 CreationTimestamp
,但是当我这样做时,什么也没有发生,CreationTimestamp
保持不变...
我的 Reconcile
循环看起来像这样:
func (r *MyReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
myObject := &v1alpha1.My{}
err := r.Get(ctx, req.NamespacedName, myObject)
if err != nil {
// do something
}
//if marked to be deleted
//do something
//...
//if marked to be updated
myObject.SetCreationTimestamp(v1.Now())
err = r.Update(ctx, configMap) //updates all fields that I changed except for CreationTimestamp...
if err != nil {
println("ERR:", err.Error()) //doesnt get thrown
}
println(myObject.CreationTimestamp) //still the old timestamp instead of v1.Now()
//...
}
或者是否有任何其他方法可以跟踪上次协调资源的时间?
我认为没有办法实现这一点,但我找到了解决方法。
在您的 CRD
中,字段 metadata.annotations
可以将信息存储在 map[string]string
中,不会被覆盖。
所以我创建了一个名为 CreationTimestamp
的字段,并使用 myObject.ObjectMeta.Annotations["creationTimestamp"]
在我的 go 代码中检索它。
我可以像这样更新值:myObject.ObjectMeta.Annotations["creationTimestamp"] = "newvalue"
然后执行 Update
来保存更改