配置direct-lvm模式
1. 停止Docker
systemctl stop docker
2. 安裝依賴包
device-mapper-persistent-data,lvm2, and all dependencies
3. 創建物理卷/dev/md123p1來替換塊設備
[root@localhost ~]# pvcreate /dev/md123p1
WARNING: ext4 signature detected on /dev/md123p1 at offset 1080. Wipe it? [y/n]: y
Wiping ext4 signature on /dev/md123p1.
Physical volume "/dev/md123p1" successfully created.
4. 用vgcreate命令在同一個設備上創建docker卷組
[root@localhost ~]# vgcreate docker /dev/md123p1
Volume group "docker" successfully created
5. 用lvcreate命令創建thinpool(數據)和thinpoolmeta(元數據)兩個邏輯卷
最后一個參數指定空閑空間的數量,以允許在空間運行低時自動擴展數據或元數據,作為臨時的權宜之計。這些是推薦的值。
[root@localhost ~]# lvcreate --wipesignatures y -n thinpool docker -l 95%VG
Logical volume "thinpool" created.
[root@localhost ~]# lvcreate --wipesignatures y -n thinpoolmeta docker -l 1%VG
Logical volume "thinpoolmeta" created.
6. 用lvconvert命令把thinpool數據卷和thinpoolmeta元數據卷換為一個精簡池,且此精簡池使用原數據卷的名字
[root@localhost ~]# lvconvert -y --zero n -c 512K --thinpool docker/thinpool --poolmetadata docker/thinpoolmeta
Thin pool volume with chunk size 512.00 KiB can address at most 126.50 TiB of data.
WARNING: Maximum supported pool metadata size is 15.81 GiB.
WARNING: Converting logical volume docker/thinpool and docker/thinpoolmeta to thin pool's data and metadata volumes with metadata wiping.
THIS WILL DESTROY CONTENT OF LOGICAL VOLUME (filesystem etc.)
Converted docker/thinpool_tdata to thin pool.
7. 通過lvm profile配置精簡池的自動擴容
$ sudo vi/etc/lvm/profile/docker-thinpool.profile
8. 指定thin_pool_autoextend_threshold和thin_pool_autoextend_percent的值
thin_pool_autoextend_threshold:當達到使用空間的指定閾值(百分數)后,lvm就會試圖嘗試自動擴展可用的空間(100=禁用)。
thin_pool_autoextend_percent:當磁盤每次達到上面定義的閾值后,自動再擴展的百分比數(0=禁用)。
示例:
當磁盤使用達到80%時,再擴展當前容量的10%。更新/etc/lvm/profile/docker-thinpool.profile
activation {
thin_pool_autoextend_threshold=80
thin_pool_autoextend_percent=10
}
保存文件。
9. 用lvchange命令激活LVM profile
[root@localhost ~]# lvchange --metadataprofile docker-thinpool docker/thinpool
Logical volume docker/thinpool changed.
10. 對主機上的邏輯卷啟用監視
如果沒有這個步驟,即使在LVM配置文件出現時也不會發生自動擴展。
[root@localhost ~]# lvs -o+seg_monitor
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert Monitor
thinpool docker twi-a-t--- 3.28t 0.00 0.02 monitored
11. 備份Docker原有數據
如果曾經在這個主機上運行過Docker,或者如果/var/ lib/docker存在,那么將它移出后,Docker就可以使用新的LVM池來存儲鏡像和容器的內容了。
$ mkdir /var/lib/docker.bk
$ mv /var/lib/docker/*/var/lib/docker.bk
12. 編輯/etc/docker/daemon.json
配置devicemapper存儲驅動程序所需的選項。如果該文件以前是空的,那么現在應該包含以下內容:
[root@localhost ~]# cat /etc/docker/daemon.json
{
"registry-mirrors": ["https://vaflkxbk.mirror.aliyun.com"],
"storage-driver":"devicemapper",
"storage-opts": [
"dm.thinpooldev=/dev/mapper/docker-thinpool",
"dm.use_deferred_removal=true",
"dm.use_deferred_deletion=true"
]
}
注意:
延遲刪除選項,dm.use_deferred_deletion=true,在使用默認內核版本3.18時還不支持RHEL、CentOS或Ubuntu 14.04。
13. 啟動Docker
systemd:
$ sudo systemctl start docker
service:
$ sudo service docker start
14. 查看Docker啟動信息
$ docker info
[root@localhost ~]# docker info
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 17.12.0-ce
Storage Driver: devicemapper
Pool Name: docker-thinpool
Pool Blocksize: 524.3kB
Base Device Size: 10.74GB
Backing Filesystem: xfs
Udev Sync Supported: true
Data Space Used: 20.45MB
Data Space Total: 3.611TB
Data Space Available: 3.611TB
Metadata Space Used: 2.822MB
Metadata Space Total: 16.98GB
Metadata Space Available: 16.98GB
Thin Pool Minimum Free Space: 361.1GB
Deferred Removal Enabled: true
Deferred Deletion Enabled: true
Deferred Deleted Device Count: 0
Library Version: 1.02.140-RHEL7 (2017-05-03)
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 89623f28b87a6004d4b785663257362d1658a729
runc version: b2567b37d7b75eb4cf325b77297b140ea686ce8f
init version: 949e6fa
Security Options:
seccomp
Profile: default
Kernel Version: 3.10.0-327.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 24
Total Memory: 125.7GiB
Name: localhost.localdomain
ID: J3U3:BRQF:4WTY:S725:ALZ4:DJPR:IF5I:JRRP:CYLU:LMNG:LT56:EIGM
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
15. 驗證配置正確后,就可以刪除/var/lib/docker.bk目錄了
$ rm -rf /var/lib/docker.bk