mirror of https://github.com/k3s-io/k3s
os exit when option is true
parent
c72a5b2c10
commit
932060ca1d
|
@ -92,6 +92,7 @@ const (
|
||||||
// proxyRun defines the interface to run a specified ProxyServer
|
// proxyRun defines the interface to run a specified ProxyServer
|
||||||
type proxyRun interface {
|
type proxyRun interface {
|
||||||
Run() error
|
Run() error
|
||||||
|
CleanupAndExit() error
|
||||||
}
|
}
|
||||||
|
|
||||||
// Options contains everything necessary to create and run a proxy server.
|
// Options contains everything necessary to create and run a proxy server.
|
||||||
|
@ -306,6 +307,11 @@ func (o *Options) Run() error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if o.CleanupAndExit {
|
||||||
|
return proxyServer.CleanupAndExit()
|
||||||
|
}
|
||||||
|
|
||||||
o.proxyServer = proxyServer
|
o.proxyServer = proxyServer
|
||||||
return o.runLoop()
|
return o.runLoop()
|
||||||
}
|
}
|
||||||
|
@ -499,7 +505,6 @@ type ProxyServer struct {
|
||||||
Conntracker Conntracker // if nil, ignored
|
Conntracker Conntracker // if nil, ignored
|
||||||
ProxyMode string
|
ProxyMode string
|
||||||
NodeRef *v1.ObjectReference
|
NodeRef *v1.ObjectReference
|
||||||
CleanupAndExit bool
|
|
||||||
CleanupIPVS bool
|
CleanupIPVS bool
|
||||||
MetricsBindAddress string
|
MetricsBindAddress string
|
||||||
EnableProfiling bool
|
EnableProfiling bool
|
||||||
|
@ -551,19 +556,10 @@ func createClients(config componentbaseconfig.ClientConnectionConfiguration, mas
|
||||||
}
|
}
|
||||||
|
|
||||||
// Run runs the specified ProxyServer. This should never exit (unless CleanupAndExit is set).
|
// Run runs the specified ProxyServer. This should never exit (unless CleanupAndExit is set).
|
||||||
|
// TODO: At the moment, Run() cannot return a nil error, otherwise it's caller will never exit. Update callers of Run to handle nil errors.
|
||||||
func (s *ProxyServer) Run() error {
|
func (s *ProxyServer) Run() error {
|
||||||
// To help debugging, immediately log version
|
// To help debugging, immediately log version
|
||||||
klog.Infof("Version: %+v", version.Get())
|
klog.Infof("Version: %+v", version.Get())
|
||||||
// remove iptables rules and exit
|
|
||||||
if s.CleanupAndExit {
|
|
||||||
encounteredError := userspace.CleanupLeftovers(s.IptInterface)
|
|
||||||
encounteredError = iptables.CleanupLeftovers(s.IptInterface) || encounteredError
|
|
||||||
encounteredError = ipvs.CleanupLeftovers(s.IpvsInterface, s.IptInterface, s.IpsetInterface, s.CleanupIPVS) || encounteredError
|
|
||||||
if encounteredError {
|
|
||||||
return errors.New("encountered an error while tearing down rules.")
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO(vmarmol): Use container config for this.
|
// TODO(vmarmol): Use container config for this.
|
||||||
var oomAdjuster *oom.OOMAdjuster
|
var oomAdjuster *oom.OOMAdjuster
|
||||||
|
@ -709,3 +705,15 @@ func getConntrackMax(config kubeproxyconfig.KubeProxyConntrackConfiguration) (in
|
||||||
}
|
}
|
||||||
return 0, nil
|
return 0, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CleanupAndExit remove iptables rules and exit if success return nil
|
||||||
|
func (s *ProxyServer) CleanupAndExit() error {
|
||||||
|
encounteredError := userspace.CleanupLeftovers(s.IptInterface)
|
||||||
|
encounteredError = iptables.CleanupLeftovers(s.IptInterface) || encounteredError
|
||||||
|
encounteredError = ipvs.CleanupLeftovers(s.IpvsInterface, s.IptInterface, s.IpsetInterface, s.CleanupIPVS) || encounteredError
|
||||||
|
if encounteredError {
|
||||||
|
return errors.New("encountered an error while tearing down rules")
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
|
@ -103,7 +103,6 @@ func newProxyServer(
|
||||||
IptInterface: iptInterface,
|
IptInterface: iptInterface,
|
||||||
IpvsInterface: ipvsInterface,
|
IpvsInterface: ipvsInterface,
|
||||||
IpsetInterface: ipsetInterface,
|
IpsetInterface: ipsetInterface,
|
||||||
CleanupAndExit: cleanupAndExit,
|
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,6 +17,7 @@ limitations under the License.
|
||||||
package app
|
package app
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
|
@ -108,7 +109,6 @@ func TestProxyServerWithCleanupAndExit(t *testing.T) {
|
||||||
assert.Nil(t, err, "unexpected error in NewProxyServer, addr: %s", addr)
|
assert.Nil(t, err, "unexpected error in NewProxyServer, addr: %s", addr)
|
||||||
assert.NotNil(t, proxyserver, "nil proxy server obj, addr: %s", addr)
|
assert.NotNil(t, proxyserver, "nil proxy server obj, addr: %s", addr)
|
||||||
assert.NotNil(t, proxyserver.IptInterface, "nil iptables intf, addr: %s", addr)
|
assert.NotNil(t, proxyserver.IptInterface, "nil iptables intf, addr: %s", addr)
|
||||||
assert.True(t, proxyserver.CleanupAndExit, "false CleanupAndExit, addr: %s", addr)
|
|
||||||
|
|
||||||
// Clean up config for next test case
|
// Clean up config for next test case
|
||||||
configz.Delete(kubeproxyconfig.GroupName)
|
configz.Delete(kubeproxyconfig.GroupName)
|
||||||
|
@ -540,6 +540,11 @@ func (s *fakeProxyServerLongRun) Run() error {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CleanupAndExit runs in the specified ProxyServer.
|
||||||
|
func (s *fakeProxyServerLongRun) CleanupAndExit() error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
type fakeProxyServerError struct{}
|
type fakeProxyServerError struct{}
|
||||||
|
|
||||||
// Run runs the specified ProxyServer.
|
// Run runs the specified ProxyServer.
|
||||||
|
@ -549,3 +554,8 @@ func (s *fakeProxyServerError) Run() error {
|
||||||
return fmt.Errorf("mocking error from ProxyServer.Run()")
|
return fmt.Errorf("mocking error from ProxyServer.Run()")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CleanupAndExit runs in the specified ProxyServer.
|
||||||
|
func (s *fakeProxyServerError) CleanupAndExit() error {
|
||||||
|
return errors.New("mocking error from ProxyServer.CleanupAndExit()")
|
||||||
|
}
|
||||||
|
|
|
@ -24,6 +24,8 @@ import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net"
|
"net"
|
||||||
|
|
||||||
|
// Enable pprof HTTP handlers.
|
||||||
_ "net/http/pprof"
|
_ "net/http/pprof"
|
||||||
|
|
||||||
"k8s.io/api/core/v1"
|
"k8s.io/api/core/v1"
|
||||||
|
@ -63,7 +65,7 @@ func newProxyServer(config *proxyconfigapi.KubeProxyConfiguration, cleanupAndExi
|
||||||
|
|
||||||
// We omit creation of pretty much everything if we run in cleanup mode
|
// We omit creation of pretty much everything if we run in cleanup mode
|
||||||
if cleanupAndExit {
|
if cleanupAndExit {
|
||||||
return &ProxyServer{CleanupAndExit: cleanupAndExit}, nil
|
return &ProxyServer{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
client, eventClient, err := createClients(config.ClientConnection, master)
|
client, eventClient, err := createClients(config.ClientConnection, master)
|
||||||
|
|
Loading…
Reference in New Issue