Skip to content

Commit

Permalink
cni wait for backup pod ip to be created
Browse files Browse the repository at this point in the history
  • Loading branch information
bobz965 committed Aug 16, 2023
1 parent 5e6e472 commit 092383e
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 22 deletions.
11 changes: 6 additions & 5 deletions pkg/controller/pod.go
Original file line number Diff line number Diff line change
Expand Up @@ -215,12 +215,12 @@ func (c *Controller) enqueueAddPod(obj interface{}) {
return
}

exist, err := c.podNeedSync(p)
need, err := c.podNeedSync(p)
if err != nil {
klog.Errorf("invalid pod net: %v", err)
return
}
if exist {
if need {
klog.Infof("enqueue add pod %s", key)
c.addOrUpdatePodQueue.Add(key)
}
Expand Down Expand Up @@ -1268,9 +1268,10 @@ func (c *Controller) podNeedSync(pod *v1.Pod) (bool, error) {
}
ipName := ovs.PodNameToPortName(pod.Name, pod.Namespace, n.ProviderName)
if _, err = c.ipsLister.Get(ipName); err != nil {
errMsg := fmt.Errorf("failed to get ip CR %s: %v", ipName, err)
klog.Error(errMsg)
return true, errMsg
err = fmt.Errorf("pod has no ip %s: %v", ipName, err)
// need to sync to create ip
klog.Error(err)
return true, nil
}
}
return false, nil
Expand Down
42 changes: 25 additions & 17 deletions pkg/daemon/handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -331,25 +331,33 @@ func (csh cniServerHandler) handleAdd(req *restful.Request, resp *restful.Respon

func (csh cniServerHandler) UpdateIPCr(podRequest request.CniRequest, subnet, ip string) error {
ipCrName := ovs.PodNameToPortName(podRequest.PodName, podRequest.PodNamespace, podRequest.Provider)
oriIpCr, err := csh.KubeOvnClient.KubeovnV1().IPs().Get(context.Background(), ipCrName, metav1.GetOptions{})
if err != nil {
errMsg := fmt.Errorf("failed to get ip crd for %s, %v", ip, err)
klog.Error(errMsg)
return errMsg
} else {
ipCr := oriIpCr.DeepCopy()
ipCr.Spec.NodeName = csh.Config.NodeName
ipCr.Spec.AttachIPs = []string{}
ipCr.Labels[subnet] = ""
ipCr.Spec.AttachSubnets = []string{}
ipCr.Spec.AttachMacs = []string{}
if _, err := csh.KubeOvnClient.KubeovnV1().IPs().Update(context.Background(), ipCr, metav1.UpdateOptions{}); err != nil {
errMsg := fmt.Errorf("failed to update ip crd for %s, %v", ip, err)
klog.Error(errMsg)
return errMsg
var err error
for i := 0; i < 20; i++ {
oriIpCr, err := csh.KubeOvnClient.KubeovnV1().IPs().Get(context.Background(), ipCrName, metav1.GetOptions{})
if err != nil {
err = fmt.Errorf("failed to get ip crd for %s, %v", ip, err)
// maybe create a backup pod with previous annotations
klog.Error(err)
} else {
ipCr := oriIpCr.DeepCopy()
ipCr.Spec.NodeName = csh.Config.NodeName
ipCr.Spec.AttachIPs = []string{}
ipCr.Labels[subnet] = ""
ipCr.Spec.AttachSubnets = []string{}
ipCr.Spec.AttachMacs = []string{}
if _, err := csh.KubeOvnClient.KubeovnV1().IPs().Update(context.Background(), ipCr, metav1.UpdateOptions{}); err != nil {
err = fmt.Errorf("failed to update ip crd for %s, %v", ip, err)
klog.Error(err)
} else {
return nil
}
}
if err != nil {
klog.Warning("wait pod ip %s to be ready", ipCrName)
time.Sleep(1 * time.Second)
}
}
return nil
return err
}

func (csh cniServerHandler) handleDel(req *restful.Request, resp *restful.Response) {
Expand Down

0 comments on commit 092383e

Please sign in to comment.