From 2abcd2052618c2528eaf0b098b0c2b9050b5d6e1 Mon Sep 17 00:00:00 2001 From: liuminghao03 Date: Wed, 7 Jun 2023 21:11:33 +0800 Subject: [PATCH] add events for pod when it's sidecar is not upgradable #1272 --- .../sidecarset/sidecarset_processor.go | 3 ++- .../sidecarset/sidecarset_strategy.go | 19 +++++++++++++++---- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/pkg/controller/sidecarset/sidecarset_processor.go b/pkg/controller/sidecarset/sidecarset_processor.go index 0d50e31553..3c64ea4de2 100644 --- a/pkg/controller/sidecarset/sidecarset_processor.go +++ b/pkg/controller/sidecarset/sidecarset_processor.go @@ -155,11 +155,12 @@ func (p *Processor) UpdateSidecarSet(sidecarSet *appsv1alpha1.SidecarSet) (recon func (p *Processor) updatePods(control sidecarcontrol.SidecarControl, pods []*corev1.Pod) error { sidecarset := control.GetSidecarset() // compute next updated pods based on the sidecarset upgrade strategy - upgradePods := NewStrategy().GetNextUpgradePods(control, pods) + upgradePods, _ := NewStrategy().GetNextUpgradePods(control, pods) if len(upgradePods) == 0 { klog.V(3).Infof("sidecarSet next update is nil, skip this round, name: %s", sidecarset.Name) return nil } + // TODO add sidecarSet update event(question: should we add sidecar event or pod event?) // mark upgrade pods list podNames := make([]string, 0, len(upgradePods)) // upgrade pod sidecar diff --git a/pkg/controller/sidecarset/sidecarset_strategy.go b/pkg/controller/sidecarset/sidecarset_strategy.go index edb14d0295..d5d72accd2 100644 --- a/pkg/controller/sidecarset/sidecarset_strategy.go +++ b/pkg/controller/sidecarset/sidecarset_strategy.go @@ -22,7 +22,8 @@ type Strategy interface { //2. Sort Pods with default sequence //3. sort waitUpdateIndexes based on the scatter rules //4. calculate max count of pods can update with maxUnavailable - GetNextUpgradePods(control sidecarcontrol.SidecarControl, pods []*corev1.Pod) []*corev1.Pod + //5. also return the pods that cannot be updated + GetNextUpgradePods(control sidecarcontrol.SidecarControl, pods []*corev1.Pod) (upgradePods []*corev1.Pod, skippedPods []*corev1.Pod) } type spreadingStrategy struct{} @@ -35,10 +36,12 @@ func NewStrategy() Strategy { return globalSpreadingStrategy } -func (p *spreadingStrategy) GetNextUpgradePods(control sidecarcontrol.SidecarControl, pods []*corev1.Pod) (upgradePods []*corev1.Pod) { +func (p *spreadingStrategy) GetNextUpgradePods(control sidecarcontrol.SidecarControl, pods []*corev1.Pod) (upgradePods []*corev1.Pod, skippedPods []*corev1.Pod) { sidecarset := control.GetSidecarset() // wait to upgrade pod index var waitUpgradedIndexes []int + // the pod that cannot be upgraded, will be skipped + var skippedIndexes []int strategy := sidecarset.Spec.UpdateStrategy // If selector is not nil, check whether the pods is selected to upgrade @@ -68,8 +71,12 @@ func (p *spreadingStrategy) GetNextUpgradePods(control sidecarcontrol.SidecarCon // * It is to determine whether there are other fields that have been modified for pod. for index, pod := range pods { isUpdated := sidecarcontrol.IsPodSidecarUpdated(sidecarset, pod) - if !isUpdated && isSelected(pod) && control.IsSidecarSetUpgradable(pod) { - waitUpgradedIndexes = append(waitUpgradedIndexes, index) + if !isUpdated && isSelected(pod) { + if control.IsSidecarSetUpgradable(pod) { + waitUpgradedIndexes = append(waitUpgradedIndexes, index) + } else { + skippedIndexes = append(skippedIndexes, index) + } } } @@ -87,6 +94,10 @@ func (p *spreadingStrategy) GetNextUpgradePods(control sidecarcontrol.SidecarCon for _, idx := range waitUpgradedIndexes { upgradePods = append(upgradePods, pods[idx]) } + // 5. skippedPods will not be upgraded in the following process + for _, idx := range skippedIndexes { + skippedPods = append(skippedPods, pods[idx]) + } return }