From 704c98dae9620a837316b006f8cb5145f7d9dab2 Mon Sep 17 00:00:00 2001 From: BruceAko Date: Tue, 2 Apr 2024 22:46:50 +0800 Subject: [PATCH] fix: pod-readiness-controller use Patch to modify Pod --- .../podreadiness/pod_readiness_controller.go | 26 ++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/pkg/controller/podreadiness/pod_readiness_controller.go b/pkg/controller/podreadiness/pod_readiness_controller.go index 06867bc135..2972f679e6 100644 --- a/pkg/controller/podreadiness/pod_readiness_controller.go +++ b/pkg/controller/podreadiness/pod_readiness_controller.go @@ -18,6 +18,8 @@ package podreadiness import ( "context" + "encoding/json" + "fmt" "time" appspub "github.com/openkruise/kruise/apis/apps/pub" @@ -27,6 +29,7 @@ import ( v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/types" "k8s.io/client-go/util/retry" "k8s.io/klog/v2" "sigs.k8s.io/controller-runtime/pkg/client" @@ -129,12 +132,23 @@ func (r *ReconcilePodReadiness) Reconcile(_ context.Context, request reconcile.R return nil } - pod.Status.Conditions = append(pod.Status.Conditions, v1.PodCondition{ - Type: appspub.KruisePodReadyConditionType, - Status: v1.ConditionTrue, - LastTransitionTime: metav1.Now(), - }) - return r.Status().Update(context.TODO(), pod) + // patch pod condition + status := v1.PodStatus{ + Conditions: []v1.PodCondition{ + { + Type: appspub.KruisePodReadyConditionType, + Status: v1.ConditionTrue, + LastTransitionTime: metav1.Now(), + }, + }, + } + by, _ := json.Marshal(status) + patchBody := fmt.Sprintf(`{"status":%s}`, string(by)) + rcvObject := &v1.Pod{ObjectMeta: metav1.ObjectMeta{Namespace: pod.Namespace, Name: pod.Name}} + if err := r.Status().Patch(context.TODO(), rcvObject, client.RawPatch(types.StrategicMergePatchType, []byte(patchBody))); err != nil { + return fmt.Errorf("failed to patch pod status: %v", err) + } + return nil }) return reconcile.Result{}, err }