docker容器的存储管理

news/2024/12/5 6:30:41/

系列文章目录

第一部分 基于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文件存储驱动,基于块设备和基于文件系统的两种实现方式,他们的区别或者说性能上谁优谁劣呢?


http://www.ppmy.cn/news/112657.html

相关文章

Docker容器管理

一、Docker的基本信息 1、系统环境 [rootDocker ~]# uname -r #显示操作系统的发行版号 3.10.0-693.el7.x86_64 [rootDocker ~]# cat /etc/redhat-release #查看centos 版本 CentOS Linux release 7.4.1708 (Core) 2、Docker版本 [rootDocker …

containerd和docker的区别

CNI网络 对比项dockercontainerd谁负责调用CNIkubelet内部的docker-shimcontainerd内置的cri-plugin(containerd 1.1以后)如何配置CNIkubelet参数 --cni-bin-dir 和 --cni-conf-dircontainerd配置文件(toml):plugins.cri.cni bin_dir “/opt/cni/bin” conf_dir …

如何进行温度分布验证?概念、原理与方法

一、什么是温度分布验证? 温度分布验证是通过在规定的研究时间内测量定义区域内的多个点来确定特定温度控制环境或过程(如冷冻柜、冰箱、培养箱、稳定室、仓库或高压灭菌器)的温度分布的过程。 温度分布验证的目标是确定每个测量点之间的差…

基于TEC1-12706半导体制冷片的微型“小冰箱”

炎炎夏日,相信大家或多或少都会这样一种经历:上下班或者外出时,走在烈日当空的路上,仿佛整个人都快要被太阳给晒化了,迫不及待想跑进有空调的地方,来瓶冰镇饮料,甚至来点冰镇水果,那…

集成灶/小家电语音提示芯片方案-WTN6040-8S唯创知音自主研发

集成灶一直是厨房中常用设备之一,而现代技术的不断发展,为集成灶的升级提供了更多的可能性。深圳唯创知音为了让家用电器更加便民,专门为集成灶开发了一款语音IC方案——WTN6040语音芯片方案,这款芯片可以满足集成灶对语音提示功能…

冷藏温度范围_食品冷藏的温度是多少

展开全部 食品冷藏温度 以确保冷藏,冷冻温度达到要求e69da5e887aa62616964757a686964616f31333365666161并保持卫生。用于贮藏食品的冷藏,冷冻柜(海南冷库)应定期除霜,清洁和维修。 即冷藏是指为保鲜和防腐的需要,冷藏,冷冻有严格的温度区别。将食品或原料置于冰点以上较低…

MySQL数据库——MySQL优化数据库结构的3种方法

当优化MySQL数据库结构时,有许多方法可以提高性能和效率。以下是三种常见的方法,下面我将详细讲解它们的原理和实践。 一、规范化数据库: 规范化是一种将数据组织成逻辑上一致和最小化冗余的过程。通过规范化数据库结构,可以提高…

计算机显示器模糊,显示器模糊,我来教您电脑显示器模糊怎么办

相信大家都有遇到过这种情况吧,这让人看起来很不舒服,虽然这并不影响电脑的操作,但长时间一直盯着看的话,对眼睛的伤害是很大的。那么为什么会出现Win7电脑显示器模糊问题呢,照成的原因又很多,下面&#xf…