数据卷挂载问题快速恢复
Pod挂载、卸载数据卷出现问题的原因很多,有存储卷设计的缺陷、有相关组件实现的bug、有使用方式不当的可能,面对复杂的应用、存储交互系统,我们需要从两个方面对待数据卷问题:
尽量别出问题:减少存储组件的自身稳定性 && 规范的使用方式。
如何面对问题:首要是快速恢复业务,然后分析问题。
本文阐述的是业务快速恢复方案:当Pod因为数据卷挂载重启失败时,暂不去解决节点挂载的问题,而是让pod先在其他节点启动成功,快速恢复业务,待业务恢复后再去分析出问题的节点。
更新一个Pod,卡在了 ContainerCreating 状态:
例如:你在Deployment类型应用中挂载NAS数据卷,Pod在启动的时候报错为挂载失败:
Warning FailedMount 18s kubelet, cn-shenzhen.192.168.1.24 Unable to mount volumes for pod "nas-static-796b49b5f8-svbvh_default(2d483078-1400-11ea-a9b7-00163e084110)": timeout expired waiting for volumes to attach or mount for pod "default"/"nas-static-796b49b5f8-svbvh". list of unmounted volumes=[pvc-nas]. list of unattached volumes=[pvc-nas default-token-9v9hl]
更新前数据卷使用是正常的,而更新后pod启动不了,并有上述信息显示数据卷挂载不上,有一个可能性为:当前pod所在节点对此pv/pvc出现状态异常。具体异常原因暂不深究。
通过把pod调度到其他节点快速启动pod,参考如下步骤:
1. 确定pod所在节点:
根据上述错误信息即可拿到节点为:cn-shenzhen.192.168.1.24 也可以通过下面步骤拿到: # podname="nas-static-796b49b5f8-svbvh" # namespace="default" # kubectl describe pod $podname -n $namespace | grep Node: | awk '{print $2}' cn-shenzhen.192.168.1.24/192.168.1.24
2. 设置节点不可调度:
您可以使用控制台来配置节点调度状态,参考
也可以使用下面命令行执行给当前挂载有问题的节点打上污点标签,确保pod不会再往这个节点调度:
# kubectl taint nodes cn-shenzhen.192.168.1.24 key=value:NoSchedule node/cn-shenzhen.192.168.1.24 tainted
3. 重启问题Pod:
这时重启问题Pod,新建的Pod就不会调度到刚才有问题的节点了:
删除问题Pod: # kubectl delete pod nas-static-796b49b5f8-svbvh pod "nas-static-796b49b5f8-svbvh" deleted 新的pod启动成功,且调度到新节点: # kubectl get pod NAME READY STATUS RESTARTS AGE nas-static-857b99fcc9-vvzkx 1/1 Running 0 14s # kubectl describe pod nas-static-857b99fcc9-vvzkx | grep Node Node: cn-shenzhen.192.168.1.25/192.168.1.25
4. 后续处理:
上述步骤目的是保证您您的业务快速恢复,但问题节点的问题还存在,您可以通过[存储常见问题]()进行排查分析。
如果您无法解决节点问题,可以联系阿里云容器服务技术支持。节点问题解决后,您可以通过控制台或者命令行将问题节点配置为可调度状态;
# kubectl taint nodes cn-shenzhen.192.168.1.24 key:NoSchedule- node/cn-shenzhen.192.168.1.24 untainted
更新一个pod,卡在 Terminating 状态:
例如:你使用statefulset创建应用,并挂载了云盘数据卷;当更新应用的时候,pod一直处于Terminating状态从而导致新的pod无法正常启动。
# kubectl delete pod web-0 # kubectl get pod NAME READY STATUS RESTARTS AGE web-0 0/1 Terminating 0 47m
到pod所在节点查看下面日志文件:
# tailf /var/log/alicloud/flexvolume_disk.log # tailf /var/log/messages | grep kubelet
如果发现报错原因为数据卷Umount/Detach等失败,例如:
unmount command failed, status: Failure, reason: device is busy 字样 或 target is busy 字样 或 Orphan Pod字样 等等
如果在没有找到如何解决问题时急于恢复业务,可以先将问题pod强制删除,优先恢复业务。
1. 使用强制删除命令结束当前pod:
# kubectl delete pod web-0 --force=true --grace-period=0 pod "web-0" force deleted
此命令会强制删除Etcd数据库中的pod信息,从而为创建新pod提供可能(StatefulSet中,老pod没有删除前新pod不会重建)。
2. 如果新建pod启动的时候失败,卡在 ContainerCreating:
可以参考 “更新一个Pod,卡在了 ContainerCreating 状态” 做法,为node配置不可调度,快速恢复pod运行。
3. 登陆问题节点,分析原因:
登陆问题所在节点,通过[存储常见问题]()进行排查分析。无法解决时可能联系阿里云容器服务技术支持。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
第二口docker的感觉 —— Dockerfile
前言 首先我们来思考这样一个问题:如果将改变了一些配置的Container在生成一个镜像? 正文 就前言的问题,我做一下解答:通过docker commit命令,这个命令的目的是将我们的最新修改作为镜像的一层进行构建,命令详情参考: https://docs.docker.com/engine/reference/commandline/commit/ ❌但是这种方式方式我们并不提倡,因为这种构建方式相当于一个黑盒的构建,别人也不知道你具体做了那些操作,这个时候就需要引出我们的"构建好助手"——DockerFile dockerfile是把你所有想要需要的地方都表现在了纸面上,这样我们可以明确知道所有的修改内容。 dockerfile的具体写法我们在后面进行详细的讨论。 但是在这里我们要明确一个问题,Dockerfile其实并不是向镜像里直接写入的,因为镜像是只读的。docker在这个时候创建了一个临时的容器,然后写入内容之后,再把临时容器删除。 DockerFile使用说明 我们创建自己需要的镜像的时候,可以通过commit和dockerfile的形式进行构建,但是前面也说了,官方推...
- 下一篇
大数据安全系统
产品简介中安威士大数据安全平台(VS-BDSG)专注于为大数据环境的数据资产提供一系列的审计、访问控制、加密、脱敏等保护措施及管控,对数据的收集、加工、存储、应用等全生命周期的每个环节进行自动监测和实时处理。提供数据在事前、事中、事后的安全应对方案和处理机制,形成事前能预测,事中有方法,事后可追踪的安全闭环。 产品功能 大数据安全审计 本系统支持大数据HDFS、HIVE、HBASE等组件的数据安全单向、双向审计功能,提供可视化、向导式、多层次的策略配置管理。丰富和灵活的规则体系,能够适应不同场景需求。允许用户量身定制审计维度和范围。细粒度的审计和智能的风险告警,更精准的剖析了企业数据资产的微观运动,任何风险异常一目了然。 大数据访问控制(防火墙) 以白名单、黑名单、灰名单为主单元,逻辑视图清晰,配置灵活简单。可基于角色、组、用户等不同层级进行授权管理,自动同步数据环境中已经存在的权限信息并实现转换兼容。可以精细化控制到HDFS的路径权限,HBASE的表、列簇、列权限以及实现HIVE的数据库、表、列权限等的控制。 大数据加密 性能优异,可支持PB级的数据批量加密和解密,能极大满足上游应用...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS7设置SWAP分区,小内存服务器的救世主
- Docker快速安装Oracle11G,搭建oracle11g学习环境