节点资源飙高:临时迁移 Pod
适用:某 Worker 资源告警,需把大户 Pod 临时迁走。
要点:无 memory request 时,不 cordon 直接删 Pod 往往会落回原节点。
1. 定位(只读)
timeout 10 bash -c '
kubectl top node --no-headers
echo "-----"
kubectl get pods -A --field-selector spec.nodeName=<NODE_IP> --no-headers \
-o custom-columns=NS:.metadata.namespace,NAME:.metadata.name,STATUS:.status.phase
'
对嫌疑 Pod 再确认占用(可按需):
timeout 10 kubectl top pod -n <NS> <POD_NAME> --no-headers
2. 迁移(cordon + 删 Pod + 验证)
**变更:**禁止向该节点调度,并删除 Pod 触发重建。
timeout 10 bash -c '
kubectl cordon <NODE_IP> && \
kubectl delete pod -n <NS> <POD_NAME> --wait=false && \
kubectl get node <NODE_IP> --no-headers && \
kubectl get pods -n <NS> -o wide --no-headers | grep <APP_KEYWORD>
'
预期:节点含 SchedulingDisabled;稍后新 Pod 在其他节点 Running。若还未起来,隔几秒再查:
timeout 10 bash -c '
kubectl get pods -n <NS> -o wide --no-headers | grep <APP_KEYWORD>
kubectl top node <NODE_IP> --no-headers
'
3. 恢复(uncordon + 验证)
**变更:**恢复该节点可调度。
timeout 10 bash -c '
kubectl uncordon <NODE_IP> && \
kubectl get node <NODE_IP> --no-headers
'
预期:Ready(无 SchedulingDisabled)。
注意
- 优先迁占用最大、多副本/可短暂中断的 Pod;目标侧选
top node明显更空的节点。 - 此为止血;长期需配 memory requests / 反亲和,避免再次叠机。