我们知道Docker的数据是通过联合文件系统的方式存储到磁盘上,当需要在机器上运行的容器或者镜像的数量不断增加时,有可能磁盘的大小不再满足需求,这个时候就需要给Docker的数据目录通过增加数据盘的方式进行扩容。
Docker 数据目录
Docker默认的容器和镜像数据存储的目录是在/var/lib/docker下面,可以通过du命令查看这个目录目前占用的磁盘的大小,例如:
# du -h --max-depth=0 /var/lib/docker
7.9G /var/lib/docker
更换Docker的数据盘
因为很多Docker的镜像本身就挺大的,所以可能用不了几个镜像就会有很可观的一个磁盘占用,很容器就会导致磁盘空间不足,这个时候如何更换数据盘以满足再增加镜像或容器的需求,那就给Docker的数据目录增加块数据盘吧。
购买ECS数据盘,并挂载到需要扩容的机器上:
1. 通过ECS控制台购买需要的配置的云盘
2. 在ECS实例详情页->本实例磁盘->挂载磁盘中,选择刚才购买的磁盘,并记录挂载点/dev/xvd*
或者/dev/vd*
登录到机器上,对刚才挂载的磁盘进行格式化:
1. 首先在机器上执行ls -l /dev/xvd*
或者ls -l /dev/vd*
看到和刚才记录的一致的磁盘id
2. 通过fdisk命令对磁盘进行分区,然后使用mkfs.ext4格式化磁盘,例如:
移动Docker的数据到新的磁盘:
0. 如果节点上有正在运行的应用不希望中断,需要首先对应用做迁移
swarm集群:https://help.aliyun.com/document_detail/48933.html
kubernetes集群: https://kubernetes.io/docs/tasks/administer-cluster/safely-drain-node/
1. 首先先停止Docker daemon和kubelet(kubernetes集群),保证移动的时候数据完整,可以使用service kubelet stop
(kubernetes集群)和service docker stop
命令停止
2. 先移动Docker的目录到一个备份的目录,例如:mv /var/lib/docker /var/lib/docker_data
3. 然后把新的格式化好的磁盘挂载到/var/lib/docker
和/var/lib/kubelet
目录,例如:
echo "/dev/xvdb1 /var/lib/container/ ext4 defaults 0 0" >>/etc/fstab
echo "/var/lib/container/kubelet /var/lib/kubelet none defaults,bind 0 0" >>/etc/fstab
echo "/var/lib/container/docker /var/lib/docker none defaults,bind 0 0" >>/etc/fstab
mkdir /var/lib/docker
mount -a
4. 把之前备份的docker数据移动到新的磁盘上,例如:mv /var/lib/docker_data/* /var/lib/docker/
启动Docker daemon和kubelet(kubernetes集群),并检查数据位置:
1. 启动kubelet(kubernetes集群)和Docker daemon,命令分别是service kubelet start
(kubernetes集群)和service docker start
2. 执行df
看到/var/lib/docker挂载到了新的磁盘上
(kubernetes集群不需要)3. docker ps
看到容器没有丢失,根据需要再启动需要启动的没有restart:always
标签的容器
4. 前面迁移走的容器可以同样适用调度的方式让他们回归到这个节点上面
想了解更多容器服务的内容,请点击https://www.aliyun.com/product/containerservice