ボリュームを作成してマウントしようとしていますが、行き詰まっています。
この部分はストレージを作成します:
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
インデントがあるように見えますが、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
ここでワイルドな推測をしますが、traefikイングレスコントローラーは、pvcと同じ名前空間で実行されていますか? Pvcは名前空間スコープです。例では、デフォルトの名前空間にあります。通常、「ingress」やその他の関連ポッドのような独自の名前空間にイングレスをデプロイします。
デバッグしましょう:
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
これは、その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要件に一致するボリュームがあるかどうかを確認できます。