diff --git a/cmd/daemon/cniserver.go b/cmd/daemon/cniserver.go index bfffd736943..0716f44b278 100644 --- a/cmd/daemon/cniserver.go +++ b/cmd/daemon/cniserver.go @@ -54,7 +54,7 @@ func CmdMain() { if err = daemon.InitMirror(config); err != nil { util.LogFatalAndExit(err, "failed to initialize ovs mirror") } - + klog.Info("init node gw") if err = daemon.InitNodeGateway(config); err != nil { util.LogFatalAndExit(err, "failed to initialize node gateway") } @@ -80,6 +80,7 @@ func CmdMain() { podInformerFactory.Start(stopCh) nodeInformerFactory.Start(stopCh) kubeovnInformerFactory.Start(stopCh) + klog.Info("start daemon controller") go ctl.Run(stopCh) go daemon.RunServer(config, ctl) if err := mvCNIConf(config.CniConfDir, config.CniConfFile, config.CniConfName); err != nil { diff --git a/pkg/daemon/ovs.go b/pkg/daemon/ovs.go index ec7d5e4061e..bffcc5ab78a 100644 --- a/pkg/daemon/ovs.go +++ b/pkg/daemon/ovs.go @@ -25,17 +25,29 @@ func pingGateway(gw, src string, verbose bool, maxRetry int) error { pinger.Timeout = time.Duration(maxRetry) * time.Second pinger.Interval = time.Second - var success bool pinger.OnRecv = func(p *goping.Packet) { - success = true pinger.Stop() } - pinger.Run() + // long time keep ping may result in readiness probe failed when start + // show ping fails when gw not work + go func() { + for { + time.Sleep(3 * time.Second) + stats := pinger.Statistics() + if stats.PacketsSent >= pinger.Count { + break + } + if stats.PacketsRecv == 0 { + klog.Errorf("%s network not ready after %d ping %s, %v%% packet loss", src, stats.PacketsSent, gw, stats.PacketLoss) + } else { + break + } + } + }() + + pinger.Run() cniConnectivityResult.WithLabelValues(nodeName).Add(float64(pinger.PacketsSent)) - if !success { - return fmt.Errorf("%s network not ready after %d ping %s", src, maxRetry, gw) - } if verbose { klog.Infof("%s network ready after %d ping, gw %s", src, pinger.PacketsSent, gw) } diff --git a/pkg/daemon/ovs_linux.go b/pkg/daemon/ovs_linux.go index 5a359d003c2..f7c1e68a51c 100644 --- a/pkg/daemon/ovs_linux.go +++ b/pkg/daemon/ovs_linux.go @@ -339,7 +339,7 @@ func checkGatewayReady(gwCheckMode int, intr, ipAddr, gateway string, underlayGa var err error if gwCheckMode == gatewayCheckModeArpingNotConcerned || gwCheckMode == gatewayCheckModePingNotConcerned { - // ignore error while ‘disableGatewayCheck=true’ + // ignore error if disableGatewayCheck=true if err = waitNetworkReady(intr, ipAddr, gateway, underlayGateway, verbose, 1); err != nil { err = nil } @@ -404,7 +404,6 @@ func configureNodeNic(portName, ip, gw string, macAddr net.HardwareAddr, mtu int klog.Errorf("failed to init ovn0 check: %v", err) return err } - return nil } @@ -427,7 +426,7 @@ func (c *Controller) loopOvn0Check() { } ip := node.Annotations[util.IpAddressAnnotation] gw := node.Annotations[util.GatewayAnnotation] - if err := waitNetworkReady(util.NodeNic, ip, gw, false, false, gatewayCheckMaxRetry); err != nil { + if err := waitNetworkReady(util.NodeNic, ip, gw, false, false, 5); err != nil { util.LogFatalAndExit(err, "failed to ping ovn0 gateway %s", gw) } }