【问题标题】:Error: `pod has unbound immediate PersistentVolumeClaims` while deploying microservices on local machine错误:在本地机器上部署微服务时,`pod has unbound immediate PersistentVolumeClaims`
【发布时间】:2021-11-29 15:47:38
【问题描述】:

当我尝试在本地部署我的微服务时,我收到有关卷的错误。我已经削减了所有其他配置,在这里只提供了令人不安的部分。

持续音量:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: service-1-db-pv
spec:
  capacity:
    storage: 250Mi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce
  storageClassName: ''
  hostPath:
    path: /mnt/wsl/service-1-pv
    type: DirectoryOrCreate

持久卷声明:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: service-1-db-pvc
spec:
  volumeName: service-1-db-pv
  resources:
    requests:
      storage: 250Mi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce
  storageClassName: ''

服务:

apiVersion: v1
kind: Service
metadata:
  name: service-service-1-db
spec:
  selector:
    app: service-1-db
  ports:
    - protocol: TCP
      port: 27017
      targetPort: 27017

部署:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment-service-1-db
spec:
  selector:
    matchLabels:
      app: service-1-db
  template:
    metadata:
      labels:
        app: service-1-db
    spec:
      containers:
        - name: service-1-db
          image: mongo:latest
          volumeMounts:
            - name: service-1-db-volume
              mountPath: /data/db
          resources:
            requests:
              cpu: 250m
              memory: 128Mi
            limits:
              cpu: 1000m
              memory: 256Mi
      volumes:
        - name: service-1-db-volume
          persistentVolumeClaim:
            claimName: service-1-db-pvc

当我尝试运行 skaffold run --tail 时,我得到以下输出:

Starting deploy...
 - persistentvolume/service-1-db-pv created
 - persistentvolumeclaim/service-1-db-pvc created
 - service/service-service-1-db created
 - deployment.apps/deployment-service-1-db created
Waiting for deployments to stabilize...
 - deployment/deployment-service-1-db: 0/1 nodes are available: 1 pod has unbound immediate PersistentVolumeClaims.
    - pod/deployment-service-1-db-6f9b896485-mv8qx: 0/1 nodes are available: 1 pod has unbound immediate PersistentVolumeClaims.
 - deployment/deployment-service-1-db is ready.
Deployments stabilized in 22.23 seconds

我不知道出了什么问题。关注thisthis

【问题讨论】:

  • 检查“kubectl get pods”它应该给你一个正在运行的 service-1db-deployment pod。从我从您提供的日志文件中读出的内容中,为 pod 配置和访问 pvc 只需要一些时间
  • 不,不是。 kubectl get pods 在 11 秒后给我OOMKilled 状态,在 34 秒后给我CrashLoopBackOff
  • OOMKiled 只有在 pod 已经成功启动并正确挂载 pvc 时才会发生。上调资源/限制/内存字段,为应用程序提供更多内存。

标签: kubernetes


【解决方案1】:

“pod has unbound PVC”表明与您的 Pod 关联的 PersistentVolumeClaim 是......未绑定。这意味着您的卷配置器可能仍在等待确认相应卷已创建,然后才将您的 PVC 标记为已绑定。

考虑到您的上一个日志提到部署已准备就绪,因此无需担心太多。

您可以寻找的一件事是您的 StorageClass VolumeBindingMode:

  • 如果“立即”,那么您的供应商将在您注册新 PVC 后立即尝试创建 PV。
  • 如果是“OnDemand”,那么 Kubernetes 将等待 Pod 尝试(并失败)附加卷一次,然后才会开始 PV 创建过程。

虽然如果您相对同时创建 PVC 和 Deployment,这不会有太大变化。

这里没有什么重要的。尽管如果这样的错误仍然存​​在:您的卷配置程序可能有问题,或者更有可能:您的存储提供程序。例如,对于 Ceph,当您缺少监视器时:您将无法创建新卷 - 尽管您仍然可以读取/写入现有卷。


编辑,回答您的评论:

没有什么可以做的。

首先:确保您的 StorageClass VolumeBindingMode 设置为 Immediate - 否则,在您创建附加该卷的 Pod 之前不会进行任何配置。

接下来,您可以查看 Operator SDK 或任何可以查询 API(Ansible、python、... shell 脚本)的东西,例如您可以实现一些等待您的 PVC 状态以确认配置成功的东西。

再说一次,不能保证您的部署将始终应用于提供即时卷绑定的集群。 OnDemand 并没有什么问题——在更大的集群上,有很多用户不一定要清理对象,......这并不罕见。

您提到的那些事件可以说不是错误。即使是立即绑定。 Pod 控制器等待卷正确注册并准备好使用是完全正常的。

【讨论】:

  • 是的,我也假设它同时发生,我需要等待 PVC 完全绑定,然后再将它们与 pod 连接。那么有没有办法“等待”PVC绑定? This 是我目前正在练习的项目。
  • 感谢您更新的答案。我按照this 指南创建了一个具有精确配置的新存储类。现在问题消失了。我已将您的答案标记为已接受。如果您有时间,请随时在this 上投稿。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-07
  • 1970-01-01
  • 2020-07-04
  • 2018-10-22
  • 2018-04-24
  • 2022-01-10
  • 1970-01-01
相关资源
最近更新 更多