Kubernetes中清空一個node的所有pod


有時侯kubernetes中有些node會出現故障 這時侯就需要用到兩個命令 drain及uncordon

# 先獲取node 的名字
kubectl get nodes

# 命令node開始釋放所有pod, 並且不接收新的pod 排程
kubectl drain [node-name] --force --ignore-daemonsets --delete-local-data

#
# 這時侯把該做的事情都做一下 ...
#

# 恢復node,回復接收新的pod 排程
kubectl uncordon [node-name]

drain的參數

--force 當一些pod不是經 ReplicationController, ReplicaSet, Job, DaemonSet 或者 StatefulSet 管理時 就需要用--force來強制執行 (例如:kube-proxy)

--ignore-daemonsets 無視DaemonSet管理下的Pod

--delete-local-data 如果有mount local volumn的pod,會強制殺掉該pod並把資料清除掉 另外如果跟本身的配置訊息有衝突時,drain就不會執行

例如你在一個運行了三個replica的statefulSet中設定了PodDisruptionBudget,而minAvaliability又設成了2,當正在運行的pod數量等於或少於2的時侯,drain就會停止執行


參考