ポッドにバインドされていないPersistentVolumeClaimsがあります


84

何らかの理由でデプロイメントをプッシュすると、ポッドでエラーが発生します。

ポッドにバインドされていない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

storageClassKubernetesを使用すると、ローカルファイルシステムで機能しない「動的ボリュームプロビジョニング」が有効になります。


問題を解決するには:

  • クレームの制約を満たすPersistentVolumeを提供します(サイズ> = 100Mi)
  • PersistentVolumeClaimstorageClassから-lineを削除します
  • クラスターからStorageClassを削除します

これらの作品はどのように連携しますか?

デプロイメント状態の説明の作成時に、通常、アプリケーションに必要なストレージの種類(量、速度など)がわかります。
デプロイメントを多用途にするには、ストレージへの強い依存を避けたいと思います。Kubernetesボリューム抽象化により、標準化された方法でストレージを提供および消費できます。

PersistentVolumeClaimは、アプリケーションの配備と一緒に記憶制約を提供するために使用されます。

PersistentVolumeは(」消費する準備ができて、クラスタ全体のボリュームのインスタンスを提供していますbound「)。1つのPersistentVolumeが1つのクレームにバインドされます。ただし、そのクレームの複数のインスタンスが複数のノードで実行される可能性があるため、そのボリュームには複数のノードがアクセスする可能性があります

A STORAGECLASSなしPersistentVolumeがあると考えられている静的

「動的ボリューム・プロビジョニング」と並んSTORAGECLASSは、オンデマンドで提供PersistentVolumesにクラスタすることができます。これを機能させるには、特定のストレージプロバイダーがプロビジョニングをサポートする必要があります。これにより、クラスターは、満たされていないPersistentVolumeClaimがポップアップしたときに、「新しい」 PersistentVolumeのプロビジョニングを要求できます。


PersistentVolumeの例

指定する方法を見つけるために、KubernetesバージョンのAPIを確認することをお勧めします。そのため、次の例はK8S1.17のAPIリファレンスから作成されています

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はどのように定義する必要がありますか?
ビクターズアナッツィ

1
@VictorZuanazzi良い質問-ドキュメントが少し変更されたようです。例を追加しました。APIを掘り下げることは、最初はかなり難しいです。Fortunatleyには、APIドキュメントからガイドへの相互参照やその逆の相互参照がよくあります。これがあなたが続けるのに役立つことを願っています。
フロリアンノイマン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.