LinuxCommandLibrary

kubectl-uncordon

Mark node schedulable

TLDR

Mark a node as schedulable

$ kubectl uncordon [node_name]
copy

Mark multiple nodes as schedulable
$ kubectl uncordon [node_name1 node_name2 ...]
copy

Mark a node as schedulable in a specific context
$ kubectl uncordon [node_name] --context [context_name]
copy

Mark nodes matching a label selector as schedulable
$ kubectl uncordon [[-l|--selector]] [label_key]=[label_value]
copy

Preview the changes without actually uncordoning the nodes (dry run)
$ kubectl uncordon [node_name] --dry-run=[none|server|client]
copy

SYNOPSIS

kubectl uncordon NODE|-l selector [options]

PARAMETERS

NODE
    Name of the node(s) to mark as schedulable (positional argument, supports multiple)

--dry-run=server|client|none
    Print objects that would be sent without applying changes

--field-selector='
    Filter nodes by field query (e.g., 'metadata.name=my-node')

--selector|-l=string
    Filter nodes by label selector (e.g., 'disktype=ssd')

--timeout=duration
    Timeout for operation (default 0s)

DESCRIPTION

The kubectl uncordon command marks one or more Kubernetes nodes as schedulable, reversing the effects of kubectl cordon. When a node is cordoned, its spec.unschedulable field is set to true, preventing the scheduler from placing new pods on it. This is useful during maintenance to safely drain pods without disruption.

After completing maintenance tasks like OS upgrades or hardware fixes, run kubectl uncordon to allow workloads to resume on the node. It supports targeting specific nodes by name, label selectors, or field selectors. The command updates the node's status via the Kubernetes API server.

Key use cases include post-drain recovery, scaling clusters dynamically, or recovering from temporary node issues. It does not evict existing pods or remove custom taints—only the cordon unschedulable flag. Always verify node status with kubectl get nodes before and after.

CAVEATS

Does not remove custom taints or node selectors; node must exist and be reachable via API; requires cluster-admin permissions.

EXAMPLES

kubectl uncordon node01
kubectl uncordon -l node-role.kubernetes.io/worker
kubectl uncordon my-node --dry-run=client -o yaml

NODE STATUS CHECK

Use kubectl describe node <name> to confirm Unschedulable: false after uncordon.

HISTORY

Introduced in Kubernetes v1.0 (2014) as core node management tool; enhanced with selectors in v1.2+ for multi-node operations.

SEE ALSO

kubectl cordon(1), kubectl drain(1), kubectl get nodes(1), kubectl taint(1)

Copied to clipboard