From 339622629f485788cd6393c19c81aac23e45f519 Mon Sep 17 00:00:00 2001 From: Aylei Date: Thu, 22 Aug 2024 16:48:12 +0800 Subject: [PATCH] fix: direct pod should be rollout Signed-off-by: Aylei --- pkg/controllers/cnpool/controller.go | 32 ++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/pkg/controllers/cnpool/controller.go b/pkg/controllers/cnpool/controller.go index e038e870..49e9fd49 100644 --- a/pkg/controllers/cnpool/controller.go +++ b/pkg/controllers/cnpool/controller.go @@ -77,6 +77,17 @@ func (r *Actor) Sync(ctx *recon.Context[*v1alpha1.CNPool]) error { } totalPods += legacyReplicas } + if err := iterateDirectLivePods(ctx, p, func(p *corev1.Pod) error { + // outdated direct pod, mark it + if p.Labels[common.InstanceLabelKey] != desired.Name { + if err := r.reclaimLegacyCNClaim(ctx, p); err != nil { + return err + } + } + return nil + }); err != nil { + return errors.Wrap(err, 0) + } var inUse int32 var idlePods []*corev1.Pod @@ -279,6 +290,27 @@ func iterateCNSetLivePods(cli recon.KubeClient, cnSet *v1alpha1.CNSet, fn func(p return nil } +func iterateDirectLivePods(cli recon.KubeClient, pool *v1alpha1.CNPool, fn func(p *corev1.Pod) error) error { + podList := &corev1.PodList{} + if err := cli.List(podList, client.InNamespace(pool.Namespace), client.MatchingLabels(map[string]string{ + v1alpha1.PoolNameLabel: pool.Name, + v1alpha1.DirectPodLabel: "y", + })); err != nil { + return errors.Wrap(err, 0) + } + for i := range podList.Items { + p := &podList.Items[i] + if p.DeletionTimestamp != nil { + // Pod deleted, skip + continue + } + if err := fn(p); err != nil { + return err + } + } + return nil +} + func buildCNSet(p *v1alpha1.CNPool) (*v1alpha1.CNSet, error) { csSpec := p.Spec.Template.DeepCopy() syncCNSetSpec(p, csSpec)