포드에 바인딩되지 않은 PersistentVolumeClaims가 있습니다.


84

어떤 이유로 배포를 푸시 할 때 팟 (Pod)에 오류가 발생합니다.

포드에 바인딩되지 않은 PersistentVolumeClaims가 있습니다.

다음은 내 YAML입니다.

이것은 클라우드 솔루션이 아닌 로컬에서 실행됩니다.

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

답변:


86

당신은 정의해야 PersistentVolume 에 의해 소비되는 제공하는 디스크 공간 PersistentVolumeClaim을 .

사용하는 경우 storageClass는 Kubernetes 활성화 것입니다 "동적 볼륨 프로비저닝" 로컬 파일 시스템과 함께 작동하지 않습니다.


문제를 해결하려면 :

  • 클레임의 제약 조건을 충족 하는 PersistentVolume 을 제공합니다 (크기> = 100Mi).
  • PersistentVolumeClaim 에서 storageClass-line을 제거하십시오.
  • 클러스터 에서 StorageClass 제거

이 조각들은 어떻게 함께 작동합니까?

배포 상태 설명을 만들 때 일반적으로 애플리케이션에 필요한 스토리지 종류 (양, 속도 등)가 알려져 있습니다.
배포를 다용도로 만들려면 스토리지에 대한 과도한 의존을 피해야합니다. Kubernetes 볼륨 추상화를 사용하면 표준화 된 방식으로 스토리지를 제공하고 사용할 수 있습니다.

PersistentVolumeClaim은 애플리케이션의 전개와 함께 기억 성 제약을 제공하는 데 사용된다.

PersistentVolume의 제안은 클러스터 전체 ( "소비 될 볼륨 인스턴스 준비 bound"). 하나의 PersistentVolume이 하나의 클레임에 바인딩됩니다 . 그러나 해당 클레임의 여러 인스턴스가 여러 노드에서 실행될 수 있으므로 해당 볼륨은 여러 노드에서 액세스 할 수 있습니다 .

StorageClass없이 PersistentVolume는 것으로 간주됩니다 정적 .

"동적 볼륨 프로비저닝" 함께StorageClass는 필요에 따라 제공 PersistentVolumes에 클러스터를 할 수 있습니다. 이 작업을 수행하려면 지정된 스토리지 제공 업체가 프로비저닝을 지원해야합니다.이를 통해충족되지 않은 PersistentVolumeClaim이 팝업될 때클러스터가 "새" PersistentVolume 의 프로비저닝을 요청할수 있습니다.


PersistentVolume 예

항목을 지정하는 방법을 찾으 려면 Kubernetes 버전 용 API를 살펴 보는 것이 가장 좋습니다 . 따라서 다음 예제는 K8S 1.17API 참조 에서 빌드되었습니다 .

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

PersistentVolumeSpec은 우리가 여러 속성을 정의 할 수 있습니다. hostPath볼륨의 내용으로 로컬 디렉토리를 매핑 하는 볼륨을 선택했습니다 . 용량을 통해 리소스 스케줄러는이 볼륨을 리소스 요구 측면에서 적용 가능한 것으로 인식 할 수 있습니다.


추가 자료 :


3
StorageClass를 제거 할 수 없습니다. StorageClass : ""와 같이 스토리지 클래스 이름 값을 빈 문자열로 바꾸면 충분합니다.
mrvol

PersistentVolume은 어떻게 정의해야합니까?
Victor Zuanazzi

1
@VictorZuanazzi 좋은 질문-문서가 약간 변경된 것 같습니다. 예제를 추가했습니다. API를 파헤치는 것은 처음에는 꽤 어렵습니다. Fortunatley에는 API 문서에서 가이드에 대한 상호 참조가 있으며 그 반대의 경우도 마찬가지입니다. 나는 이것이 당신이 계속하는 데 도움이되기를 바랍니다.
Florian Neumann
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.