【发布时间】:2023-01-31 21:39:05
【问题描述】:
我正在构建一个生成作业的应用程序 (batch/v1),我需要使用作业状态更新我的自定义资源状态。
我使用以下设置控制器:
func (r *JobsManagedByRequestedBackupActionObserver) SetupWithManager(mgr ctrl.Manager) error {
return ctrl.NewControllerManagedBy(mgr).
For(&riotkitorgv1alpha1.RequestedBackupAction{}).
Owns(&batchv1.Job{}).
Owns(&batchv1.CronJob{}).
WithEventFilter(predicate.Funcs{
DeleteFunc: func(e event.DeleteEvent) bool {
return false
},
}).
Complete(r)
}
在 Reconcile(ctx context.Context, req ctrl.Request) 期间,我获取我的 RequestedBackupAction 对象(基于“req”),然后我使用专用跟踪标签从 API 获取 Jobs。
list, err := kj.client.Jobs(namespace).List(ctx, metav1.ListOptions{LabelSelector: v1alpha1.LabelTrackingId + "=" + trackingId})
当我迭代对象时:
for _, job := range list.Items {
logrus.Errorf("[++++++++++++] JOB name=%s, failed=%v, active=%v, succeeded=%v", job.Name, job.Status.Failed, job.Status.Active, job.Status.Succeeded)
}
然后我得到多个这样的条目:
time="2022-12-12T20:00:55Z" level=error msg="[++++++++++++] JOB name=app1-backup-vmqrp, failed=0, active=1, succeeded=0"
但我最终没有得到一个条目,应该有:failed=1, active=0, succeeded=0 即使 Job 实际上完成了 - 关键是控制器没有收到通知。
这是最终的工作状态:
status:
conditions:
- lastProbeTime: "2022-12-12T20:00:56Z"
lastTransitionTime: "2022-12-12T20:00:56Z"
message: Job has reached the specified backoff limit
reason: BackoffLimitExceeded
status: "True"
type: Failed
failed: 1
ready: 0
startTime: "2022-12-12T20:00:50Z"
uncountedTerminatedPods: {}
有什么问题吗?
【问题讨论】:
标签: go kubernetes client-go kubebuilder