Что такое PersistentVolumeClaim pending?

Ошибка PersistentVolumeClaim pending возникает, когда Kubernetes не может привязать PVC к доступному PersistentVolume.

Причины возникновения

  • Нет доступных PersistentVolume
  • Несоответствие StorageClass
  • Недостаточно места на storage
  • Проблемы с правами доступа
  • Неправильная конфигурация StorageClass
  • Проблемы с CSI driver

Как отладить ошибку

  1. Проверь PVC - kubectl get pvc
  2. Проверь PV - kubectl get pv
  3. Проверь StorageClass - kubectl get storageclass
  4. Проверь события - kubectl describe pvc pvc-name
  5. Проверь storage capacity - kubectl top nodes

Как исправить ошибку

1. Создай PersistentVolume

 1apiVersion: v1
 2kind: PersistentVolume
 3metadata:
 4  name: my-pv
 5spec:
 6  capacity:
 7    storage: 10Gi
 8  accessModes:
 9    - ReadWriteOnce
10  persistentVolumeReclaimPolicy: Retain
11  storageClassName: local-storage
12  local:
13    path: /mnt/data
14  nodeAffinity:
15    required:
16      nodeSelectorTerms:
17      - matchExpressions:
18        - key: kubernetes.io/hostname
19          operator: In
20          values:
21          - node-1

2. Настрой StorageClass

 1apiVersion: storage.k8s.io/v1
 2kind: StorageClass
 3metadata:
 4  name: fast-ssd
 5provisioner: kubernetes.io/aws-ebs
 6parameters:
 7  type: gp2
 8  iops: "3000"
 9volumeBindingMode: WaitForFirstConsumer
10allowVolumeExpansion: true

3. Создай PVC с правильными параметрами

 1apiVersion: v1
 2kind: PersistentVolumeClaim
 3metadata:
 4  name: my-pvc
 5spec:
 6  accessModes:
 7    - ReadWriteOnce
 8  storageClassName: fast-ssd
 9  resources:
10    requests:
11      storage: 10Gi

4. Используй динамическое provisioning

 1apiVersion: v1
 2kind: PersistentVolumeClaim
 3metadata:
 4  name: my-pvc
 5spec:
 6  accessModes:
 7    - ReadWriteOnce
 8  storageClassName: managed-premium  # Azure Premium Storage
 9  resources:
10    requests:
11      storage: 10Gi

5. Проверь и исправь права доступа

1# Проверь права на storage
2ls -la /mnt/data
3
4# Измени права если нужно
5chmod 755 /mnt/data
6chown 1000:1000 /mnt/data
7
8# Проверь SELinux контекст
9ls -Z /mnt/data

6. Используй volume в Pod

 1apiVersion: v1
 2kind: Pod
 3metadata:
 4  name: my-app
 5spec:
 6  containers:
 7  - name: app
 8    image: nginx:latest
 9    volumeMounts:
10    - name: data-volume
11      mountPath: /data
12  volumes:
13  - name: data-volume
14    persistentVolumeClaim:
15      claimName: my-pvc

Как мониторить подобные ошибки

  • Мониторь доступность storage
  • Настрой алерты на pending PVC
  • Проверяй capacity storage
  • Логируй события storage

FAQ

В: Что делать, если нет доступных PV?

О: Создай новые PV или настрой динамическое provisioning через StorageClass.

В: Как выбрать правильный StorageClass?

О: Учитывай требования к производительности, доступности и стоимости.

В: Что делать с проблемами CSI driver?

О: Проверь установку CSI driver, логи и совместимость версий.

Лучшие практики

  • Используй StorageClass для динамического provisioning
  • Планируй capacity заранее
  • Настрой backup стратегии
  • Мониторь использование storage
  • Документируй storage требования