From 5e77777d8bd7ea91ced18d8c92e409e2bec80e67 Mon Sep 17 00:00:00 2001 From: zhangzujian Date: Tue, 16 Aug 2022 09:47:26 +0800 Subject: [PATCH 1/2] initialize IPAM from IP CR with empty PodType for sts Pods --- pkg/controller/init.go | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/pkg/controller/init.go b/pkg/controller/init.go index d45ddf8db47..db7412b2520 100644 --- a/pkg/controller/init.go +++ b/pkg/controller/init.go @@ -344,7 +344,13 @@ func (c *Controller) InitIPAM() error { } for _, pod := range pods { - if pod.Spec.HostNetwork || !isPodAlive(pod) { + if pod.Spec.HostNetwork { + continue + } + + isAlive := isPodAlive(pod) + isStsPod, _ := isStatefulSetPod(pod) + if !isAlive && !isStsPod { continue } @@ -363,6 +369,13 @@ func (c *Controller) InitIPAM() error { } if pod.Annotations[fmt.Sprintf(util.AllocatedAnnotationTemplate, podNet.ProviderName)] == "true" { portName := ovs.PodNameToPortName(podName, pod.Namespace, podNet.ProviderName) + if !isAlive && isStsPod { + if ipCR := ipsMap[portName]; ipCR != nil && ipCR.Spec.PodType == "" { + if _, _, _, err = c.ipam.GetStaticAddress(key, ipCR.Spec.IPAddress, ipCR.Spec.MacAddress, ipCR.Spec.Subnet); err != nil { + klog.Errorf("failed to init IPAM from IP CR %s: %v", ipCR.Name, err) + } + } + } ip := pod.Annotations[fmt.Sprintf(util.IpAddressAnnotationTemplate, podNet.ProviderName)] mac := pod.Annotations[fmt.Sprintf(util.MacAddressAnnotationTemplate, podNet.ProviderName)] subnet := pod.Annotations[fmt.Sprintf(util.LogicalSwitchAnnotationTemplate, podNet.ProviderName)] From 90c84ef806286d762a08273fd3ad77638008a657 Mon Sep 17 00:00:00 2001 From: zhangzujian Date: Tue, 16 Aug 2022 09:52:29 +0800 Subject: [PATCH 2/2] some fixes --- pkg/controller/init.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkg/controller/init.go b/pkg/controller/init.go index db7412b2520..11453477c12 100644 --- a/pkg/controller/init.go +++ b/pkg/controller/init.go @@ -371,10 +371,11 @@ func (c *Controller) InitIPAM() error { portName := ovs.PodNameToPortName(podName, pod.Namespace, podNet.ProviderName) if !isAlive && isStsPod { if ipCR := ipsMap[portName]; ipCR != nil && ipCR.Spec.PodType == "" { - if _, _, _, err = c.ipam.GetStaticAddress(key, ipCR.Spec.IPAddress, ipCR.Spec.MacAddress, ipCR.Spec.Subnet); err != nil { + if _, _, _, err = c.ipam.GetStaticAddress(key, ipCR.Name, ipCR.Spec.IPAddress, ipCR.Spec.MacAddress, ipCR.Spec.Subnet, true); err != nil { klog.Errorf("failed to init IPAM from IP CR %s: %v", ipCR.Name, err) } } + continue } ip := pod.Annotations[fmt.Sprintf(util.IpAddressAnnotationTemplate, podNet.ProviderName)] mac := pod.Annotations[fmt.Sprintf(util.MacAddressAnnotationTemplate, podNet.ProviderName)]