pod ma niezwiązane PersistentVolumeClaims

88

Kiedy z jakiegoś powodu wypycham moje wdrożenia, otrzymuję błąd na moich podach:

pod ma niezwiązane PersistentVolumeClaims

Oto mój YAML poniżej:

To działa lokalnie, a nie w żadnym rozwiązaniu chmurowym.

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  annotations:
    kompose.cmd: kompose convert
    kompose.version: 1.16.0 ()
  creationTimestamp: null
  labels:
    io.kompose.service: ckan
  name: ckan
spec:
  replicas: 1
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        io.kompose.service: ckan
    spec:
      containers:
        image: slckan/docker_ckan
        name: ckan
        ports:
        - containerPort: 5000
        resources: {}
        volumeMounts:
            - name: ckan-home
              mountPath: /usr/lib/ckan/
              subPath: ckan
      volumes:
      - name: ckan-home
        persistentVolumeClaim:
          claimName: ckan-pv-home-claim
      restartPolicy: Always
status: {}

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: ckan-pv-home-claim
  labels:
    io.kompose.service: ckan
spec:
  storageClassName: ckan-home-sc
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 100Mi
  volumeMode: Filesystem
---
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: ckan-home-sc
provisioner: kubernetes.io/no-provisioner
mountOptions:
  - dir_mode=0755
  - file_mode=0755
  - uid=1000
  - gid=1000
soniccool
źródło

Odpowiedzi:

90

Musisz zdefiniować PersistentVolume zapewniającą miejsce na dysku do wykorzystania przez PersistentVolumeClaim .

Podczas korzystania z storageClassKubernetes ma zamiar włączyć „Dynamic Volume Provisioning”, który nie działa z lokalnym systemem plików.


Aby rozwiązać problem:

  • Podaj PersistentVolume spełniający ograniczenia roszczenia (rozmiar> = 100Mi)
  • Usuń storageClass-line z PersistentVolumeClaim
  • Usuń StorageClass z klastra

Jak te elementy grają razem?

Podczas tworzenia opisu stanu wdrożenia zwykle wiadomo, jakiego rodzaju (ilości, szybkości, ...) pamięci będzie potrzebować ta aplikacja.
Aby wdrożenie było uniwersalne, chcesz uniknąć uzależnienia od pamięci masowej. Abstrakcja woluminów Kubernetes umożliwia udostępnianie i używanie pamięci masowej w ustandaryzowany sposób.

PersistentVolumeClaim służy do zapewnienia przechowywania-ograniczenie obok wdrażania aplikacji.

W PersistentVolume oferuje szeroki klaster objętość instancje gotowe do spożycia (” bound„). Jeden PersistentVolume będzie powiązany z jednym roszczeniem. Ale ponieważ wiele wystąpień tego roszczenia może być uruchomionych na wielu węzłach, do tego wolumenu może mieć dostęp wiele węzłów.

PersistentVolume bez magazynowania jest uważane za statyczne .

„Dynamic Volume Provisioning” wraz z pomocą magazynowania umożliwia klastra PersistentVolumes przepis dotyczący popytu. W celu zapewnienia, że praca, dany dostawca musi obsługiwać przechowywania rezerw - pozwala to klaster do zażądania provisioning „nowego” PersistentVolume gdy niezadowolony PersistentVolumeClaim wyskakuje.


Przykład PersistentVolume

Aby dowiedzieć się, jak określić rzeczy, najlepiej przyjrzyj się API dla swojej wersji Kubernetes , więc poniższy przykład jest zbudowany na podstawie dokumentacji API K8S 1.17 :

apiVersion: v1
kind: PersistentVolume
metadata:
  name: ckan-pv-home
  labels:
    type: local
spec:
  capacity:
    storage: 100Mi
  hostPath:
    path: "/mnt/data/ckan"

PersistentVolumeSpec pozwala nam zdefiniować wiele atrybutów. Wybrałem hostPathwolumin, który mapuje katalog lokalny jako zawartość woluminu. Pojemność pozwala osobie planującej zasoby rozpoznać tę wielkość jako odpowiednią pod względem zapotrzebowania na zasoby.


Dodatkowe zasoby:

Florian Neumann
źródło
3
Nie możesz usunąć StorageClass, wystarczy tylko zamienić wartość nazwy klasy pamięci na pusty ciąg, na przykład StorageClass: ""
mrvol
Jak należy zdefiniować PersistentVolume?
Victor Zuanazzi
1
@VictorZuanazzi dobre pytanie - wydaje się, że dokumentacja nieco się zmieniła, dodałem przykład. Na początku zagłębianie się w API jest dość trudne. Fortunatley często istnieją odsyłacze z dokumentacji API do przewodników i na odwrót. Mam nadzieję, że to pomoże ci kontynuować.
Florian Neumann