Docker使用Devicemapper存储驱动异常处理
问题
集群的一个节点NotReady,kubelet报错PLEG,查看docker日志,可以看到如下的报错,停止docker服务,响应的容器进程还在进行,无法umount相关的设备。
原因
这个问题发生在使用 devicemapper 存储驱动时Docker试图重用之前使用 LVM thin pool。例如,尝试更改节点上的 Docker 的数据目录时会发生此问题。由于安全措施旨在防止 Docker 因配置问题而意外使用和覆盖 LVM thin pool 中的数据,因此会发生此错误。
解决
- 停止docker服务
1
systemctl stop docker
- 备份Docker目录
1
mv /var/lib/docker{,.bak}
- 删除已经创建的thinpool逻辑卷
1
lvremove docker/thinpool
- 创建新的逻辑卷根据实际磁盘大小设置
1
lvcreater -L 100g --thin docker/thinpool
- 编辑/etc/docker/daemon.json配置文件,添加
dm.directlvm_device_force=true
参数1
2
3
4
5
6{
"storage-driver": "devicemapper",
"storage-opts": [
"dm.directlvm_device_force=true" ## 添加此参数
]
} - 最后启动docker服务即可
1
systemctl start docker