mirror of https://github.com/k3s-io/k3s
fix pod eviction for gracefully terminationg pods
parent
420d98fd8b
commit
c1a7e280a3
|
@ -120,7 +120,7 @@ type NodeController struct {
|
|||
daemonSetController *framework.Controller
|
||||
daemonSetStore cache.StoreToDaemonSetLister
|
||||
|
||||
forcefullyDeletePod func(*api.Pod)
|
||||
forcefullyDeletePod func(*api.Pod) error
|
||||
}
|
||||
|
||||
// NewNodeController returns a new node controller to sync instances from cloudprovider.
|
||||
|
@ -167,7 +167,7 @@ func NewNodeController(
|
|||
now: unversioned.Now,
|
||||
clusterCIDR: clusterCIDR,
|
||||
allocateNodeCIDRs: allocateNodeCIDRs,
|
||||
forcefullyDeletePod: func(p *api.Pod) { forcefullyDeletePod(kubeClient, p) },
|
||||
forcefullyDeletePod: func(p *api.Pod) error { return forcefullyDeletePod(kubeClient, p) },
|
||||
}
|
||||
|
||||
nc.podStore.Store, nc.podController = framework.NewInformer(
|
||||
|
@ -329,7 +329,7 @@ func (nc *NodeController) maybeDeleteTerminatingPod(obj interface{}) {
|
|||
|
||||
// delete terminating pods that have not yet been scheduled
|
||||
if len(pod.Spec.NodeName) == 0 {
|
||||
nc.forcefullyDeletePod(pod)
|
||||
utilruntime.HandleError(nc.forcefullyDeletePod(pod))
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -345,7 +345,7 @@ func (nc *NodeController) maybeDeleteTerminatingPod(obj interface{}) {
|
|||
// delete terminating pods that have been scheduled on
|
||||
// nonexistent nodes
|
||||
if !found {
|
||||
nc.forcefullyDeletePod(pod)
|
||||
utilruntime.HandleError(nc.forcefullyDeletePod(pod))
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -358,21 +358,18 @@ func (nc *NodeController) maybeDeleteTerminatingPod(obj interface{}) {
|
|||
v, err := version.Parse(node.Status.NodeInfo.KubeletVersion)
|
||||
if err != nil {
|
||||
glog.Infof("couldn't parse verions %q of minion: %v", node.Status.NodeInfo.KubeletVersion, err)
|
||||
nc.forcefullyDeletePod(pod)
|
||||
utilruntime.HandleError(nc.forcefullyDeletePod(pod))
|
||||
return
|
||||
}
|
||||
if gracefulDeletionVersion.GT(v) {
|
||||
nc.forcefullyDeletePod(pod)
|
||||
utilruntime.HandleError(nc.forcefullyDeletePod(pod))
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
func forcefullyDeletePod(c clientset.Interface, pod *api.Pod) {
|
||||
func forcefullyDeletePod(c clientset.Interface, pod *api.Pod) error {
|
||||
var zero int64
|
||||
err := c.Core().Pods(pod.Namespace).Delete(pod.Name, &api.DeleteOptions{GracePeriodSeconds: &zero})
|
||||
if err != nil {
|
||||
utilruntime.HandleError(err)
|
||||
}
|
||||
return c.Core().Pods(pod.Namespace).Delete(pod.Name, &api.DeleteOptions{GracePeriodSeconds: &zero})
|
||||
}
|
||||
|
||||
// monitorNodeStatus verifies node status are constantly updated by kubelet, and if not,
|
||||
|
@ -781,10 +778,6 @@ func (nc *NodeController) deletePods(nodeName string) (bool, error) {
|
|||
if pod.Spec.NodeName != nodeName {
|
||||
continue
|
||||
}
|
||||
// if the pod has already been deleted, ignore it
|
||||
if pod.DeletionGracePeriodSeconds != nil {
|
||||
continue
|
||||
}
|
||||
// if the pod is managed by a daemonset, ignore it
|
||||
_, err := nc.daemonSetStore.GetPodDaemonSets(&pod)
|
||||
if err == nil { // No error means at least one daemonset was found
|
||||
|
@ -793,7 +786,7 @@ func (nc *NodeController) deletePods(nodeName string) (bool, error) {
|
|||
|
||||
glog.V(2).Infof("Starting deletion of pod %v", pod.Name)
|
||||
nc.recorder.Eventf(&pod, api.EventTypeNormal, "NodeControllerEviction", "Marking for deletion Pod %s from Node %s", pod.Name, nodeName)
|
||||
if err := nc.kubeClient.Core().Pods(pod.Namespace).Delete(pod.Name, nil); err != nil {
|
||||
if err := nc.forcefullyDeletePod(&pod); err != nil {
|
||||
return false, err
|
||||
}
|
||||
remaining = true
|
||||
|
|
|
@ -1040,8 +1040,9 @@ func TestCheckPod(t *testing.T) {
|
|||
|
||||
for i, tc := range tcs {
|
||||
var deleteCalls int
|
||||
nc.forcefullyDeletePod = func(_ *api.Pod) {
|
||||
nc.forcefullyDeletePod = func(_ *api.Pod) error {
|
||||
deleteCalls++
|
||||
return nil
|
||||
}
|
||||
|
||||
nc.maybeDeleteTerminatingPod(&tc.pod)
|
||||
|
|
Loading…
Reference in New Issue