Skip to content

Commit

Permalink
Merge ecdd131 into 77805a4
Browse files Browse the repository at this point in the history
  • Loading branch information
alexeyklyukin committed Oct 12, 2017
2 parents 77805a4 + ecdd131 commit 43a8423
Showing 1 changed file with 30 additions and 21 deletions.
51 changes: 30 additions & 21 deletions pkg/cluster/pod.go
Original file line number Diff line number Diff line change
Expand Up @@ -118,14 +118,10 @@ func (c *Cluster) movePodOffCordonedNode(pod *v1.Pod) (*v1.Pod, error) {
podName := util.NameFromMeta(pod.ObjectMeta)
c.setProcessName("recreating %q pod", podName)

node, err := c.KubeClient.Nodes().Get(pod.Spec.NodeName, metav1.GetOptions{})
if err != nil {
if eol, err := c.podIsEndOfLife(pod); err != nil {
return nil, fmt.Errorf("could not get %q node: %v", pod.Spec.NodeName, err)
}

if !util.MapContains(node.Labels, c.OpConfig.EOLNodeLabel) {
c.logger.Infof("%q pod is already on a non-cordoned node", podName)

} else if !eol {
c.logger.Infof("%q pod is already on a live node", podName)
return pod, nil
}

Expand All @@ -142,13 +138,10 @@ func (c *Cluster) movePodOffCordonedNode(pod *v1.Pod) (*v1.Pod, error) {
return nil, fmt.Errorf("%q pod remained on the same node", podName)
}

node, err = c.KubeClient.Nodes().Get(newPod.Spec.NodeName, metav1.GetOptions{})
if err != nil {
if eol, err := c.podIsEndOfLife(newPod); err != nil {
return nil, fmt.Errorf("could not get %q node: %v", pod.Spec.NodeName, err)
}

if util.MapContains(node.Labels, c.OpConfig.EOLNodeLabel) {
c.logger.Warningf("%q pod moved to the %q node, which is a cordoned node", podName, node.Name)
} else if eol {
c.logger.Warningf("%q pod moved to the %q node, which is end of life", podName, newPod.Spec.NodeName)
return newPod, nil
}

Expand All @@ -157,12 +150,22 @@ func (c *Cluster) movePodOffCordonedNode(pod *v1.Pod) (*v1.Pod, error) {
return newPod, nil
}

func (c *Cluster) masterCandidate() (*v1.Pod, error) {
func (c *Cluster) masterCandidate(oldNodeName string) (*v1.Pod, error) {
replicas, err := c.getRolePods(Replica)
if err != nil {
return nil, fmt.Errorf("could not get replica pods: %v", err)
}

for i, pod := range replicas {
// look for replicas running on live nodes. Ignore errors when querying the nodes.
if pod.Spec.NodeName != oldNodeName {
eol, err := c.podIsEndOfLife(&pod)
if err == nil && !eol {
return &replicas[i], nil
}
}
}

return &replicas[rand.Intn(len(replicas))], nil
}

Expand All @@ -175,12 +178,9 @@ func (c *Cluster) MigrateMasterPod(podName spec.NamespacedName) error {
}
c.logger.Debugf("moving pod %q out of the %q node", podName, oldMaster.Spec.NodeName)

oldNode, err := c.KubeClient.Nodes().Get(oldMaster.Spec.NodeName, metav1.GetOptions{})
if err != nil {
if eol, err := c.podIsEndOfLife(oldMaster); err != nil {
return fmt.Errorf("could not get %q node: %v", oldMaster.Spec.NodeName, err)
}

if !util.MapContains(oldNode.Labels, c.OpConfig.EOLNodeLabel) {
} else if !eol {
c.logger.Debugf("pod is already on a non-cordoned node")
return nil
}
Expand All @@ -190,7 +190,7 @@ func (c *Cluster) MigrateMasterPod(podName spec.NamespacedName) error {
return nil
}

masterCandidatePod, err := c.masterCandidate()
masterCandidatePod, err := c.masterCandidate(oldMaster.Spec.NodeName)
if err != nil {
return fmt.Errorf("could not get new master candidate: %v", err)
}
Expand Down Expand Up @@ -223,7 +223,7 @@ func (c *Cluster) MigrateReplicaPod(podName spec.NamespacedName, fromNodeName st
}

if replicaPod.Spec.NodeName != fromNodeName {
c.logger.Infof("pod %q has already migrated to node %q", podName, replicaPod.Spec.NodeName )
c.logger.Infof("pod %q has already migrated to node %q", podName, replicaPod.Spec.NodeName)
return nil
}

Expand Down Expand Up @@ -311,3 +311,12 @@ func (c *Cluster) recreatePods() error {

return nil
}

func (c *Cluster) podIsEndOfLife(pod *v1.Pod) (bool, error) {
node, err := c.KubeClient.Nodes().Get(pod.Spec.NodeName, metav1.GetOptions{})
if err != nil {
return false, err
}
return node.Spec.Unschedulable || util.MapContains(node.Labels, c.OpConfig.EOLNodeLabel), nil

}

0 comments on commit 43a8423

Please sign in to comment.