随着云原生概念的普及,越来越多的企业,已经将业务迁移到容器平台上,以充分利用容器、Kubernetes、服务网格来完成基础架构的转型升级。
然而,在业务上云过程中,不可避免的遇到使用上的问题。这里,我们以腾讯云容器服务TKE为例,分析一次PVC卷挂载异常的处理过程。
Kubernetes 官方层面,支持多种存储形式的挂载,常见的类型有:
腾讯云TKE,针对以上大部分类型,已有对应的支持。这里,我们来看一个PVC挂载使用报错的问题。
查看事件报错:kubectl get ev -n ***, 发现如下异常:
比较明显的,可以看出业务Pod 运行前,磁盘挂载操作失败。对应的磁盘,依然占用未被释放。
(1)查看Pod 挂载的 pvc:
kubectl describe pod *** -n *** |grep -3 -i persis
(2)查看PVC对应PV:
kubectl get pvc vol-****-c0woyfk2ycw0-22 -n ****
业务Pod PVC 绑定的volume 即:pvc-65273f8d-64f8-11ea-b2dc-525400e94be5
(3)查看PV对应的磁盘信息:
kubectl get pv pvc-65273f8d-64f8-11ea-b2dc-525400e94be5 -o yaml |grep -3 -i disk
(4)查看磁盘挂载的CVM信息:
在云服务器控制台,云硬盘模块,键入对应的磁盘ID,即可过滤出特定的磁盘信息。然后,点击进入,查询该磁盘所属的CVM实例信息。
(5)登陆CVM,排查异常,检查磁盘是否依然被占用;
登陆CVM过程,此处忽略,首先查看磁盘对应信息:
查看磁盘设备信息
#ls /dev/disk/by-id
然后,使用lsof 命令排查对应磁盘是否被进程占用:
#以 vdb 磁盘为例
#lsof /dev/vdb
如果是,kill 释放;反之,尝试手动umount在CVM内部卸载,随后在CVM控制台卸载对应磁盘。
参考相关资料,磁盘挂载的过程,有遵循以下流程,即:
Provision -> Attach -> Mount; Unmount -> Detach -> Delete
所以,参考磁盘挂载流程及上述场景分析,在特定CVM上排查处理即可:
(1)lsof 排查未未释放进程,手动kill
(2)将已经mount 的磁盘,进行unmount , 然后在CVM 控制台上卸载对应磁盘。
至此:挂盘问题修复-》新Pod挂载PVC成功-》业务Pod运行起来。
https://kubernetes.io/docs/concepts/storage/volumes
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。