re-establish apiserver tunnel on restart
parent
ac8f0b1ede
commit
f02e977544
|
|
@ -494,17 +494,17 @@ func (d *Driver) Stop() error {
|
|||
func (d *Driver) Remove() error {
|
||||
s, err := d.GetState()
|
||||
if err != nil {
|
||||
return err
|
||||
return errors.Wrap(err, "get state")
|
||||
}
|
||||
if s == state.Running {
|
||||
if err := d.Kill(); err != nil {
|
||||
return err
|
||||
return errors.Wrap(err, "kill")
|
||||
}
|
||||
}
|
||||
if s != state.Stopped {
|
||||
_, err = d.RunQMPCommand("quit")
|
||||
if err != nil {
|
||||
return err
|
||||
return errors.Wrap(err, "quit")
|
||||
}
|
||||
}
|
||||
return nil
|
||||
|
|
|
|||
|
|
@ -290,6 +290,9 @@ func (k *Bootstrapper) init(cfg config.ClusterConfig) error {
|
|||
}()
|
||||
|
||||
wg.Wait()
|
||||
if cfg.APIServerPort != 0 {
|
||||
k.tunnelToAPIServer(cfg)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
@ -399,6 +402,10 @@ func (k *Bootstrapper) StartCluster(cfg config.ClusterConfig) error {
|
|||
}
|
||||
|
||||
if err := bsutil.ExistingConfig(k.c); err == nil {
|
||||
// Tunnel apiserver to guest, if needed
|
||||
if cfg.APIServerPort != 0 {
|
||||
k.tunnelToAPIServer(cfg)
|
||||
}
|
||||
klog.Infof("found existing configuration files, will attempt cluster restart")
|
||||
rerr := k.restartControlPlane(cfg)
|
||||
if rerr == nil {
|
||||
|
|
@ -433,6 +440,22 @@ func (k *Bootstrapper) StartCluster(cfg config.ClusterConfig) error {
|
|||
return err
|
||||
}
|
||||
|
||||
func (k *Bootstrapper) tunnelToAPIServer(cfg config.ClusterConfig) {
|
||||
m, err := machine.NewAPIClient()
|
||||
if err != nil {
|
||||
klog.Warningf("libmachine API failed: %v", err)
|
||||
}
|
||||
cp, err := config.PrimaryControlPlane(&cfg)
|
||||
if err != nil {
|
||||
klog.Warningf("finding control plane failed: %v", err)
|
||||
}
|
||||
args := []string{"-f", "-NTL", fmt.Sprintf("%d:localhost:8443", cfg.APIServerPort)}
|
||||
err = machine.CreateSSHShell(m, cfg, cp, args, false)
|
||||
if err != nil {
|
||||
klog.Warningf("apiserver tunnel failed: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
// client sets and returns a Kubernetes client to use to speak to a kubeadm launched apiserver
|
||||
func (k *Bootstrapper) client(ip string, port int) (*kubernetes.Clientset, error) {
|
||||
if k.k8sClient != nil {
|
||||
|
|
@ -569,6 +592,7 @@ func (k *Bootstrapper) needsReconfigure(conf string, hostname string, port int,
|
|||
klog.Infof("needs reconfigure: configs differ:\n%s", rr.Output())
|
||||
return true
|
||||
}
|
||||
|
||||
// cruntime.Enable() may restart kube-apiserver but does not wait for it to return back
|
||||
apiStatusTimeout := 3000 * time.Millisecond
|
||||
st, err := kverify.WaitForAPIServerStatus(k.c, apiStatusTimeout, hostname, port)
|
||||
|
|
|
|||
|
|
@ -253,15 +253,6 @@ func handleAPIServer(starter Starter, cr cruntime.Manager, hostIP net.IP) (*kube
|
|||
return nil, bs, err
|
||||
}
|
||||
|
||||
// Tunnel apiserver to guest, if needed
|
||||
if starter.Cfg.APIServerPort != 0 {
|
||||
args := []string{"-f", "-NTL", fmt.Sprintf("%d:localhost:8443", starter.Cfg.APIServerPort)}
|
||||
err := machine.CreateSSHShell(starter.MachineAPI, *starter.Cfg, *starter.Node, args, false)
|
||||
if err != nil {
|
||||
klog.Warningf("apiserver tunnel failed: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
// Write the kubeconfig to the file system after everything required (like certs) are created by the bootstrapper.
|
||||
if err := kubeconfig.Update(kcs); err != nil {
|
||||
return nil, bs, errors.Wrap(err, "Failed kubeconfig update")
|
||||
|
|
|
|||
Loading…
Reference in New Issue