1. ホーム
  2. kubernetes

[解決済み] ポッドにバインドされていないPersistentVolumeClaimsがある

2022-01-21 19:34:05

質問

デプロイメントをプッシュすると、なぜかポッドにエラーが発生します。

pod has unbound 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

解決方法は?

を定義する必要があります。 永続的なボリューム によって消費されるディスク領域を提供します。 持続的ボリューム要求 .

を使用する場合 storageClass Kubernetesが有効にするのは Dynamic Volume Provisioning" ローカルファイルシステムで動作していない


あなたの問題を解決するために。

  • を提供する。 PersistentVolume 請求項の制約を満たすこと(サイズ >= 100Mi)
  • を削除します。 storageClass から PersistentVolumeClaim を指定するか、空の値を指定します ( "" )
  • を削除します。 StorageClass をクラスタから削除します。

これらの部品はどのように組み合わされるのですか?

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

その 永続的なボリュームクレイム は、アプリケーションのデプロイメントと同時にストレージの制約を提供するために使用されます。

その 永続的なボリューム は、すぐに消費できるクラスタ全体のボリュームインスタンスを提供します(" bound となります。) 1つのPersistentVolumeは、以下のようにバインドされます。 クレームがあります。しかし、そのクレームの複数のインスタンスが複数のノードで実行される可能性があるため、そのボリュームは アクセス を複数のノードで使用することができます。

A StorageClassを使用しないPersistentVolume は、次のように見なされます。 静的 .

Dynamic Volume Provisioning"。 並べて a StorageClass を使用すると、クラスタがオンデマンドでPersistentVolumeをプロビジョニングできるようになります。 この機能を実現するためには、指定されたストレージ・プロバイダが プロビジョニング - これにより、クラスタが "new".のプロビジョニングを要求することができるようになります。 永続的なボリューム を満たさない場合 PersistentVolumeClaim が飛び出す。


PersistentVolumeの例

どのように指定すればよいかは Kubernetesのバージョンに対応したAPI ということで、以下の例は K8S 1.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 ボリュームのコンテンツとしてローカルディレクトリをマップします。この容量によって、リソーススケジューラーは、リソースの必要性という観点から、このボリュームが適用可能であると認識することができます。


追加リソース