我目前正在为生产环境创建一个Kubernetes集群。
在我的集群中,我有2个节点池,我们称它们为api-pool
和web-pool
在我的api-pool
中,我有2个节点,每个节点具有4CPU和15Gb RAM。
我正在尝试在我的api-pool
中部署api的8个副本,每个副本应具有1CPU和3.5Gi RAM。
我的api.deployment.yaml看起来像这样:
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: api-dev
spec:
replicas: 8
selector:
matchLabels:
app: my-api
template:
metadata:
labels:
app: my-api
spec:
containers:
- name: api-docker
image: //MY_IMAGE
imagePullPolicy: Always
envFrom:
- configMapRef:
name: api-dev-env
- secretRef:
name: api-dev-secret
ports:
- containerPort: 80
resources:
requests:
cpu: "1"
memory: "3.5Gi"
但是我的问题是 Kubernetes在我的web-pool
以及api-pool
的节点上部署了Pod,但是我希望这些Pod只在我的节点中部署api-pool
。
我试图标记api-pool
的节点以使用与标签匹配的选择器,但是它不起作用,并且我不确定它是否应该那样工作。
如何精确定位到K8才能仅在我的api-pool
中部署这8个副本?
答案 0 :(得分:4)
您可以使用nodeselector,这是推荐的最简单的节点选择约束形式。
使用pool = api标记api-pool的节点
kubectl label nodes nodename pool=api
在pod规范中添加nodeSelector
。
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: api-dev
spec:
replicas: 8
selector:
matchLabels:
app: my-api
template:
metadata:
labels:
app: my-api
spec:
containers:
- name: api-docker
image: //MY_IMAGE
imagePullPolicy: Always
envFrom:
- configMapRef:
name: api-dev-env
- secretRef:
name: api-dev-secret
ports:
- containerPort: 80
resources:
requests:
cpu: "1"
memory: "3.5Gi"
nodeSelector:
pool: api
对于模式高级用例,您可以使用node affinity。