NodeSelector 在 Deployment 中找不到标签值?
NodeSelector can't find the label value in Deployment?
我正在尝试在 GKE
上的特定节点上设置 Mongo DB
。我使用
升级了我当前的集群
gcloud container node-pools create mongo --cluster drogo --num-nodes 1 --region us-east1
它在集群中创建了一个名为 mongo
的新节点池。我有以下 Deployment
、Volume
和 Service
文件。
Deployment.YAML
apiVersion: apps/v1
kind: Deployment
metadata:
name: mongo
spec:
selector:
matchLabels:
app: mongo
template:
metadata:
labels:
app: mongo
spec:
nodeSelector:
cloud.google.com/gke-nodepool: mongo
containers:
- name: mongo
image: mongo:3.6.17-xenial
ports:
- containerPort: 27017
volumeMounts:
- name: storage
mountPath: /data/db
volumes:
- name: storage
persistentVolumeClaim:
claimName: mongo-pvc
在上面的文件中,我提供了nodeSelector
cloud.google.com/gke-nodepool:mongo(如前所述here)
Volume.YAML
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mongo-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 3Gi
Service.YAML
apiVersion: v1
kind: Service
metadata:
name: mongo
spec:
selector:
app: mongo
ports:
- port: 27017
targetPort: 27017
当我检查我的 pod 错误时,它说:
Can’t schedule this Pod because no nodes match the nodeSelector.
Cannot schedule pods: node(s) had volume node affinity conflict.
我在这里做错了什么?任何帮助将不胜感激。
这就是我将 Kubernetes Label
设置到节点池中的方式
I 运行 gcloud container node-pools describe node --cluster=drogo --region us-east1
并且在回复中我可以看到:
autoscaling: {}
config:
diskSizeGb: 20
diskType: pd-standard
imageType: COS_CONTAINERD
labels:
mongo: mongo
machineType: e2-medium
部署设置有两个问题:
部署清单中指定的 nodeSelector
使用了错误的标签
nodeSelector:
cloud.google.com/gke-nodepool: mongo
而创建的节点有一个标签对mongo: mongo
。将节点标签更改为 cloud.google.com/gke-nodepool: mongo
或将部署 nodeSelector 更改为 mongo: mongo
都可以。
以下问题是可用节点 persistentVolume
位于 AZ us-east1-c
而可用节点位于 us-east1-d
。因此,kubernetes 调度程序无法在同一 AZ 中找到请求的 nodeSelector
+ PersistentVolume
的匹配项。通过在 AZ us-east1-c
中添加具有相同配置的新节点解决了问题
我正在尝试在 GKE
上的特定节点上设置 Mongo DB
。我使用
gcloud container node-pools create mongo --cluster drogo --num-nodes 1 --region us-east1
它在集群中创建了一个名为 mongo
的新节点池。我有以下 Deployment
、Volume
和 Service
文件。
Deployment.YAML
apiVersion: apps/v1
kind: Deployment
metadata:
name: mongo
spec:
selector:
matchLabels:
app: mongo
template:
metadata:
labels:
app: mongo
spec:
nodeSelector:
cloud.google.com/gke-nodepool: mongo
containers:
- name: mongo
image: mongo:3.6.17-xenial
ports:
- containerPort: 27017
volumeMounts:
- name: storage
mountPath: /data/db
volumes:
- name: storage
persistentVolumeClaim:
claimName: mongo-pvc
在上面的文件中,我提供了nodeSelector
cloud.google.com/gke-nodepool:mongo(如前所述here)
Volume.YAML
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mongo-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 3Gi
Service.YAML
apiVersion: v1
kind: Service
metadata:
name: mongo
spec:
selector:
app: mongo
ports:
- port: 27017
targetPort: 27017
当我检查我的 pod 错误时,它说:
Can’t schedule this Pod because no nodes match the nodeSelector.
Cannot schedule pods: node(s) had volume node affinity conflict.
我在这里做错了什么?任何帮助将不胜感激。
这就是我将 Kubernetes Label
设置到节点池中的方式
I 运行 gcloud container node-pools describe node --cluster=drogo --region us-east1
并且在回复中我可以看到:
autoscaling: {}
config:
diskSizeGb: 20
diskType: pd-standard
imageType: COS_CONTAINERD
labels:
mongo: mongo
machineType: e2-medium
部署设置有两个问题:
部署清单中指定的 nodeSelector
使用了错误的标签
nodeSelector:
cloud.google.com/gke-nodepool: mongo
而创建的节点有一个标签对mongo: mongo
。将节点标签更改为 cloud.google.com/gke-nodepool: mongo
或将部署 nodeSelector 更改为 mongo: mongo
都可以。
以下问题是可用节点 persistentVolume
位于 AZ us-east1-c
而可用节点位于 us-east1-d
。因此,kubernetes 调度程序无法在同一 AZ 中找到请求的 nodeSelector
+ PersistentVolume
的匹配项。通过在 AZ us-east1-c