即时更新POD的节点选择器字段

时间:2019-03-26 12:32:37

标签: kubernetes kubectl pod

这些天来,我一直在尝试围绕k8s做不同的事情。我想知道POD规范中的字段nodeSelector。 据我了解,我们必须为节点分配一些标签,并且这些标签可以在POD规范的nodeSelector字段部分中进一步使用。

基于nodeSelector将节点分配给Pod可以正常工作。但是,在创建Pod之后,现在我想更新/覆盖nodeSelector字段,该字段将根据更新的新nodeSelector标签将Pod部署到新节点。

我正在以与使用kubectl label命令对普通标签进行操作相同的方式来考虑这一问题。

有没有骇客来实现这种情况?

如果当前最新版本的kubernetes无法做到这一点,为什么我们不考虑呢?

谢谢。

1 个答案:

答案 0 :(得分:2)

虽然按照cookiedough的建议手动编辑部署是一种选择,但我相信使用delay 5.0;是更好的解决方案。

您可以使用yaml文件或JSON字符串进行修补,这样可以更轻松地将内容集成到脚本中。这是完整的reference


示例

这是我使用的nginx的简单部署,将在kubctl patch上创建:

node-1

JSON补丁

您可以按如下所示修补部署以更改所需的节点:
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.7.9 ports: - containerPort: 80 nodeSelector: kubernetes.io/hostname: node-1

YAML补丁

通过运行kubectl patch deployments nginx-deployment -p '{"spec": {"template": {"spec": {"nodeSelector": {"kubernetes.io/hostname": "node-2"}}}}}',其中patch.yaml的准备如下:

kubectl patch deployment nginx-deployment --patch "$(cat patch.yaml)"

这两者都将导致调度程序在请求的节点上调度新的pod,并在新的pod准备好后立即终止旧的pod。