remove ignore error flag for drain, and set this feature as default
Kubernetes-commit: f54d2a0dd1dd5c143fb32dae5c627dba87d6df7e
This commit is contained in:
parent
e81d7c5df4
commit
c74a1185c3
|
@ -192,7 +192,6 @@ func NewCmdDrain(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *cobr
|
||||||
}
|
}
|
||||||
cmd.Flags().BoolVar(&o.drainer.Force, "force", o.drainer.Force, "Continue even if there are pods not managed by a ReplicationController, ReplicaSet, Job, DaemonSet or StatefulSet.")
|
cmd.Flags().BoolVar(&o.drainer.Force, "force", o.drainer.Force, "Continue even if there are pods not managed by a ReplicationController, ReplicaSet, Job, DaemonSet or StatefulSet.")
|
||||||
cmd.Flags().BoolVar(&o.drainer.IgnoreAllDaemonSets, "ignore-daemonsets", o.drainer.IgnoreAllDaemonSets, "Ignore DaemonSet-managed pods.")
|
cmd.Flags().BoolVar(&o.drainer.IgnoreAllDaemonSets, "ignore-daemonsets", o.drainer.IgnoreAllDaemonSets, "Ignore DaemonSet-managed pods.")
|
||||||
cmd.Flags().BoolVar(&o.drainer.IgnoreErrors, "ignore-errors", o.drainer.IgnoreErrors, "Ignore errors occurred between drain nodes in group.")
|
|
||||||
cmd.Flags().BoolVar(&o.drainer.DeleteEmptyDirData, "delete-local-data", o.drainer.DeleteEmptyDirData, "Continue even if there are pods using emptyDir (local data that will be deleted when the node is drained).")
|
cmd.Flags().BoolVar(&o.drainer.DeleteEmptyDirData, "delete-local-data", o.drainer.DeleteEmptyDirData, "Continue even if there are pods using emptyDir (local data that will be deleted when the node is drained).")
|
||||||
cmd.Flags().MarkDeprecated("delete-local-data", "This option is deprecated and will be deleted. Use --delete-emptydir-data.")
|
cmd.Flags().MarkDeprecated("delete-local-data", "This option is deprecated and will be deleted. Use --delete-emptydir-data.")
|
||||||
cmd.Flags().BoolVar(&o.drainer.DeleteEmptyDirData, "delete-emptydir-data", o.drainer.DeleteEmptyDirData, "Continue even if there are pods using emptyDir (local data that will be deleted when the node is drained).")
|
cmd.Flags().BoolVar(&o.drainer.DeleteEmptyDirData, "delete-emptydir-data", o.drainer.DeleteEmptyDirData, "Continue even if there are pods using emptyDir (local data that will be deleted when the node is drained).")
|
||||||
|
@ -298,8 +297,9 @@ func (o *DrainCmdOptions) RunDrain() error {
|
||||||
}
|
}
|
||||||
|
|
||||||
drainedNodes := sets.NewString()
|
drainedNodes := sets.NewString()
|
||||||
var fatal error
|
var fatal []error
|
||||||
|
|
||||||
|
remainingNodes := []string{}
|
||||||
for _, info := range o.nodeInfos {
|
for _, info := range o.nodeInfos {
|
||||||
if err := o.deleteOrEvictPodsSimple(info); err == nil {
|
if err := o.deleteOrEvictPodsSimple(info); err == nil {
|
||||||
drainedNodes.Insert(info.Name)
|
drainedNodes.Insert(info.Name)
|
||||||
|
@ -311,22 +311,15 @@ func (o *DrainCmdOptions) RunDrain() error {
|
||||||
|
|
||||||
printObj(info.Object, o.Out)
|
printObj(info.Object, o.Out)
|
||||||
} else {
|
} else {
|
||||||
if o.drainer.IgnoreErrors && len(o.nodeInfos) > 1 {
|
|
||||||
fmt.Fprintf(o.ErrOut, "error: unable to drain node %q due to error:%s, continuing command...\n", info.Name, err)
|
fmt.Fprintf(o.ErrOut, "error: unable to drain node %q due to error:%s, continuing command...\n", info.Name, err)
|
||||||
continue
|
|
||||||
|
if !drainedNodes.Has(info.Name) {
|
||||||
|
fatal = append(fatal, err)
|
||||||
|
remainingNodes = append(remainingNodes, info.Name)
|
||||||
}
|
}
|
||||||
fmt.Fprintf(o.ErrOut, "DEPRECATED WARNING: Aborting the drain command in a list of nodes will be deprecated in v1.23.\n"+
|
|
||||||
"The new behavior will make the drain command go through all nodes even if one or more nodes failed during the drain.\n"+
|
|
||||||
"For now, users can try such experience via: --ignore-errors\n")
|
|
||||||
fmt.Fprintf(o.ErrOut, "error: unable to drain node %q, aborting command...\n\n", info.Name)
|
|
||||||
remainingNodes := []string{}
|
|
||||||
fatal = err
|
|
||||||
for _, remainingInfo := range o.nodeInfos {
|
|
||||||
if drainedNodes.Has(remainingInfo.Name) {
|
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
remainingNodes = append(remainingNodes, remainingInfo.Name)
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(remainingNodes) > 0 {
|
if len(remainingNodes) > 0 {
|
||||||
fmt.Fprintf(o.ErrOut, "There are pending nodes to be drained:\n")
|
fmt.Fprintf(o.ErrOut, "There are pending nodes to be drained:\n")
|
||||||
|
@ -334,11 +327,9 @@ func (o *DrainCmdOptions) RunDrain() error {
|
||||||
fmt.Fprintf(o.ErrOut, " %s\n", nodeName)
|
fmt.Fprintf(o.ErrOut, " %s\n", nodeName)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return fatal
|
return utilerrors.NewAggregate(fatal)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (o *DrainCmdOptions) deleteOrEvictPodsSimple(nodeInfo *resource.Info) error {
|
func (o *DrainCmdOptions) deleteOrEvictPodsSimple(nodeInfo *resource.Info) error {
|
||||||
|
|
|
@ -59,7 +59,6 @@ type Helper struct {
|
||||||
GracePeriodSeconds int
|
GracePeriodSeconds int
|
||||||
|
|
||||||
IgnoreAllDaemonSets bool
|
IgnoreAllDaemonSets bool
|
||||||
IgnoreErrors bool
|
|
||||||
Timeout time.Duration
|
Timeout time.Duration
|
||||||
DeleteEmptyDirData bool
|
DeleteEmptyDirData bool
|
||||||
Selector string
|
Selector string
|
||||||
|
|
Loading…
Reference in New Issue