K8s Node Docker devicemapper 设备初始化方法

步骤

  1. drain 掉节点上所有的 pod
1
kubectl drain <node-name> --ignore-daemonsets --delete-local-data --force
  1. 停止 kubelet
1
systemctl stop kubelet
  1. 停止所有容器
1
2
docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)
  1. 停止 docker daemon
1
systemctl stop docker
  1. 创建 lvm
1
2
3
4
5
pvcreate -y /dev/sdX1
vgcreate docker /dev/sdX1
lvcreate --wipesignatures y -n thinpool docker -l 95%VG
lvcreate --wipesignatures y -n thinpoolmeta docker -l 1%VG
lvconvert -y --zero n -c 512k --thinpool docker/thinpool --poolmetadata docker/thinpoolmeta

vim /etc/lvm/profile/docker-thinpool.profile

配置见附录

1
2
lvchange --metadataprofile docker-thinpool docker/thinpool
lvs -o+seg_monitor

vim /etc/docker/daemon.json

配置见附录

  1. 删除旧的 docker 相关文件
1
rm -rf /var/lib/docker/*
  1. 启动 docker
1
systemctl start docker
  1. 查看是否成功转换
1
docker info
  1. 启动 kubelet
1
systemctl start kubelet
  1. uncordon 节点
1
kubectl uncordon <node-name>

附录

/etc/lvm/profile/docker-thinpool.profile

1
2
3
4
activation {
thin_pool_autoextend_threshold=80
thin_pool_autoextend_percent=20
}

/etc/docker/daemon.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
"log-level": "debug",
"live-restore": true,
"icc": false,
"storage-driver": "devicemapper",
"storage-opts": [
"dm.thinpooldev=/dev/mapper/docker-thinpool",
"dm.use_deferred_removal=true",
"dm.use_deferred_deletion=true",
"dm.basesize=20G"
],
"log-driver": "json-file",
"log-opts": {
"max-size": "512m",
"max-file": "3"
}
}

参考

Use the Device Mapper storage driver

K8s Node Docker devicemapper 设备初始化方法

http://whypro.github.io/hexo-blog/2018/12/31/0e564643001a/

Author

whypro

Posted on

2019-01-01

Updated on

2022-11-11

Licensed under

Comments

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×