Go 作为Kubernetes群集中部署的一部分移动吊舱

Go 作为Kubernetes群集中部署的一部分移动吊舱,go,kubernetes,kubectl,kubernetes-pod,Go,Kubernetes,Kubectl,Kubernetes Pod,我正在创建一个自主的重新调度程序,它能够根据资源使用情况、网络指标等在移动中重新调度POD。我的Kubernetes群集目前只有5个部署作为测试设置,每个部署只有一个Pod实例(副本:1)。我能够在我的系统中生成一个新的调度,并通过执行以下补丁将其应用于集群 kubectl patch deployment fake-microservice-1 -p "{\"spec\":{\"template\":{\"spec\":{\

我正在创建一个自主的重新调度程序,它能够根据资源使用情况、网络指标等在移动中重新调度POD。我的Kubernetes群集目前只有5个部署作为测试设置,每个部署只有一个Pod实例(副本:1)。我能够在我的系统中生成一个新的调度,并通过执行以下补丁将其应用于集群

kubectl patch deployment fake-microservice-1 -p "{\"spec\":{\"template\":{\"spec\":{\"nodeSelector\":{\"kubernetes.io/hostname\":\"node1\"}}}}}"
此修补程序成功地将
fake-microservice-1
部署中的Pod移动到
node1

接下来我要实现的是,如果部署中有多个Pod副本,我可以将部署中的每个Pod移动到特定节点。例如,假设
fake-microservice-1
部署有2个副本(2个POD)。例如,如何将一个POD移动到
node1
,将另一个POD移动到
node4

我曾尝试修补单个Pod的
节点相关性
,但这是不可能的,因为当Pod运行时,Kubernetes不允许更新此值

是否有一种方法可以通过修补某些值、添加标签或通过其他方式将部署中的各个吊舱移动到特定节点


这并不重要,但所有这些都是在Go中开发的。

您使用nodeaffinity是正确的,但是我对
表示怀疑,因为Kubernetes不允许在Pod运行时更新此值。
您可以使用
requiredDuringSchedulingRequiredDuringExecution
如果您将使用补丁程序修补部署,该怎么办亲和力和亲和性,而荚果运行它会创造新的荚在那时也许它会考虑的亲和力规则,我们添加使用补丁。同时添加亲和性和反亲和性可能会有所帮助<代码>kubectl补丁程序pod fake-microservice-1-75f65b9dcf-cv4h7-p“{”规范\“:{”亲和性\“:{”节点关联性\“:{”所需调度调度所需执行\“:{”节点选择表\“:[{”匹配表达式\“:[{”键\“:\“kubernetes.io/hostname\”,\“操作符\“:”In\”,“value\”,“:[“value\”:[“node3\]”]}}但pod的代码是<“fake-microservice-1-75f65b9dcf-cv4h7”无效:规范:禁止:pod更新不能更改除…以外的字段。我在这里做错了什么?您使用
kind:deployment
或as-pod?as
kind:deployment
管理pod。但我希望能够将部署中的单个pod移动到特定节点。