# Cordoning nodes in GKE Autopilot


Occasionally you may wish to remove and replace a node in GKE Autopilot.

That can be done with

```shell
kubectl cordon $NODE_NAME
```

If you want to immediate drain the Pods and put them in the pending state, you can further drain the node:

```shell
kubectl drain $NODE_NAME --delete-emptydir-data --ignore-daemonsets
```

What about if you need to do all nodes? Be aware that this is pretty disruptive, and lot more aggressive than if you leave Autopilot to handle the upgrade itself (which is recommended), but you can apply this technique to the cluster as a whole like so:

```shell
for node in $(kubectl get nodes -o jsonpath='{.items[*].metadata.name}'); do
  kubectl cordon $node
done
```

