Skip to content

Commit

Permalink
fix: nbctl need timeout to avoid hang infinitely
Browse files Browse the repository at this point in the history
(cherry picked from commit d3c6a71)
  • Loading branch information
oilbeater committed Nov 29, 2019
1 parent dd63c5a commit e0fbfea
Show file tree
Hide file tree
Showing 8 changed files with 32 additions and 17 deletions.
9 changes: 7 additions & 2 deletions cmd/daemon/cniserver.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package main

import (
"fmt"
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"net/http"
_ "net/http/pprof"
"time"
Expand Down Expand Up @@ -34,8 +35,12 @@ func main() {
}

stopCh := signals.SetupSignalHandler()
kubeInformerFactory := kubeinformers.NewSharedInformerFactory(config.KubeClient, time.Second*30)
kubeovnInformerFactory := kubeovninformer.NewSharedInformerFactoryWithOptions(config.KubeOvnClient, time.Second*30)
kubeInformerFactory := kubeinformers.NewSharedInformerFactoryWithOptions(config.KubeClient, 0,
kubeinformers.WithTweakListOptions(func(listOption *v1.ListOptions) {
listOption.FieldSelector = fmt.Sprintf("spec.nodeName=%s", config.NodeName)
listOption.AllowWatchBookmarks = true
}))
kubeovnInformerFactory := kubeovninformer.NewSharedInformerFactoryWithOptions(config.KubeOvnClient, 0)
ctl, err := daemon.NewController(config, kubeInformerFactory, kubeovnInformerFactory)
if err != nil {
klog.Fatalf("create controller failed %v", err)
Expand Down
17 changes: 10 additions & 7 deletions cmd/webhook/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,13 +34,15 @@ func init() {

func main() {
var (
port int
ovnNbHost string
ovnNbPort int
defaultLS string
port int
ovnNbHost string
ovnNbPort int
ovnNbTimeout int
defaultLS string
)
flag.IntVar(&port, "port", 8443, "The port webhook listen on.")
flag.IntVar(&ovnNbPort, "ovn-nb-port", 6641, "OVN nb port")
flag.IntVar(&ovnNbTimeout, "ovn-nb-timeout", 30, "OVN nb timeout")
flag.StringVar(&ovnNbHost, "ovn-nb-host", "0.0.0.0", "OVN nb host")
flag.StringVar(&defaultLS, "default-ls", "ovn-default", "The default logical switch name, default: ovn-default")

Expand All @@ -66,9 +68,10 @@ func main() {
}

opt := &ovnwebhook.WebhookOptions{
OvnNbHost: ovnNbHost,
OvnNbPort: ovnNbPort,
DefaultLS: defaultLS,
OvnNbHost: ovnNbHost,
OvnNbPort: ovnNbPort,
OvnNbTimeout: ovnNbTimeout,
DefaultLS: defaultLS,
}
validatingHook, err := ovnwebhook.NewValidatingHook(mgr.GetCache(), opt)
if err != nil {
Expand Down
3 changes: 3 additions & 0 deletions pkg/controller/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ type Configuration struct {
OvnNbSocket string
OvnNbHost string
OvnNbPort int
OvnNbTimeout int
KubeConfigFile string
KubeClient kubernetes.Interface
KubeOvnClient clientset.Interface
Expand Down Expand Up @@ -50,6 +51,7 @@ func ParseFlags() (*Configuration, error) {
argOvnNbSocket = pflag.String("ovn-nb-socket", "", "The ovn-nb socket file. (If not set use ovn-nb-address)")
argOvnNbHost = pflag.String("ovn-nb-host", "0.0.0.0", "The ovn-nb host address. (If not set use ovn-nb-socket)")
argOvnNbPort = pflag.Int("ovn-nb-port", 6641, "")
argOvnNbTimeout = pflag.Int("ovn-nb-timeout", 30, "")
argKubeConfigFile = pflag.String("kubeconfig", "", "Path to kubeconfig file with authorization and master location information. If not set use the inCluster token.")

argDefaultLogicalSwitch = pflag.String("default-ls", "ovn-default", "The default logical switch name, default: ovn-default")
Expand Down Expand Up @@ -91,6 +93,7 @@ func ParseFlags() (*Configuration, error) {
OvnNbSocket: *argOvnNbSocket,
OvnNbHost: *argOvnNbHost,
OvnNbPort: *argOvnNbPort,
OvnNbTimeout: *argOvnNbTimeout,
KubeConfigFile: *argKubeConfigFile,
DefaultLogicalSwitch: *argDefaultLogicalSwitch,
DefaultCIDR: *argDefaultCIDR,
Expand Down
2 changes: 1 addition & 1 deletion pkg/controller/controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ func NewController(config *Configuration) *Controller {

controller := &Controller{
config: config,
ovnClient: ovs.NewClient(config.OvnNbHost, config.OvnNbPort, "", 0, config.ClusterRouter, config.ClusterTcpLoadBalancer, config.ClusterUdpLoadBalancer, config.NodeSwitch, config.NodeSwitchCIDR),
ovnClient: ovs.NewClient(config.OvnNbHost, config.OvnNbPort, config.OvnNbTimeout, "", 0, config.ClusterRouter, config.ClusterTcpLoadBalancer, config.ClusterUdpLoadBalancer, config.NodeSwitch, config.NodeSwitchCIDR),

subnetsLister: subnetInformer.Lister(),
subnetSynced: subnetInformer.Informer().HasSynced,
Expand Down
4 changes: 2 additions & 2 deletions pkg/controller/init.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ func InitNodeSwitch(config *Configuration) error {

// InitClusterRouter init cluster router to connect different logical switches
func InitClusterRouter(config *Configuration) error {
client := ovs.NewClient(config.OvnNbHost, config.OvnNbPort, "", 0, config.ClusterRouter, config.ClusterTcpLoadBalancer, config.ClusterUdpLoadBalancer, config.NodeSwitch, config.NodeSwitchCIDR)
client := ovs.NewClient(config.OvnNbHost, config.OvnNbPort, config.OvnNbTimeout, "", 0, config.ClusterRouter, config.ClusterTcpLoadBalancer, config.ClusterUdpLoadBalancer, config.NodeSwitch, config.NodeSwitchCIDR)
lrs, err := client.ListLogicalRouter()
if err != nil {
return err
Expand All @@ -84,7 +84,7 @@ func InitClusterRouter(config *Configuration) error {

// InitLoadBalancer init the default tcp and udp cluster loadbalancer
func InitLoadBalancer(config *Configuration) error {
client := ovs.NewClient(config.OvnNbHost, config.OvnNbPort, "", 0, config.ClusterRouter, config.ClusterTcpLoadBalancer, config.ClusterUdpLoadBalancer, config.NodeSwitch, config.NodeSwitchCIDR)
client := ovs.NewClient(config.OvnNbHost, config.OvnNbPort, config.OvnNbTimeout, "", 0, config.ClusterRouter, config.ClusterTcpLoadBalancer, config.ClusterUdpLoadBalancer, config.NodeSwitch, config.NodeSwitchCIDR)
tcpLb, err := client.FindLoadbalancer(config.ClusterTcpLoadBalancer)
if err != nil {
return fmt.Errorf("failed to find tcp lb %v", err)
Expand Down
1 change: 1 addition & 0 deletions pkg/ovs/ovn-nbctl.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import (

func (c Client) ovnNbCommand(cmdArgs ...string) (string, error) {
start := time.Now()
cmdArgs = append([]string{fmt.Sprintf("--timeout=%d", c.OvnNbTimeout)}, cmdArgs...)
raw, err := exec.Command(OvnNbCtl, cmdArgs...).CombinedOutput()
elapsed := float64((time.Since(start)) / time.Millisecond)
klog.Infof("%s command %s in %vms", OvnNbCtl, strings.Join(cmdArgs, " "), elapsed)
Expand Down
4 changes: 3 additions & 1 deletion pkg/ovs/ovn.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ var (
// Client is the ovn client
type Client struct {
OvnNbAddress string
OvnNbTimeout int
OvnSbAddress string
ClusterRouter string
ClusterTcpLoadBalancer string
Expand All @@ -31,10 +32,11 @@ const (
)

// NewClient init an ovn client
func NewClient(ovnNbHost string, ovnNbPort int, ovnSbHost string, ovnSbPort int, clusterRouter, clusterTcpLoadBalancer, clusterUdpLoadBalancer, nodeSwitch, nodeSwitchCIDR string) *Client {
func NewClient(ovnNbHost string, ovnNbPort int, ovnNbTimeout int, ovnSbHost string, ovnSbPort int, clusterRouter, clusterTcpLoadBalancer, clusterUdpLoadBalancer, nodeSwitch, nodeSwitchCIDR string) *Client {
return &Client{
OvnNbAddress: fmt.Sprintf("tcp:%s:%d", ovnNbHost, ovnNbPort),
OvnSbAddress: fmt.Sprintf("tcp:%s:%d", ovnSbHost, ovnSbPort),
OvnNbTimeout: ovnNbTimeout,
ClusterRouter: clusterRouter,
ClusterTcpLoadBalancer: clusterTcpLoadBalancer,
ClusterUdpLoadBalancer: clusterUdpLoadBalancer,
Expand Down
9 changes: 5 additions & 4 deletions pkg/webhook/webhook.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,10 @@ type ValidatingHook struct {
}

type WebhookOptions struct {
OvnNbHost string
OvnNbPort int
DefaultLS string
OvnNbHost string
OvnNbPort int
OvnNbTimeout int
DefaultLS string
}

func NewValidatingHook(c cache.Cache, opt *WebhookOptions) (*ValidatingHook, error) {
Expand All @@ -49,7 +50,7 @@ func NewValidatingHook(c cache.Cache, opt *WebhookOptions) (*ValidatingHook, err

return &ValidatingHook{
kubeclientset: kubeClient,
ovnClient: ovs.NewClient(opt.OvnNbHost, opt.OvnNbPort, "", 0, "", "", "", "", ""),
ovnClient: ovs.NewClient(opt.OvnNbHost, opt.OvnNbPort, opt.OvnNbTimeout, "", 0, "", "", "", "", ""),
opt: opt,
cache: c,
}, nil
Expand Down

0 comments on commit e0fbfea

Please sign in to comment.