系列文章目录

第一部分 基于devicemapper 文件存储驱动的docker根卷扩容
第二部分 基于overlay2 文件存储驱动的docker卷管理

文章目录

  • 系列文章目录
  • 前言
  • 一、背景信息
  • 二、扩容的方法
    • 1.定位块设备布局
    • 2.扩容loop块设备
    • 3.扩容块设备pool池
    • 4.扩容容器块设备
    • 5.扩容容器的文件系统
  • 总结

前言

使用过docker容器的同学,通常都会发现一个现象,就是随着docker不断运行docker 的存储目录(通常是/var/lib/docker)的磁盘占用会变得越来越大,然后慢慢的将宿主机的磁盘空间耗尽,引起整个宿主机层面的异常。为了避免这类问题发生,有没有一种方法可以管理每一个docker容器根卷的大小呢?


一、背景信息

某一天突然收到一条主机10.216.196.66的磁盘挂载点容量告警,使用率96%。显示是一个docker容器的根卷磁盘满了,那么问题来了,如何对这个容器的根卷进行扩容呢?

二、扩容的方法

1.定位块设备布局


执行命令lsblk
会发现有两个loop设备共同组成了一个 100G的pool,这个pool池上再创建了10个块设备,是不是和lvm 的卷组和逻辑卷很相似。
pool池只有100G,全部已经分给其上的块设备了,所有很明确接下来的扩容思路。
先扩容loop块设备—>再扩容块设备pool池—>然后扩容容器块设备—>最后扩容容器文件系统

2.扩容loop块设备

执行 docker info,可以发现docker使用的2个loop 块设备文件的位置

查看两个块设备文件的大小,1个100G,1个2G,同时根据名称我们可以猜出一个设备文件是用来存放数据,另一个用来存放元数据。

所以我们先扩容这个存放数据的块设备文件大小
truncate -s 200G /app/docker/devicemapper/devicemapper/data

然后扩容对应的块设备loop0
losetup -c /dev/loop0

truncate 和losetup命令,平时使用的比较少,同学们需要了解一下。

3.扩容块设备pool池

扩容了loop块设备后容量后,pool池的大小是不会自动变大的。

执行下列命令扩容pool池,dmsetup 命令需要了解一下

[root@1a02vla4790zzzz xrdp]# dmsetup table docker-253:2-2418382912-pool
0 209715200 thin-pool 7:1 7:0 128 32768 1 skip_block_zeroing
[root@1a02vla4790zzzz xrdp]# dmsetup suspend docker-253:2-2418382912-pool
[root@1a02vla4790zzzz xrdp]# dmsetup reload docker-253:2-2418382912-pool --table '0 419430400 thin-pool 7:1 7:0 128 32768 1 skip_block_zeroing'
[root@1a02vla4790zzzz xrdp]# dmsetup resume docker-253:2-2418382912-pool

4.扩容容器块设备

先查看当前的devicemapper的映射表,找到和容量告警对应的表项
docker-253:2-2418382912-7671efe7635d7b91aa1d4af6a36f57b75f30519d664c85f07234928c0b1de94d

[root@1a02vla4790zzzz xrdp]# dmsetup table
docker-253:2-2418382912-6d43b2c2155a3e2f1684f5f239b32b74d5f9ca22d9b063ddb92feb53aaa08fe7: 0 20971520 thin 253:3 230
docker-253:2-2418382912-ebb0a7301ee0358050e05ba956b0beef9a2e946ef57a19fee4cf85aef591aeb9: 0 20971520 thin 253:3 223
docker-253:2-2418382912-54b103f895e6d47c19d2d18fc0780b6ebb3abe3d199f6341b274ef775f53158f: 0 20971520 thin 253:3 232
docker-253:2-2418382912-pool: 0 419430400 thin-pool 7:1 7:0 128 32768 1 skip_block_zeroing
docker-253:2-2418382912-7671efe7635d7b91aa1d4af6a36f57b75f30519d664c85f07234928c0b1de94d: 0 20971520 thin 253:3 228
docker-253:2-2418382912-72466918e8fb09e847bff790eed2ef8136bad0b421dba6abf2c2d46b3b13fadd: 0 20971520 thin 253:3 218
docker-253:2-2418382912-c9182440df9a5d2f6c6790c0f27588f27d52536fd9f80cc66eb1f6e50642a796: 0 20971520 thin 253:3 234
docker-253:2-2418382912-5a18ed310c58b1b6a5bc452efdce5d455f2f08a7dc26bda5fd17568da36c0b92: 0 20971520 thin 253:3 225
docker-253:2-2418382912-04cddc85788d23636120f90d59adbc42a858191b202d4baf3b0b9134132ecaca: 0 20971520 thin 253:3 216
docker-253:2-2418382912-fd2a43ebd427b56bfc0c54e8fef92fba59b5a6f42ca4da45e9dd6c8eec01d549: 0 20971520 thin 253:3 233
docker-253:2-2418382912-d4da1f6c1b15ae55bb873030468fd7bea7e7eff71ff6d8e3844eaeb89e73c526: 0 20971520 thin 253:3 222
VGapp-LVapp: 0 104849408 linear 252:4 2048
VGapp-LVapp: 104849408 1048567808 linear 252:16 2048
VGapp-LVapp: 1153417216 840949760 linear 252:32 2048
VolGroup00-LVswap: 0 8126464 linear 252:2 2048
VolGroup00-LVroot: 0 104865792 linear 252:2 8128512
VolGroup00-LVroot: 104865792 53739520 linear 252:3 2048

扩容这个容器块设备的大小
echo 0 41943040 thin 253:3 228 | dmsetup load docker-253:2-2418382912-7671efe7635d7b91aa1d4af6a36f57b75f30519d664c85f07234928c0b1de94d
dmsetup resume docker-253:2-2418382912-7671efe7635d7b91aa1d4af6a36f57b75f30519d664c85f07234928c0b1de94d

5.扩容容器的文件系统

xfs_growfs /dev/mapper/docker-253:2-2418382912-7671efe7635d7b91aa1d4af6a36f57b75f30519d664c85f07234928c0b1de94d
ext4文件系统使用resize2fs 命令进行扩容
扩容之后使用df 查看就已经是新的大小了。


总结

Devicemapper 是 Linux 内核提供的框架,从 Linux 内核 2.6.9 版本开始引入,Devicemapper 与 AUFS 不同,AUFS 是一种文件系统,而Devicemapper 是一种映射块设备的技术框架。

Devicemapper 提供了一种将物理块设备映射到虚拟块设备的机制,目前 Linux 下比较流行的 LVM (Logical Volume Manager 是 Linux 下对磁盘分区进行管理的一种机制)和软件磁盘阵列(将多个较小的磁盘整合成为一个较大的磁盘设备用于扩大磁盘存储和提供数据可用性)都是基于 Devicemapper 机制实现的。

那么docker文件存储驱动,基于块设备和基于文件系统的两种实现方式,他们的区别或者说性能上谁优谁劣呢?

docker容器的存储管理相关推荐

  1. Swarm 如何存储数据?- 每天5分钟玩转 Docker 容器技术(103)

    service 的容器副本会 scale up/down,会 failover,会在不同的主机上创建和销毁,这就引出一个问题,如果 service 有要管理的数据,那么这些数据应该如何存放呢? 选项一 ...

  2. Docker容器技术 笔记

    Docker容器技术 Docker是一门平台级别的技术,涉及的范围很广,所以,在开始之前,请确保你完成:Java SpringBoot 篇(推荐完成SpringCloud篇再来)视频教程及之前全部路线 ...

  3. Docker容器平台选型调研

    [TOC] Docker容器平台选型调研 编排选型 Swarm Swarm可以从一个Dockerfile来构建镜像,但是构建的镜像只能在单一节点上运行,而不能够被分布到集群上的其他节点上.因此,应用被 ...

  4. Docker容器的备份与恢复,Docker镜像的备份与恢复

    1. 备份容器 首先,为了备份Docker中的容器,我们会想看看我们想要备份的容器列表.要达成该目的,我们需要在我们运行着Docker引擎,并已创建了容器的Linux机器中运行 docker ps 命 ...

  5. docker 容器访问宿主机的解决方式

    需求 基于本地docker的自研及使用需要,希望docker容器的服务能连接到宿主机提供的服务. 背景 网络上查阅了大量的资料,基本的解决办法是通过手动查阅IP的方式进行, 但docker宿主机的ip ...

  6. Spring cloud 微服务docker容器化最佳实践

    Spring cloud 是当下最炙手可热的微服务套件,我们将介绍如何整合Docker容器达到高效快捷的构建发布 采用了dockerfile-maven-plugin插件发布镜像到远程docker主机 ...

  7. 进入Docker容器命令

    进入Docker容器命令 docker执行命令: docker exec -it [容器ID或者容器名称] /bin/bash 如果出现下述问题: OCI runtime exec failed: e ...

  8. Docker 入门系列(3)- Docker 容器(创建、启动、终止、进入、删除、导入、导出容器、容器和镜像转化)

    Docker 容器 简单来说,容器是镜像的一个运行实例.所不同的是,镜像是静态的只读文件,而容器带有运行时需要的可写文件层. 如果认为虚拟机是模拟运行的一整套操作系统(包括内核.应用运行态环境和其他系 ...

  9. Docker学习(四)-----Docker容器常用命令

    七.Docker容器 容器是Docker核心概念 简单的说,容器是独立运行的一个或一组应用,以及它们的运行环境 对应的,虚拟机可以理解为模拟运行的一整套操作系统(提供了运行态环境和其他系统环境)和运行 ...

最新文章

  1. UIButton 的edgeInsets研究
  2. mysql按逗号拼接起来_MySQL ----- 计算字段(Trim,Concat,as)(九)
  3. VTK:命名颜色用法实战
  4. CentOS7中yum安装mysql_CentOS7中YUM 安装mysql
  5. 前端vue显示柱状图_Vue接入Echarts 显示柱状图饼图
  6. Android 扫描二维码demo
  7. 【一天一个C++小知识】016:c++11中的lambda表达式
  8. LeetCode使用简介(leetcode中国-力扣)
  9. 原生JS与其他JS 区别
  10. 非常好用的354款Procreate新型笔刷
  11. 在Markdown中绘制思维导图
  12. java dismiss_窗口泄漏甚至在dialog.dismiss()
  13. Java编程笔记7:内部类
  14. Redmi K20 Pro如何编译内核
  15. python 通达信公式函数_通达信zig函数的python实现
  16. ftp下载文件失败问题记录
  17. 通过实现25个数组方法来理解及高效使用数组方法(长文,建议收藏)
  18. 安徽事业单位考试计算机基本知识,2017安徽事业单位考试备考资料:计算机知识(文字处理软件World)...
  19. LabVIEW模拟卡拉OK唱机的灯光显示效果
  20. JavaWeb框架设计之菜单设计

热门文章

  1. Java桌面游戏巡礼——国外Java游戏合集(第一回)
  2. 279. 完全平方数。
  3. 聚丙烯酰胺在造纸厂都有哪些用途?
  4. WebForm 使用log4net
  5. 指定加拿大UBC|临床肿瘤专业应届博士成功获访问学者offer
  6. 27.4.1 开发ActiveX控件
  7. word恢复和粘贴按钮变灰色,不可用怎么办?
  8. idea配置maven【伸手党福利】
  9. Vue 使用百度地图GL
  10. 大华-快时钟域到慢时钟域