@@ -9,19 +9,20 @@ import (
9
9
"path"
10
10
"path/filepath"
11
11
"regexp"
12
+ "strconv"
12
13
"strings"
13
14
"syscall"
14
15
"time"
15
16
16
- "strconv"
17
-
18
17
"github.com/Mellanox/sriovnet"
19
18
sriovutilfs "github.com/Mellanox/sriovnet/pkg/utils/filesystem"
20
19
"github.com/containernetworking/plugins/pkg/ns"
21
20
"github.com/containernetworking/plugins/pkg/utils/sysctl"
22
21
"github.com/vishvananda/netlink"
23
22
"golang.org/x/sys/unix"
23
+ corev1 "k8s.io/api/core/v1"
24
24
"k8s.io/apimachinery/pkg/types"
25
+ "k8s.io/client-go/kubernetes"
25
26
"k8s.io/klog/v2"
26
27
27
28
kubeovnv1 "github.com/kubeovn/kube-ovn/pkg/apis/kubeovn/v1"
@@ -419,7 +420,6 @@ func configureContainerNic(nicName, ifName string, ipAddr, gateway string, isDef
419
420
}
420
421
421
422
return ns .WithNetNSPath (netns .Path (), func (_ ns.NetNS ) error {
422
-
423
423
if nicType != util .InternalType {
424
424
if err = netlink .LinkSetName (containerLink , ifName ); err != nil {
425
425
klog .Error (err )
@@ -610,7 +610,7 @@ func waitNetworkReady(nic, ipAddr, gateway string, underlayGateway, verbose bool
610
610
return nil
611
611
}
612
612
613
- func configureNodeNic (portName , ip , gw , joinCIDR string , macAddr net.HardwareAddr , mtu int ) error {
613
+ func configureNodeNic (cs kubernetes. Interface , nodeName , portName , ip , gw , joinCIDR string , macAddr net.HardwareAddr , mtu int ) error {
614
614
ipStr := util .GetIpWithoutMask (ip )
615
615
raw , err := ovs .Exec (ovs .MayExist , "add-port" , "br-int" , util .NodeNic , "--" ,
616
616
"set" , "interface" , util .NodeNic , "type=internal" , "--" ,
@@ -687,13 +687,21 @@ func configureNodeNic(portName, ip, gw, joinCIDR string, macAddr net.HardwareAdd
687
687
}
688
688
689
689
// ping ovn0 gw to activate the flow
690
- klog .Infof ("wait ovn0 gw ready" )
691
- if err := waitNetworkReady (util .NodeNic , ip , gw , false , true , gatewayCheckMaxRetry ); err != nil {
690
+ klog .Info ("wait ovn0 gw ready" )
691
+ status := corev1 .ConditionFalse
692
+ reason := "JoinSubnetGatewayReachable"
693
+ message := fmt .Sprintf ("ping check to gateway ip %s succeeded" , gw )
694
+ if err = waitNetworkReady (util .NodeNic , ip , gw , false , true , gatewayCheckMaxRetry ); err != nil {
692
695
klog .Errorf ("failed to init ovn0 check: %v" , err )
693
- return err
696
+ status = corev1 .ConditionTrue
697
+ reason = "JoinSubnetGatewayUnreachable"
698
+ message = fmt .Sprintf ("ping check to gateway ip %s failed" , gw )
699
+ }
700
+ if err := util .SetNodeNetworkUnavailableCondition (cs , nodeName , status , reason , message ); err != nil {
701
+ klog .Errorf ("failed to set node network unavailable condition: %v" , err )
694
702
}
695
703
696
- return nil
704
+ return err
697
705
}
698
706
699
707
// If OVS restart, the ovn0 port will down and prevent host to pod network,
@@ -715,7 +723,31 @@ func (c *Controller) loopOvn0Check() {
715
723
}
716
724
ip := node .Annotations [util .IpAddressAnnotation ]
717
725
gw := node .Annotations [util .GatewayAnnotation ]
718
- if err := waitNetworkReady (util .NodeNic , ip , gw , false , false , gatewayCheckMaxRetry ); err != nil {
726
+ status := corev1 .ConditionFalse
727
+ reason := "JoinSubnetGatewayReachable"
728
+ message := fmt .Sprintf ("ping check to gateway ip %s succeeded" , gw )
729
+ if err = waitNetworkReady (util .NodeNic , ip , gw , false , false , 5 ); err != nil {
730
+ klog .Errorf ("failed to init ovn0 check: %v" , err )
731
+ status = corev1 .ConditionTrue
732
+ reason = "JoinSubnetGatewayUnreachable"
733
+ message = fmt .Sprintf ("ping check to gateway ip %s failed" , gw )
734
+ }
735
+
736
+ var alreadySet bool
737
+ for _ , condition := range node .Status .Conditions {
738
+ if condition .Type == corev1 .NodeNetworkUnavailable && condition .Status == corev1 .ConditionTrue &&
739
+ condition .Reason == reason && condition .Message == message {
740
+ alreadySet = true
741
+ break
742
+ }
743
+ }
744
+ if ! alreadySet {
745
+ if err := util .SetNodeNetworkUnavailableCondition (c .config .KubeClient , c .config .NodeName , status , reason , message ); err != nil {
746
+ klog .Errorf ("failed to set node network unavailable condition: %v" , err )
747
+ }
748
+ }
749
+
750
+ if err != nil {
719
751
util .LogFatalAndExit (err , "failed to ping ovn0 gateway %s" , gw )
720
752
}
721
753
}
@@ -1162,7 +1194,7 @@ func setupVethPair(containerID, ifName string, mtu int) (string, string, error)
1162
1194
// Setup sriov interface in the pod
1163
1195
// https://github.com/ovn-org/ovn-kubernetes/commit/6c96467d0d3e58cab05641293d1c1b75e5914795
1164
1196
func setupSriovInterface (containerID , deviceID , vfDriver , ifName string , mtu int , mac string ) (string , string , error ) {
1165
- var isVfioPciDriver = false
1197
+ isVfioPciDriver : = false
1166
1198
if vfDriver == "vfio-pci" {
1167
1199
matches , err := filepath .Glob (filepath .Join (util .VfioSysDir , "*" ))
1168
1200
if err != nil {
0 commit comments