Kubernetes:节点没有';找不到要绑定的可用持久卷

Kubernetes:节点没有';找不到要绑定的可用持久卷,kubernetes,Kubernetes,我正在尝试设置一个本地存储,如下所述()。我得到以下错误,调度程序无法调度POD。本地存储映射到工作节点之一。我尝试在主节点上设置本地存储,但得到了相同的错误。我哪里做错了 警告失败调度24秒(x2/24秒)默认调度程序0/3节点可用:1个节点与节点选择器不匹配,2个节点未找到要绑定的可用永久卷 ------------------------------------------------------------------- kubectl get nodes -o wide NAME

我正在尝试设置一个本地存储,如下所述()。我得到以下错误,调度程序无法调度POD。本地存储映射到工作节点之一。我尝试在主节点上设置本地存储,但得到了相同的错误。我哪里做错了

警告失败调度24秒(x2/24秒)默认调度程序0/3节点可用:1个节点与节点选择器不匹配,2个节点未找到要绑定的可用永久卷

-------------------------------------------------------------------

kubectl get nodes -o wide
NAME                  STATUS   ROLES    AGE   VERSION   INTERNAL-IP      EXTERNAL-IP   OS-IMAGE                         KERNEL-VERSION      CONTAINER-RUNTIME
rpi-k8-workernode-2   Ready    <none>   92d   v1.15.0   192.168.100.50   <none>        Raspbian GNU/Linux 9 (stretch)   4.19.42-v7+         docker://18.9.0
rpi-mon-k8-worker     Ready    <none>   91d   v1.15.0   192.168.100.22   <none>        Raspbian GNU/Linux 9 (stretch)   4.19.42-v7+         docker://18.9.0
udubuntu              Ready    master   92d   v1.15.1   192.168.100.24   <none>        Ubuntu 18.04.3 LTS               4.15.0-55-generic   docker://19.3.4

-------------------------------------------------------------------
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: local-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
------------------------------------------------------------------------

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-ghost
  namespace: ghost
spec:
  capacity:
    storage: 10Gi
  accessModes:
  - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: local-storage
  local:
    path: /mnt/mydrive/ghost-data/
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - rpi-mon-k8-worker
------------------------------------------------------------------------
apiVersion: v1

kind: PersistentVolumeClaim

metadata:
  name: pvc-ghost
  namespace: ghost
  labels:
    pv: pv-ghost

spec:
  accessModes:
    - ReadWriteOnce

  resources:
    requests:
      storage: 10Gi
  storageClassName: local-storage
  selector:
    matchLabels:
      name: pv-ghost
------------------------------------------------------------------------

apiVersion: apps/v1

kind: Deployment
metadata:
  name:
    deployment-ghost
  namespace: ghost
  labels:
    env: prod
    app: ghost-app

spec:
  template:
    metadata:
      name: ghost-app-pod
      labels:
        app:  ghost-app
        env:  production
    spec:
      containers:
        - name: ghost
          image: arm32v7/ghost
          imagePullPolicy: IfNotPresent
          volumeMounts:
           - mountPath: /var/lib/ghost/content
             name: ghost-blog-data
          securityContext:
            privileged: True
 volumes:
      - name: ghost-blog-data
        persistentVolumeClaim:
          claimName: pvc-ghost
      nodeSelector:
        beta.kubernetes.io/arch: arm

  replicas: 2
  selector:
    matchLabels:
      app: ghost-app


kubectl get nodes --show-labels
NAME                  STATUS   ROLES    AGE   VERSION   LABELS
rpi-k8-workernode-2   Ready    <none>   93d   v1.15.0   beta.kubernetes.io/arch=arm,beta.kubernetes.io/os=linux,kubernetes.io/arch=arm,kubernetes.io/hostname=rpi-k8-workernode-2,kubernetes.io/os=linux
rpi-mon-k8-worker     Ready    <none>   93d   v1.15.0   beta.kubernetes.io/arch=arm,beta.kubernetes.io/os=linux,kubernetes.io/arch=arm,kubernetes.io/hostname=rpi-mon-k8-worker,kubernetes.io/os=linux
udubuntu              Ready    master   93d   v1.15.1   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=udubuntu,kubernetes.io/os=linux,node-role.kubernetes.io/master=

-----------------------------------------------------------
ud@udubuntu:~/kube-files$ kubectl describe pvc pvc-ghost -n ghost
Name:          pvc-ghost
Namespace:     ghost
StorageClass:  manual
Status:        Pending
Volume:
Labels:        pv=pv-ghost
Annotations:   kubectl.kubernetes.io/last-applied-configuration:
                 {"apiVersion":"v1","kind":"PersistentVolumeClaim","metadata":{"annotations":{},"labels":{"pv":"pv-ghost"},"name":"pvc-ghost","namespace":"...
Finalizers:    [kubernetes.io/pvc-protection]
Capacity:
Access Modes:
VolumeMode:    Filesystem
Mounted By:    <none>
Events:
  Type    Reason                Age               From                         Message
  ----    ------                ----              ----                         -------
  Normal  WaitForFirstConsumer  6s (x2 over 21s)  persistentvolume-controller  waiting for first consumer to be created before binding
-------------------------------------------------------------------
kubectl获取节点-o宽
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
rpi-k8-workernode-2 Ready 92d v1.15.0 192.168.100.50 Raspbian GNU/Linux 9(扩展版)4.19.42-v7+docker://18.9.0
rpi-mon-k8-worker Ready 91d v1.15.0 192.168.100.22 Raspbian GNU/Linux 9(stretch)4.19.42-v7+docker://18.9.0
UdubuntuReady master 92d v1.15.1 192.168.100.24 Ubuntu 18.04.3 LTS 4.15.0-55-genericdocker://19.3.4
-------------------------------------------------------------------
种类:StorageClass
apiVersion:storage.k8s.io/v1
元数据:
名称:本地存储
供应人:kubernetes.io/no-provisioner
volumeBindingMode:WaitForFirstConsumer
------------------------------------------------------------------------
版本:v1
种类:PersistentVolume
元数据:
名称:pv ghost
名称空间:ghost
规格:
容量:
存储:10Gi
访问模式:
-读写
PersistentVolumeClaIncolicy:保留
storageClassName:本地存储
本地:
路径:/mnt/mydrive/ghost数据/
节点相关性:
必修的:
nodeSelectorTerms:
-匹配表达式:
-关键字:kubernetes.io/hostname
接线员:在
价值观:
-rpi-mon-k8-worker
------------------------------------------------------------------------
版本:v1
种类:PersistentVolumeClaim
元数据:
名称:pvc鬼
名称空间:ghost
标签:
pv:pv鬼
规格:
访问模式:
-读写
资源:
请求:
存储:10Gi
storageClassName:本地存储
选择器:
火柴标签:
名称:pv ghost
------------------------------------------------------------------------
apiVersion:apps/v1
种类:部署
元数据:
姓名:
部署重影
名称空间:ghost
标签:
环境:产品
应用程序:鬼应用程序
规格:
模板:
元数据:
名称:ghost应用程序吊舱
标签:
应用程序:鬼应用程序
环境:生产
规格:
容器:
-姓名:鬼
图片:arm32v7/ghost
imagePullPolicy:如果不存在
体积数量:
-挂载路径:/var/lib/ghost/content
名称:ghost博客数据
securityContext:
特权:真的
卷数:
-名称:ghost博客数据
persistentVolumeClaim:
索赔名称:pvc ghost
节点选择器:
beta.kubernetes.io/arch:arm
副本:2份
选择器:
火柴标签:
应用程序:鬼应用程序
kubectl获取节点--显示标签
名称状态角色年龄版本标签
rpi-k8-workernode-2 Ready 93d v1.15.0 beta.kubernetes.io/arch=arm,beta.kubernetes.io/os=linux,kubernetes.io/arch=arm,kubernetes.io/hostname=rpi-k8-workernode-2,kubernetes.io/os=linux
rpi-mon-k8-worker-Ready 93d v1.15.0 beta.kubernetes.io/arch=arm,beta.kubernetes.io/os=linux,kubernetes.io/arch=arm,kubernetes.io/hostname=rpi-mon-k8-worker,kubernetes.io/os=linux
udubuntu Ready master 93d v1.15.1 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=udubuntu,kubernetes.io/os=linux,node-role.kubernetes.io/master=
-----------------------------------------------------------
ud@udubuntu:~/kube文件$kubectl描述pvc ghost-n ghost
名称:pvc鬼
名称空间:ghost
存储类别:手动
状态:待定
卷:
标签:pv=pv重影
注释:kubectl.kubernetes.io/last-applicated-configuration:
{“apiVersion”:“v1”,“种类”:“PersistentVolumeClaim”,“元数据”:{“注释”:{},“标签”:{“pv”:“pv ghost”},“名称”:“pvc ghost”,“命名空间”:。。。
终结器:[kubernetes.io/pvc保护]
容量:
访问模式:
VolumeMode:文件系统
安装人:
活动:
从消息中键入原因年龄
----    ------                ----              ----                         -------
正常WaitForFirstConsumer 6s(x2/21s)persistentvolume控制器在绑定前等待创建第一个consumer

从警告中可以看到
1个节点与节点选择器不匹配,2个节点找不到可用的永久卷进行绑定。
,您在部署重影中设置了一个
节点选择器
,因此您的一个工作节点与此选择器不匹配。如果您从该.yaml文件中删除
节点选择器
字段。这样,pod将部署到创建
PV
的节点。AFAIK,它将被删除无法将pod部署到用于声明的
PV
位于另一个工作节点中的工作节点。 最后,在其他节点中,没有创建
PV
s。您可以通过以下方式检查创建的
PV
s和
PVC
s:

kubectl get pv
kubectl get pvc -n <namespace>
无需将名称空间字段添加到
kind:persistentVolume
中,因为
PersistentVolumes
绑定是独占的,
persistentVolumeClaimes
是名称空间对象


我测试了它,它对我有效。

@majid..感谢您的输入。我无法删除部署yaml上的节点选择器,因为工作节点是arm节点,而主节点是intel节点。要确保
kubectl describe pv <pv_name> 
kubectl describe pv <pv_name> -n <namespace>
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-ghost
  labels:
    name: pv-ghost
spec:
  capacity:
    storage: 10Gi
  accessModes:
  - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: local-storage
  local:
    path: /mnt/mydrive/ghost-data/
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - rpi-mon-k8-worker