Назад | Перейти на главную страницу

Невозможно создать PersistentVolume в Kubernetes

Я пытаюсь создать новый PersistentVolume в Kubernets (версия 1.14), но он возвращает мне следующую ошибку:

The PersistentVolume "postgres-pv-volume" is invalid:
* spec.persistentvolumesource: Forbidden: is immutable after creation
* nodeAffinity: Invalid value: "null": field is immutable

Вот мой YAML:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: postgres-pv-volume
  namespace: is-app
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  nfs:
    path: /vols/is-app
    server: storage-server
    readOnly: false

Я не могу найти ничего об этих ошибочных значениях в документации. Что не так с моей конфигурацией?

Пример конфигурации для постоянного тома с использованием NFS

apiVersion: v1
kind: Service
metadata:
  name: nfs-server
spec:
  # clusterIP: 10.3.240.20
  ports:
    - name: nfs
      port: 2049
    - name: mountd
      port: 20048
    - name: rpcbind
      port: 111
  selector:
    role: nfs-server

Здесь вы можете проверить постоянные тома Kubernetes NFS.

The PersistentVolume "postgres-pv-volume" is invalid:
* spec.persistentvolumesource: Forbidden: is immutable after creation
* nodeAffinity: Invalid value: "null": field is immutable

Похоже по какой-то причине nodeAffinity: поле обязательно для заполнения spec: раздел вашего PersistentVolume определение, и оно автоматически добавляется генератором и присваивается значение null. Значение этого поля является неизменным, т.е. не может быть изменено после создания. Вы можете проверить, каков точный результат, создав только yaml-манифест вашего PV ресурс. Вы можете сделать это, добавив --dry-run -o yaml параметры.

У тебя есть NFS server позади DNS название storage-server доступны в пространстве имен по умолчанию вашего кластера k8s? Нам нужна дополнительная информация о настройке вашей среды, чтобы мы могли вам помочь. Вы используете локальный кластер k8s или какое-либо облачное решение? Как вы можете прочитать здесь (документы для v1.16) (но выглядит точно так же в v1.14 что вы используете):

Примечание: Для большинства типов томов устанавливать это поле не нужно. Он автоматически заполняется для типов блоков томов AWS EBS, GCE PD и Azure Disk. Вам нужно явно установить это для локальных томов.

PV может указывать сродство узла, чтобы определить ограничения, ограничивающие, с каких узлов можно получить доступ к этому тому. Поды, использующие PV, будут запланированы только для узлов, выбранных по привязке узла.

Что касается вашего комментария:

В другом пространстве имен я получил очень похожий том NFS, также без службы nfs-server, но созданный в Kubernetes 1.11. Почему до сих пор работает? Что-то изменилось с требованиями? - Djent 1 час назад

Вам нужно описать его более точно, чтобы его можно было сравнить, но имейте в виду, что 1.11 на данный момент является устаревшей версией, которая больше не поддерживается, и я почти уверен, что с тех пор могли быть внесены некоторые значительные изменения. Это даже невозможно проверить на kubernetes.io веб-сайт, поскольку он больше не поддерживается (самая старая поддерживаемая версия документации k8s в настоящее время - 1.12). Если такая конфигурация работает для вас в кластере 1.11, это, вероятно, означает, что в 1.14 она работает по-другому, если вы не можете реализовать ее таким же образом.