为什么我不断收到错误消息“5 pod has unbound immediate PersistentVolumeClaims”?

Why do I keep getting error "5 pod has unbound immediate PersistentVolumeClaims"?

我正在关注面向开发人员的 Kubernetes 这本书,现在看来这本书可能已经严重过时了。 最近我一直在尝试按照书中的说明在 kubernetes 上启动 prometheus 和 运行。这建议安装和使用 HELM 来启动 Prometheus 和 grafana 并 运行.

 helm install monitor stable/prometheus --namespace monitoring

这导致:

NAME                                               READY   STATUS             RESTARTS   AGE   IP               NODE              NOMINATED NODE   READINESS GATES
monitor-kube-state-metrics-578cdbb5b7-pdjzw        0/1     CrashLoopBackOff   14         36m   192.168.23.1     kube-worker-vm3   <none>           <none>
monitor-prometheus-alertmanager-7b4c476678-gr4s6   0/2     Pending            0          35m   <none>           <none>            <none>           <none>
monitor-prometheus-node-exporter-5kz8x             1/1     Running            0          14h   192.168.1.13     rockpro64         <none>           <none>
monitor-prometheus-node-exporter-jjrjh             1/1     Running            1          14h   192.168.1.35     osboxes           <none>           <none>
monitor-prometheus-node-exporter-k62fn             1/1     Running            1          14h   192.168.1.37     kube-worker-vm3   <none>           <none>
monitor-prometheus-node-exporter-wcg2k             1/1     Running            1          14h   192.168.1.36     kube-worker-vm2   <none>           <none>
monitor-prometheus-pushgateway-6898f8475b-sk4dz    1/1     Running            0          36m   192.168.90.200   osboxes           <none>           <none>
monitor-prometheus-server-74d7dc5d4c-vlqmm         0/2     Pending            0          14h   <none>           <none>            <none

对于普罗米修斯服务器,我检查了为什么它是待处理的:

# kubectl describe pod monitor-prometheus-server-74d7dc5d4c-vlqmm -n monitoring
Name:           monitor-prometheus-server-74d7dc5d4c-vlqmm
Namespace:      monitoring
Priority:       0
Node:           <none>
Labels:         app=prometheus
                chart=prometheus-13.8.0
                component=server
                heritage=Helm
                pod-template-hash=74d7dc5d4c
                release=monitor
Annotations:    <none>
Status:         Pending
IP:             
IPs:            <none>
Controlled By:  ReplicaSet/monitor-prometheus-server-74d7dc5d4c
Containers:
  prometheus-server-configmap-reload:
    Image:      jimmidyson/configmap-reload:v0.4.0
    Port:       <none>
    Host Port:  <none>
    Args:
      --volume-dir=/etc/config
      --webhook-url=http://127.0.0.1:9090/-/reload
    Environment:  <none>
    Mounts:
      /etc/config from config-volume (ro)
      /var/run/secrets/kubernetes.io/serviceaccount from monitor-prometheus-server-token-n49ls (ro)
  prometheus-server:
    Image:      prom/prometheus:v2.20.1
    Port:       9090/TCP
    Host Port:  0/TCP
    Args:
      --storage.tsdb.retention.time=15d
      --config.file=/etc/config/prometheus.yml
      --storage.tsdb.path=/data
      --web.console.libraries=/etc/prometheus/console_libraries
      --web.console.templates=/etc/prometheus/consoles
      --web.enable-lifecycle
    Liveness:     http-get http://:9090/-/healthy delay=30s timeout=30s period=15s #success=1 #failure=3
    Readiness:    http-get http://:9090/-/ready delay=30s timeout=30s period=5s #success=1 #failure=3
    Environment:  <none>
    Mounts:
      /data from storage-volume (rw)
      /etc/config from config-volume (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from monitor-prometheus-server-token-n49ls (ro)
Conditions:
  Type           Status
  PodScheduled   False 
Volumes:
  config-volume:
    Type:      ConfigMap (a volume populated by a ConfigMap)
    Name:      monitor-prometheus-server
    Optional:  false
  storage-volume:
    Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
    ClaimName:  monitor-prometheus-server
    ReadOnly:   false
  monitor-prometheus-server-token-n49ls:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  monitor-prometheus-server-token-n49ls
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                 node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type     Reason            Age                  From               Message
  ----     ------            ----                 ----               -------
  Warning  FailedScheduling  28m (x734 over 14h)  default-scheduler  0/6 nodes are available: 6 pod has unbound immediate PersistentVolumeClaims.
  Warning  FailedScheduling  3m5s (x23 over 24m)  default-scheduler  0/5 nodes are available: 5 pod has unbound immediate PersistentVolumeClaims.
r

然而,我看到的这条消息 0/5 nodes are available: 5 pod has unbound immediate PersistentVolumeClaims. 与我尝试创建的所有其他 nodejs StatefulSets 和 rabbitmq 部署一起出现。对于 rabbitmq 和 nodejs,我发现我需要创建一个 PersistantVolume 和一个存储 class,我需要在 PV 和 PVC 中指定其名称。然后一切正常,但现在我有了 Prometheus 服务器,我是否也必须为 prometheus 做同样的事情?为什么 HELM 不指示它?

最近 Kubernetes API 有什么变化吗?我总是必须为 PVC 显式创建 PV 和存储 Class ?

除非您使用 dynamic volume provisioning , you will have to make the PV manually each time. Even if you are not on a cloud, you can setup dynamic storage providers. There are a number of options for providers and you can find many here 配置集群。 Ceph 和 minio 是受欢迎的供应商。