web-dev-qa-db-ja.com

Kubernetes永続ボリュームマウントが見つかりません

ボリュームを作成してマウントしようとしていますが、行き詰まっています。

この部分はストレージを作成します:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvclaim2
spec:
  accessModes:
  - ReadWriteOnce
  storageClassName: managed-premium
  resources:
    requests:
      storage: 5Gi

以下は、私の展開セクションの続きです。

volumeMounts:
- name: config
  mountPath: /config
  readOnly: true
args:
- --configfile=/config/traefik.toml


volumes:
  - name: config
    persistentVolumeClaim:
      claimName: pvclaim2
    configMap:
    name: traefik-config

次のエラーメッセージが表示され続けます。

デプロイメント「traefik-ingress-controller」は無効です:spec.template.spec.containers [0] .volumeMounts [0] .name:見つかりません:「config」

どんな助けでもありがたいです。

更新:

Output from describe pv:

Conditions:
  Type           Status
  PodScheduled   False
Volumes:
  certs:
    Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
    ClaimName:  pvclaim101
    ReadOnly:   false
  config:
    Type:      ConfigMap (a volume populated by a ConfigMap)
    Name:      traefik-conf
    Optional:  false
  traefik-ingress-controller-token-6npxp:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  traefik-ingress-controller-token-6npxp
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s
Events:
  Type     Reason            Age               From               Message
  ----     ------            ----              ----               -------
  Warning  FailedScheduling  1m (x25 over 2m)  default-scheduler  persistentvolumeclaim "pvclaim101" not found
5
Rutnet

インデントがあるように見えますが、VolumeMountは見つかりましたが、Volumeは見つかりません。このようなものはうまくいくはずです:

containers:
- image: your-image
  name: your-containers
  volumeMounts:
  - name: config
    mountPath: /config
    readOnly: true
  args:
  - --configfile=/config/traefik.toml
volumes:
  - name: config
    persistentVolumeClaim:
      claimName: pvclaim2
    configMap:
    name: traefik-config
1
Rico

ここでワイルドな推測をしますが、traefikイングレスコントローラーは、pvcと同じ名前空間で実行されていますか? Pvcは名前空間スコープです。例では、デフォルトの名前空間にあります。通常、「ingress」やその他の関連ポッドのような独自の名前空間にイングレスをデプロイします。

1
Bal Chua

デバッグしましょう:

1)PersistentVolumeClaimの名前はpvclaim2で、すべて問題ありません

2)VolumeMountsセクションは問題ありません。 configは読み取り専用モードであり、configに適しています。

3)volumesセクションは、configボリュームのタイプがpersistentVolumeClaimであり、PVCにリンクしていることを説明していますpvclaim2-わかりました!

4)次に、configボリュームのタイプがconfigMapであると同時にPersistentVolumeClaimであることがわかります。これがエラーの原因になります。未来。 configボリュームをconfigfile traefik.tomlのマウントとして使用したい場合、PVCは必要ありません(特に読み取り専用モードでは5ギガバイト)。

必要なのはcreate configMapだけです。コマンド構文:

kubectl create configmap <map-name> <data-source>

あなたの場合、これは次のように行うことができます:

kubectl create configmap traefik-config --from-file=<your-local-path-to-file>/traefik.toml

次に、デプロイメントを更新する必要があります。

containers:
- image: your-image
  name: your-containers
  volumeMounts:
  - name: config
    mountPath: /config
    readOnly: true # as far as i know configmaps are read-only since 1.9.5
  - name: some-persistent-storage-name
    mountPath: /<some-mount-point-for-storage>

...

volumes:
  - name: config
    configMap:
      name: traefik-config
  - name: some-persistent-storage-name
    persistentVolumeClaim:
      claimName: pvclaim2
1

これは、そのPersistentVolumeClaim(PVC)にバインドされるPersistentVolume(PV)がないためです。これにはいくつかの理由が考えられます。

1つは、申し立てのPVを作成していないことです。 PVCは、PVを要求する必要があります。その場合、最初に、kubernetsでサポートされている複数の types の任意のタイプの永続ボリュームを作成する必要があります。 nfsを使用したPVの例は here にあります。

2番目の理由は、既存のPVとバインドされていないPVのいずれのパラメーターもPVCと一致しないことです。そのため、PVとPVCのストレージ容量、アクセスモード、ストレージクラス、およびラベルが一致しているかどうかを確認します。例として、storageClassName: managed-premiumのPVCが必要な場合は、PVにもストレージクラスタイプがあることを確認してください。

そして、最後のものはあなたが存在すると思うPVであり、他のPVCにバインドされたPVCとすべてのパラメーターを一致させるかもしれません。 PVはアトミックな抽象概念であり、1つのPVを複数のPVCに使用することはできません。

kubectl get pvを使用して、ステータスがあり、PVC要件に一致するボリュームがあるかどうかを確認できます。