From 51fb753e11a8292e9eda427f726df85b9c2ed4c3 Mon Sep 17 00:00:00 2001 From: Brendan Burns Date: Wed, 17 Jun 2015 22:34:11 -0700 Subject: [PATCH 1/3] Update the kubelet to ignore syncing Pods until the container runtime is up. --- pkg/kubelet/kubelet.go | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/pkg/kubelet/kubelet.go b/pkg/kubelet/kubelet.go index 5d422690494..6ef3f473806 100644 --- a/pkg/kubelet/kubelet.go +++ b/pkg/kubelet/kubelet.go @@ -1663,6 +1663,11 @@ func (kl *Kubelet) admitPods(allPods []*api.Pod, podSyncTypes map[types.UID]Sync func (kl *Kubelet) syncLoop(updates <-chan PodUpdate, handler SyncHandler) { glog.Info("Starting kubelet main sync loop.") for { + if !kl.containerRuntimeUp() { + time.Sleep(5 * time.Second) + glog.Infof("Skipping pod synchronization, container runtime is not up.") + continue + } unsyncedPod := false podSyncTypes := make(map[types.UID]SyncPodType) select { @@ -1923,11 +1928,7 @@ func (kl *Kubelet) setNodeStatus(node *api.Node) error { } // Check whether container runtime can be reported as up. - containerRuntimeUp := func() bool { - kl.runtimeMutex.Lock() - defer kl.runtimeMutex.Unlock() - return kl.lastTimestampRuntimeUp.Add(kl.runtimeUpThreshold).After(time.Now()) - }() + containerRuntimeUp := kl.containerRuntimeUp() currentTime := util.Now() var newNodeReadyCondition api.NodeCondition @@ -1990,6 +1991,12 @@ func (kl *Kubelet) setNodeStatus(node *api.Node) error { return nil } +func (kl *Kubelet) containerRuntimeUp() bool { + kl.runtimeMutex.Lock() + defer kl.runtimeMutex.Unlock() + return kl.lastTimestampRuntimeUp.Add(kl.runtimeUpThreshold).After(time.Now()) +} + // tryUpdateNodeStatus tries to update node status to master. If ReconcileCBR0 // is set, this function will also confirm that cbr0 is configured correctly. func (kl *Kubelet) tryUpdateNodeStatus() error { From 2330760d344c61137caffc0e59d9383e57dbd805 Mon Sep 17 00:00:00 2001 From: Brendan Burns Date: Wed, 17 Jun 2015 23:10:32 -0700 Subject: [PATCH 2/3] Truncate SSH usernames to 32 chars. --- pkg/master/master.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pkg/master/master.go b/pkg/master/master.go index adf0685d2b2..5e81529cdb3 100644 --- a/pkg/master/master.go +++ b/pkg/master/master.go @@ -495,6 +495,11 @@ func (m *Master) init(c *Config) { var proxyDialer func(net, addr string) (net.Conn, error) if len(c.SSHUser) > 0 { + // Usernames are capped @ 32 + if len(c.SSHUser) > 32 { + glog.Warning("SSH User is too long, truncating to 32 chars") + c.SSHUser = c.SSHUser[0:32] + } glog.Infof("Setting up proxy: %s %s", c.SSHUser, c.SSHKeyfile) // public keyfile is written last, so check for that. publicKeyFile := c.SSHKeyfile + ".pub" From abf1e768dce87cfc5f962f4ee0311b603aaa78df Mon Sep 17 00:00:00 2001 From: CJ Cullen Date: Thu, 18 Jun 2015 10:34:58 -0700 Subject: [PATCH 3/3] Pass through an explicit PROXY_SSH_USER. Use user@user instead of user@hostname in case hostname is too long. --- cluster/gce/configure-vm.sh | 2 +- pkg/cloudprovider/gce/gce.go | 8 +------- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/cluster/gce/configure-vm.sh b/cluster/gce/configure-vm.sh index 9ac82ace2df..c73dfb8921d 100644 --- a/cluster/gce/configure-vm.sh +++ b/cluster/gce/configure-vm.sh @@ -501,7 +501,7 @@ EOF cat <>/etc/salt/minion.d/grains.conf cloud_config: /etc/gce.conf advertise_address: '${EXTERNAL_IP}' - proxy_ssh_user: '${INSTANCE_PREFIX}' + proxy_ssh_user: '${PROXY_SSH_USER}' EOF fi } diff --git a/pkg/cloudprovider/gce/gce.go b/pkg/cloudprovider/gce/gce.go index 3ecf3dfb23c..80649a682da 100644 --- a/pkg/cloudprovider/gce/gce.go +++ b/pkg/cloudprovider/gce/gce.go @@ -22,7 +22,6 @@ import ( "io/ioutil" "net" "net/http" - "os" "path" "strconv" "strings" @@ -490,12 +489,7 @@ func (gce *GCECloud) AddSSHKeyToAllInstances(user string, keyData []byte) error glog.Errorf("Could not get project: %v", err) return false, nil } - hostname, err := os.Hostname() - if err != nil { - glog.Errorf("Could not get hostname: %v", err) - return false, nil - } - keyString := fmt.Sprintf("%s:%s %s@%s", user, strings.TrimSpace(string(keyData)), user, hostname) + keyString := fmt.Sprintf("%s:%s %s@%s", user, strings.TrimSpace(string(keyData)), user, user) found := false for _, item := range project.CommonInstanceMetadata.Items { if item.Key == "sshKeys" {