Skip to content

Commit

Permalink
openshift start network should pass stopCh down to DNS
Browse files Browse the repository at this point in the history
Allow graceful shutdown of the DNS server so that we can remove
ourselves from dnsmasq.
  • Loading branch information
smarterclayton committed Jun 14, 2018
1 parent 9d78c24 commit c802e22
Show file tree
Hide file tree
Showing 4 changed files with 30 additions and 15 deletions.
4 changes: 2 additions & 2 deletions pkg/cmd/server/kubernetes/network/network.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,10 +48,10 @@ func (c *NetworkConfig) RunSDN() {
}

// RunDNS starts the DNS server as soon as services are loaded.
func (c *NetworkConfig) RunDNS() {
func (c *NetworkConfig) RunDNS(stopCh <-chan struct{}) {
go func() {
glog.Infof("Starting DNS on %s", c.DNSServer.Config.DnsAddr)
err := c.DNSServer.ListenAndServe()
err := c.DNSServer.ListenAndServe(stopCh)
glog.Fatalf("DNS server failed to start: %v", err)
}()
}
Expand Down
4 changes: 3 additions & 1 deletion pkg/cmd/server/origin/dns_server.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ import (

"github.com/golang/glog"

"k8s.io/apimachinery/pkg/util/wait"

cmdutil "github.com/openshift/origin/pkg/cmd/util"
"github.com/openshift/origin/pkg/dns"
)
Expand Down Expand Up @@ -52,7 +54,7 @@ func (c *MasterConfig) RunDNSServer() {

go func() {
s := dns.NewServer(config, services, endpoints, "apiserver")
err := s.ListenAndServe()
err := s.ListenAndServe(wait.NeverStop)
glog.Fatalf("Could not start DNS: %v", err)
}()

Expand Down
4 changes: 2 additions & 2 deletions pkg/cmd/server/start/start_allinone.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import (
"github.com/spf13/cobra"

kerrors "k8s.io/apimachinery/pkg/api/errors"
"k8s.io/apimachinery/pkg/util/wait"
"k8s.io/apiserver/pkg/util/flag"
"k8s.io/kubernetes/pkg/kubectl/cmd/templates"
kcmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
Expand All @@ -26,7 +27,6 @@ import (
configapi "github.com/openshift/origin/pkg/cmd/server/apis/config"
"github.com/openshift/origin/pkg/cmd/server/origin"
tsbcmd "github.com/openshift/origin/pkg/templateservicebroker/cmd/server"
"k8s.io/apimachinery/pkg/util/wait"
)

type AllInOneOptions struct {
Expand Down Expand Up @@ -310,7 +310,7 @@ func (o AllInOneOptions) StartAllInOne() error {
ConfigFile: o.NodeConfigFile,
Output: o.MasterOptions.Output,
}
if err := nodeOptions.RunNode(); err != nil {
if err := nodeOptions.RunNode(wait.NeverStop); err != nil {
return err
}

Expand Down
33 changes: 23 additions & 10 deletions pkg/cmd/server/start/start_node.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
"path/filepath"
"strings"
"syscall"
"time"

"github.com/coreos/go-systemd/daemon"
"github.com/golang/glog"
Expand All @@ -18,11 +19,11 @@ import (
kerrors "k8s.io/apimachinery/pkg/api/errors"
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
"k8s.io/apimachinery/pkg/util/sets"
"k8s.io/apimachinery/pkg/util/wait"
kubeletapp "k8s.io/kubernetes/cmd/kubelet/app"
"k8s.io/kubernetes/pkg/kubectl/cmd/templates"
kcmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
"k8s.io/kubernetes/pkg/master/ports"
"k8s.io/kubernetes/pkg/util/interrupt"

"github.com/openshift/library-go/pkg/crypto"
"github.com/openshift/origin/pkg/cmd/server/admin"
Expand Down Expand Up @@ -115,14 +116,26 @@ var networkLong = templates.LongDesc(`

// NewCommandStartNetwork provides a CLI handler for 'start network' command
func NewCommandStartNetwork(basename string, out, errout io.Writer) (*cobra.Command, *NodeOptions) {
options := &NodeOptions{Output: out}
options := &NodeOptions{
ExpireDays: crypto.DefaultCertificateLifetimeInDays,
Output: out,
}

cmd := &cobra.Command{
Use: "network",
Short: "Launch node network",
Long: fmt.Sprintf(networkLong, basename),
Run: func(c *cobra.Command, args []string) {
options.Run(c, errout, args, wait.NeverStop)
ch := make(chan struct{})
interrupt.New(func(s os.Signal) {
close(ch)
fmt.Fprintf(errout, "interrupt: Gracefully shutting down ...\n")
time.Sleep(200 * time.Millisecond)
os.Exit(1)
}).Run(func() error {
options.Run(c, errout, args, ch)
return nil
})
},
}

Expand Down Expand Up @@ -209,7 +222,7 @@ func (o NodeOptions) Complete(cmd *cobra.Command) error {

// StartNode calls RunNode and then waits forever
func (o NodeOptions) StartNode(stopCh <-chan struct{}) error {
if err := o.RunNode(); err != nil {
if err := o.RunNode(stopCh); err != nil {
return err
}

Expand All @@ -227,7 +240,7 @@ func (o NodeOptions) StartNode(stopCh <-chan struct{}) error {
// 2. Reads fully specified node config OR builds a fully specified node config from the args
// 3. Writes the fully specified node config and exits if needed
// 4. Starts the node based on the fully specified config
func (o NodeOptions) RunNode() error {
func (o NodeOptions) RunNode(stopCh <-chan struct{}) error {
nodeConfig, configFile, err := o.resolveNodeConfig()
if err != nil {
return err
Expand Down Expand Up @@ -277,7 +290,7 @@ func (o NodeOptions) RunNode() error {
return originnode.WriteKubeletFlags(*nodeConfig)
}

return StartNode(*nodeConfig, o.NodeArgs.Components)
return StartNode(*nodeConfig, o.NodeArgs.Components, stopCh)
}

// resolveNodeConfig creates a new configuration on disk by reading from the master, reads
Expand Down Expand Up @@ -421,7 +434,7 @@ func execKubelet(kubeletArgs []string) error {
}

// StartNode launches the node processes.
func StartNode(nodeConfig configapi.NodeConfig, components *utilflags.ComponentFlag) error {
func StartNode(nodeConfig configapi.NodeConfig, components *utilflags.ComponentFlag, stopCh <-chan struct{}) error {
kubeletArgs, err := nodeoptions.ComputeKubeletFlags(nodeConfig.KubeletArguments, nodeConfig)
if err != nil {
return fmt.Errorf("cannot create kubelet args: %v", err)
Expand Down Expand Up @@ -476,12 +489,12 @@ func StartNode(nodeConfig configapi.NodeConfig, components *utilflags.ComponentF
networkConfig.RunProxy()
}
if components.Enabled(ComponentDNS) && networkConfig.DNSServer != nil {
networkConfig.RunDNS()
networkConfig.RunDNS(stopCh)
}

networkConfig.InternalKubeInformers.Start(wait.NeverStop)
networkConfig.InternalKubeInformers.Start(stopCh)
if networkConfig.InternalNetworkInformers != nil {
networkConfig.InternalNetworkInformers.Start(wait.NeverStop)
networkConfig.InternalNetworkInformers.Start(stopCh)
}

return nil
Expand Down

0 comments on commit c802e22

Please sign in to comment.