我正在尝试创建和安装卷,但是卡住了。
这部分创建存储:
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:找不到: “配置”
感谢您的帮助。
更新:
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
答案 0 :(得分:2)
好像您有一个缩进,它找到的是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 :(得分:1)
让我们调试:
1)您的PersistentVolumeClaim的名称为pvclaim2
,一切正常。
2)VolumeMounts
部分看起来不错。 config
处于只读模式,它对于配置是正确的。
3)volumes
部分描述了config
卷的类型为persistentVolumeClaim
,它链接到PVC pvclaim2
-好的!
4)接下来,我们可以看到config
卷的类型是configMap
和PersistentVolumeClaim
同时...这将是导致错误的原因。未来。假设您想使用config
卷作为配置文件traefik.toml
的挂载,则不需要PVC(尤其是在只读模式下为5 GB)
您需要做的就是创建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
答案 2 :(得分:1)
我要在这里进行一个疯狂的猜测,您的traefik入口控制器是否在与pvc相同的名称空间中运行? Pvc是命名空间范围的,在您的示例中,它是在默认命名空间中。通常,我们会将入口部署到它自己的名称空间(例如“入口”和其他关联的Pod)中。
答案 3 :(得分:0)
这是因为没有PersistentVolume(PV)绑定到该PersistentVolumeClaim(PVC)。这可能是由于多种原因。
一件事是您尚未为索赔创建PV。 PVC需要具有PV才能声明。如果是这样,首先需要创建一个由Kubernets支持的任何类型的多个types的Persistance卷。可以在here中找到使用nfs的PV的示例。
第二个原因可能是任何现有的和未绑定的PV的任何参数都与PVC不匹配。因此,请检查PV和PVC的存储容量,访问方式,存储类别和标签是否匹配。例如,如果您想要storageClassName: managed-premium
的PVC,请确保您的PV也具有存储类类型。
最后一件事可能是您认为存在的PV,并将所有参数与绑定到其他PVC的PVC匹配。 PV是一种原子抽象,不能将一个PV用于多个PVC。
您可以使用kubectl get pv
检查是否有具有STATUS可用且符合PVC要求的卷。