在 Kubernetes 集群中,你可以通过使用 nodeSelector
、nodeAffinity
和 taints
与 tolerations
来将一个 deployment
部署到指定的节点上,并确保该节点上只运行此 deployment
。以下是具体步骤:
-
给目标节点打标签:
选择一个节点,并给它打上一个唯一的标签。比如你可以将节点打上role=dev-node
标签:kubectl label nodes <your-node-name> role=dev-node
-
使用
nodeSelector
绑定 Deployment 到特定节点:
在你的 Deployment 配置文件中,使用nodeSelector
将该 Deployment 绑定到带有特定标签的节点上。以下是一个示例配置:apiVersion: apps/v1 kind: Deployment metadata: name: dev-deployment spec: replicas: 1 selector: matchLabels: app: dev-app template: metadata: labels: app: dev-app spec: containers: - name: dev-container image: your-image:latest nodeSelector: role: dev-node
-
给节点添加 taint:
为确保该节点只运行此deployment
,你可以给该节点添加一个taint
,使得其他deployment
无法调度到该节点。比如:kubectl taint nodes <your-node-name> dedicated=dev:NoSchedule
-
在 Deployment 中添加
tolerations
:
在 Deployment 配置文件中添加tolerations
,允许其调度到有taint
的节点上:apiVersion: apps/v1 kind: Deployment metadata: name: dev-deployment spec: replicas: 1 selector: matchLabels: app: dev-app template: metadata: labels: app: dev-app spec: containers: - name: dev-container image: your-image:latest nodeSelector: role: dev-node tolerations: - key: "dedicated" operator: "Equal" value: "dev" effect: "NoSchedule"
通过以上步骤,你可以确保你的 dev-deployment
只部署在指定节点上,并且该节点上只能部署这个 dev-deployment
。