我有一个应用程序Pod,它将部署在k8s集群上 但是随着Kubernetes调度程序决定该Pod需要在哪个节点上运行
现在,我想向使用NOschedule运行我的应用程序pod的节点动态添加污点,以便在该节点上不再安排新的pod。
我知道如果知道节点名称,我们可以将kubectl taint节点与NOschedule一起使用,但是我想根据此应用程序pod正在运行的节点来动态实现
我要执行此操作的原因是这是至关重要的应用程序容器,它不应停机,并且出于很好的原因,我在整个集群中只有一个用于该应用程序的容器
请提出建议
答案 0 :(得分:0)
您可以使用以下内容获取运行pod的节点:
$ kubectl get pod myapp-pod -o=jsonpath='{.spec.nodeName}'
然后您可以对其进行污染:
$ kubectl taint nodes <node-name-from-above> key=value:NoSchedule
或整个命令合在一起:
$ kubectl taint nodes $(kubectl get pod myapp-pod -o=jsonpath='{.spec.nodeName}') key=value:NoSchedule
答案 1 :(得分:0)
除了@Rico答案。
您可以使用名为node affinity的功能,该功能仍是测试版,但已经实现了某些功能。
您应将label
添加到节点,例如test-node-affinity: test
。完成此操作后,您可以在PodSpec中添加字段nodeAffinity
的{{1}}。
affinity
这将意味着spec:
...
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: test-node-affinity
operator: In
values:
- test
将查找具有键POD
和值test-node-affinity
的节点,并将其部署在其中。
我建议阅读Toader Sebastian撰写的博客Taints and tolerations, pod and node affinities demystified。
还要熟悉Kubernetes文档中的Taints and Tolerations。