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 的新节点池。我有以下 DeploymentVolumeService 文件。

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

中添加具有相同配置的新节点解决了问题