[英]Kubernetes pod fails with "Unable to attach or mount volumes"
在 Kubernetes 从 1.18.13 升级到 1.19.5 后,我随机收到一些 pod 的错误如下。 一段时间后 pod 无法启动(这是一个简单的 pod,不属于部署)
Warning FailedMount 99s kubelet Unable to attach or mount volumes: unmounted volumes=[red-tmp data logs docker src red-conf], unattached volumes=[red-tmp data logs docker src red-conf]: timed out waiting for the condition
我们有非常标准的设置,没有任何特殊的自定义:
pod 定义示例:
apiVersion: v1
kind: Pod
metadata:
labels:
app: provision
ver: latest
name: provision
namespace: red
spec:
containers:
- args:
- wait
command:
- provision.sh
image: app-tests
imagePullPolicy: IfNotPresent
name: provision
volumeMounts:
- mountPath: /opt/app/be
name: src
- mountPath: /opt/app/be/conf
name: red-conf
- mountPath: /opt/app/be/tmp
name: red-tmp
- mountPath: /var/lib/app
name: data
- mountPath: /var/log/app
name: logs
- mountPath: /var/run/docker.sock
name: docker
dnsConfig:
options:
- name: ndots
value: "2"
dnsPolicy: ClusterFirst
enableServiceLinks: false
restartPolicy: Never
volumes:
- hostPath:
path: /opt/agent/projects/app-backend
type: Directory
name: src
- name: red-conf
persistentVolumeClaim:
claimName: conf
- name: red-tmp
persistentVolumeClaim:
claimName: tmp
- name: data
persistentVolumeClaim:
claimName: data
- name: logs
persistentVolumeClaim:
claimName: logs
- hostPath:
path: /var/run/docker.sock
type: Socket
name: docker
光伏
apiVersion: v1
kind: PersistentVolume
metadata:
name: red-conf
labels:
namespace: red
spec:
accessModes:
- ReadWriteMany
capacity:
storage: 2Gi
hostPath:
path: /var/lib/docker/k8s/red-conf
persistentVolumeReclaimPolicy: Retain
storageClassName: red-conf
volumeMode: Filesystem
PVC
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: conf
namespace: red
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 2Gi
storageClassName: red-conf
volumeMode: Filesystem
volumeName: red-conf
tmp data logs
pv 具有与路径旁边的conf
相同的设置。 他们有单独的文件夹:
/var/lib/docker/k8s/red-tmp
/var/lib/docker/k8s/red-data
/var/lib/docker/k8s/red-logs
目前我没有任何线索如何诊断问题:(
很高兴得到建议。 提前致谢。
您必须使用本地卷。 按照以下链接了解如何在使用本地卷时创建存储类、pv 和 pvc。
https://kubernetes.io/blog/2019/04/04/kubernetes-1.14-local-persistent-volumes-ga/
我建议您通过查看VolumeAttachment事件与哪个节点绑定了 PV 来开始故障排除,也许您的卷仍然链接到处于驱逐状态并被新节点替换的节点。
您可以使用此命令检查您的 PV 名称和状态:
kubectl get pv
然后,要查看哪个节点具有正确的卷附件,可以使用以下命令:
kubectl get volumeattachment
一旦你获得了你的 PV 的名称以及它连接到哪个节点,那么你将能够查看 PV 是否绑定到正确的节点,或者它是否绑定到先前不工作或已删除的节点。 该节点被驱逐并从池中调度到一个新的可用节点; 要知道哪些节点已准备好并正在运行,您可以使用以下命令:
kubectl get nodes
如果您检测到您的 PV 与不再存在的节点绑定,则需要使用以下命令删除 VolumeAttachment:
kubectl delete volumeattachment [csi-volumeattachment_name]
如果您需要查看有关此故障排除的详细指南,可以点击此链接。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.