我需要一个bash脚本,才能在关闭或使用Kubernetes API重启之前仅删除特定节点上的pod。
答案 0 :(得分:1)
如果您的目标是从特定节点移除所有广告并停止在该节点上安排新广告连播,则您可能需要kubectl drain:它会停止向节点并杀死任何现有节点。
就像调用
一样简单kubectl drain NODE
并附带一些额外的开关来调整行为(例如定义一个正常的终止时段)。
答案 1 :(得分:0)
找到适用于我正在努力实现的解决方案:
for each in $(curl -XGET https://URL/api/v1/namespaces | jq -r '.items[].metadata.name');
do arr=($(curl -XGET https://URL/api/v1/namespaces/$each/pods | jq --arg node `hostname` -r '.items[] | select(.spec.nodeName == $node) | .metadata.name'));
for i in ${arr[@]};
do curl -XDELETE https://URL/api/v1/namespaces/$each/pods/$i ;
done
done
这是一个存在于每个Worker节点上的脚本,它在每次重新启动或关闭之前执行,并且只删除该节点上存在的所有命名空间中的所有pod。在此之前,还有另一个命令将节点标记为“不可调度”。如果有人对此感兴趣,我可以发布完整的解决方案