OC-ADM-DRAIN(1)

πŸ“¦
version 4.22.0 Β· 2 versions
, in nixpkgs unstable

πŸ’… oc adm drain πŸ’…

okay bestie, welcome to the OC ADM(1) manual page β€” that’s the manual name, folded in right up top like a little name tag. This one lives in the Openshift CLI User Manuals, and it’s all about draining a node before maintenance. πŸ’…

🫢 NAME 🫢

oc adm drain β€” drain node in preparation for maintenance. slay.

✨ SYNOPSIS ✨

oc adm drain [OPTIONS]

πŸ¦‹ DESCRIPTION πŸ¦‹

okay so the whole point: drain gets a node ready for maintenance. The given node is marked unschedulable so new pods can’t arrive. If the API server supports eviction (⟨https://kubernetes.io/docs/concepts/workloads/pods/disruptions/⟩ eviction ⟨https://kubernetes.io/docs/concepts/workloads/pods/disruptions/⟩), then drain evicts the pods. Otherwise, it uses normal DELETE to delete the pods. no cap. ✨

drain evicts or deletes all pods except mirror pods (those can’t be deleted through the API server). If there are daemon set-managed pods, drain will not proceed without --ignore-daemonsets, and regardless it will not delete any daemon set-managed pods, because those pods would be immediately replaced by the daemon set controller, which ignores unschedulable markings. 😭

If there are any pods that are neither mirror pods nor managed by a replication controller, replica set, daemon set, stateful set, or job, then drain will not delete any pods unless you use --force. --force will also allow deletion to proceed if the managing resource of one or more pods is missing. πŸ”₯

When you’re ready to put the node back into service, use oc adm uncordon, which will make the node schedulable again. periodt.

Diagram reference from the page: ⟨https://kubernetes.io/images/docs/oc⟩ adm_drain.svg. Workflow line: Workflowhttps://kubernetes.io/images/docs/oc adm_drain.svg. yes, that second one really has no space after Workflow β€” iykyk πŸ’€

πŸŽ€ OPTIONS πŸŽ€

  • --chunk-size=500 β€” Ask for huge lists in chunks instead of dumping them all at once; pass 0 to disable chunking. πŸ“
  • --delete-emptydir-data=false β€” Keep going even if pods are using emptyDir β€” that’s local data that will be deleted when the node is drained. 😭
  • --disable-eviction=false β€” Force drain to use delete even if eviction is supported. This bypasses checking PodDisruptionBudgets, so use with caution. 🚨
  • --dry-run="none" β€” Must be "none", "server", or "client". If client strategy, only print the object that would be sent, without sending it. If server strategy, submit a server-side request without persisting the resource.
  • --force=false β€” Continue even if there are pods that do not declare a controller.
  • --grace-period=-1 β€” Period of time in seconds given to each pod to terminate gracefully. If negative, the default value specified in the pod will be used.
  • --ignore-daemonsets=false β€” Ignore DaemonSet-managed pods.
  • --pod-selector="" β€” Label selector to filter pods on the node.
  • -l, --selector="" β€” Selector (label query) to filter on; supports '=', '==', '!=', 'in', 'notin'. (e.g. -l key1=value1,key2=value2,key3 in (value3)). Matching objects must satisfy all of the specified label constraints.
  • --skip-wait-for-delete-timeout=0 β€” If a pod’s DeletionTimestamp is older than N seconds, skip waiting for the pod. Seconds must be greater than 0 to skip.
  • --timeout=0 β€” The length of time to wait before giving up; zero means infinite.

πŸ‘‘ OPTIONS INHERITED FROM PARENT COMMANDS πŸ‘‘

These are inherited from the parent commands, bestie β€” still important, still here. 🫢

  • --as="" β€” Username to impersonate for the operation. User could be a regular user or a service account in a namespace.
  • --as-group=[] β€” Group to impersonate for the operation; this flag can be repeated to specify multiple groups.
  • --as-uid="" β€” UID to impersonate for the operation.
  • --as-user-extra=[] β€” User extras to impersonate for the operation; this flag can be repeated to specify multiple values for the same key.
  • --cache-dir="/homeless-shelter/.kube/cache" β€” Default cache directory.
  • --certificate-authority="" β€” Path to a cert file for the certificate authority.
  • --client-certificate="" β€” Path to a client certificate file for TLS.
  • --client-key="" β€” Path to a client key file for TLS.
  • --cluster="" β€” The name of the kubeconfig cluster to use.
  • --context="" β€” The name of the kubeconfig context to use.
  • --disable-compression=false β€” If true, opt-out of response compression for all requests to the server.
  • --insecure-skip-tls-verify=false β€” If true, the server’s certificate will not be checked for validity. This will make your HTTPS connections insecure. 😭
  • --kubeconfig="" β€” Path to the kubeconfig file to use for CLI requests.
  • --kuberc="" β€” Path to the kuberc file to use for preferences. This can be disabled by exporting KUBECTL_KUBERC=false feature gate or turning off the feature KUBERC=off.
  • --match-server-version=false β€” Require server version to match client version.
  • -n, --namespace="" β€” If present, the namespace scope for this CLI request.
  • --profile="none" β€” Name of profile to capture. One of (none|cpu|heap|goroutine|threadcreate|block|mutex).
  • --profile-output="profile.pprof" β€” Name of the file to write the profile to.
  • --request-timeout="0" β€” The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don’t timeout requests.
  • -s, --server="" β€” The address and port of the Kubernetes API server.
  • --tls-server-name="" β€” Server name to use for server certificate validation. If it is not provided, the hostname used to contact the server is used.
  • --token="" β€” Bearer token for authentication to the API server.
  • --user="" β€” The name of the kubeconfig user to use.
  • --warnings-as-errors=false β€” Treat warnings received from the server as errors and exit with a non-zero exit code.

🌈 EXAMPLE 🌈

# Drain node "foo", even if there are pods not managed by a replication controller, replica set, job, daemon set, or stateful set on it
oc adm drain foo --force

# As above, but abort if there are pods not managed by a replication controller, replica set, job, daemon set, or stateful set, and use a grace period of 15 minutes
oc adm drain foo --grace-period=900

⭐ SEE ALSO ⭐

oc-adm(1), β€” go check that one too, bestie. 🫢

🧚 HISTORY 🧚

June 2016, Ported from the Kubernetes man-doc generator β€” that’s the whole history entry, and it ate. πŸ‘‘


source/version: Openshift / Openshift CLI User Manuals; date: June 2016. okay bye bestie, slay your maintenance window πŸ’–βœ¨

πŸ“¦ where this page comes from