使用LVM Thin Provisioning在CentOS 7上安装Docker

时间:2020-02-23 14:40:37  来源:igfitidea点击:

在本文中,将介绍"在CentOS 7或者RHEL 7 Linux上安装Docker以及为Docker配置精简配置存储"的步骤,现在Docker是最常见的容器解决方案之一,但它并不是唯一的容器解决方案。

  • Docker

  • " Kubernetes",它基于Google技术。

  • " Mesos",它来自Apache Foundation。

让我们进一步了解这些容器解决方案

什么是Docker?

  • 好吧,在Docker中,所有应用程序和依赖项都打包在一个单一的二进制文件中,即"容器"。

  • 使用Docker的方式与GIT非常相似。
    我们使用的docker push,docker pull,docker commit看起来很像用来从GIT下载某些东西,使用它,将某些东西上传到GIT并提交更改的GIT命令你想要。

  • Docker的核心是Docker image。
    Docker镜像建立在不可变的文件系统镜像上。
    Docker Hub,Docker Registry和Docker Datacenter可用于图像存储

  • 在Docker环境中,"图像存储"非常重要。
    而我们要如何处理它的方式实际上取决于我们环境中所需的可伸缩性级别。
    最简单的解决方案是使用全部在线的Docker hub
    但是,如果我们需要在自己的数据中心内运行许多容器,则可以改用Docker数据中心。

  • 如果我们正在运行多个容器,并且随着业务开始越来越依赖于容器,那么我们可能还需要实施Orchestration。
    这是通过使用外部(通常是第三方)解决方案来实现的,例如Marathon,SWARM,Kubernetes和OpenShift。

  • Docker本身是Docker,Inc.提供的一种商业解决方案。
    最近,一个开源开发版本被拆分出来,并可以通过Moby project来获得。

什么是Kubernetes?

  • Kubernetes是从零开始设计的,以Google Borg为例,并于2014年开源

  • 它基于Docker容器镜像,由CNCF管理,而不是由一家管理。

  • Kubernetes容器技术独立于基础架构,并且提供标准的部署接口,而与使用它的云供应商无关。

  • 它为开发人员提供了强大的工具。

什么是Mesos容器技术?

  • Mesos被设计为下一代集群管理器。

  • 它提供了数据中心资源抽象,这使它与云无关。

  • 它还允许我们对不同的工作负载进行托管。
    这意味着我们可以在同一环境中运行容器化和非容器化的工作负载。

  • 自动执行诸如部署,自我修复和扩展之类的操作。

  • 提供高可用性容错环境。

  • 它提供了可扩展性,并允许我们弹性缩放。

在开始在CentOS 7上安装Docker的步骤之前,我们需要对Docker术语有所了解。
否则,我们将对要使用的不同组件感到困惑。

  • Container Image:它是一个完整的镜像,它由多个只读层和一个可写层组成。

  • 基本镜像:基本镜像是一个没有添加层的全新操作系统,因此它是Docker容器镜像中镜像中的最低层。

  • "图像层":对基础层的每次更改都将导致一个新层堆叠在当前现有层上。

  • Container:容器镜像的运行实例

  • Docker Host:运行Docker容器的主机

  • Docker Hub:中央Docker存储库,其中包含许多现成的容器镜像。

在CentOS 7上预先安装Docker的准备工作

  • 8 GB的RAM

  • 50 GB的容器图像存储空间

  • 持久性卷的可选存储

执行清理

重要的是,在开始全新安装之前,首先必须确保没有可用的旧版本了。

# yum remove docker docker-client docker-client-latest docker-common 
                  docker-latest docker-latest-logrotate docker-logrotate 
                  docker-selinux docker-engine-selinux docker-engine

在CentOS 7上安装Docker

一旦删除了旧的Docker内容,我们就可以继续在CentOS 7上安装Docker。

说明:

我们必须具有RHN的有效订阅,或者我们可以配置本地脱机存储库,使用yum可以安装提供的rpm及其依赖项。

[root@node1 ~]# yum install -y yum-utils device-mapper-persistent-data lvm2

接下来,我们需要添加一个存储库以在CentOS 7上安装docker。
我们可以使用yum-config-manager添加存储库。
这里的" CE"代表"社区版"。
这是为了区分免费的"社区版"和需要单独许可的"企业版"。

[root@node1 ~]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
Loaded plugins: fastestmirror, langpacks
adding repo from: https://download.docker.com/linux/centos/docker-ce.repo
grabbing file https://download.docker.com/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo
repo saved to /etc/yum.repos.d/docker-ce.repo

接下来要在CentOS 7 Linux上安装docker,我们需要运行yum install docker-ce进行实际安装。

# yum install docker-ce

现在已经安装了软件,我们可以使用systemctl enable docker来启用Docker服务。

[root@node1 ~]# systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.

当我们看到docker服务的状态时,它表明它当前已"启用",但未运行;它被标记为"死"。

[root@node1 ~]# systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
   Active: inactive (dead)
     Docs: https://docs.docker.com

因此," systemctl start docker"将启动负责所有这些容器的Docker后端服务。

[root@node1 ~]# systemctl start docker

设置LVM精简配置

接下来,我们需要注意存储。
为此,我们将为容器镜像创建一个LVM存储池。
我们将使用设备映射器直接lvm。

现在,我们需要在该容器存储中使用一个块设备。
我们需要为容器镜像创建一个LVM存储池。
为此,我们使用了设备映射器直接LVM。

[root@node1 ~]# pvs
  PV         VG     Fmt  Attr PSize  PFree
  /dev/sda2  centos lvm2 a--  <9.52g       0
  /dev/sdb1  centos lvm2 a--  <8.00g 1020.00m

检查系统上可用分区和设备的列表。
如我们所见,我们将/dev/sdc作为免费分区,LVM不使用它。
因此我们可以将/dev/sdc用作物理卷。

[root@node1 ~]# ls -l /dev/sd*
brw-rw---- 1 root disk 8,  0 Dec 20 15:40 /dev/sda
brw-rw---- 1 root disk 8,  1 Dec 20 15:40 /dev/sda1
brw-rw---- 1 root disk 8,  2 Dec 20 15:40 /dev/sda2
brw-rw---- 1 root disk 8, 16 Dec 20 15:40 /dev/sdb
brw-rw---- 1 root disk 8, 17 Dec 20 15:40 /dev/sdb1
brw-rw---- 1 root disk 8, 32 Dec 20 15:40 /dev/sdc

我们将使用pvcreate/dev/sdc创建物理卷。

[root@node1 ~]# pvcreate /dev/sdc
  Physical volume "/dev/sdc" successfully created.

接下来,使用/dev/sdc上的物理卷创建一个卷组。

[root@node1 ~]# vgcreate vg_docker /dev/sdc
Volume group "vg_docker" successfully created

接下来,创建一个名称为Thinpool的逻辑卷。
我们在" vg_docker"卷组下创建它,并为该卷组分配" 95%"的大小。

[root@node1 ~]# lvcreate --wipesignatures y -n thinpool vg_docker -l 95%VG
  Logical volume "thinpool" created.

我们还想创建一个名称为" thinpoolmeta"的LVM卷,该卷用于元数据。

[root@node1 ~]# lvcreate --wipesignatures y -n thinpoolmeta vg_docker -l 1%VG
  Logical volume "thinpoolmeta" created.

注意:我们之所以分开,是因为一旦进入Docker环境,我们就可以提供更有效的存储。

接下来,我们使用lvconvert更改逻辑卷布局,这将设置精简存储池,而精简池正是使docker镜像的存储尽可能高效所需要的

[root@node1 ~]# lvconvert -y --zero n -c 512K --thinpool vg_docker/thinpool --poolmetadata vg_docker/thinpoolmeta
  Thin pool volume with chunk size 512.00 KiB can address at most 126.50 TiB of data.
  WARNING: Converting vg_docker/thinpool and vg_docker/thinpoolmeta to thin pool's data and metadata volumes with metadata wiping.
  THIS WILL DESTROY CONTENT OF LOGICAL VOLUME (filesystem etc.)
  Converted vg_docker/thinpool and vg_docker/thinpoolmeta to thin pool.
Here
-y         -> Do not prompt for confirmation interactively but always assume the answer yes
--zero     -> For snapshots, this controls zeroing of the first 4KiB of data in the snapshot. If the LV is read-only, the snapshot will not be zeroed. For thin pools, this controls zeroing of provisioned blocks. Provisioning of large zeroed chunks negatively impacts performance.
-c         -> The size of chunks in a snapshot, cache pool or thin pool
--thinpool -> The name of a thin pool LV.

接下来,我们将创建配置文件,然后选择名称vg_docker_image.profile

[root@node1 ~]# cat /etc/lvm/profile/vg_docker_image.profile
activation {
        thin_pool_autoextend_threshold=80
        thin_pool_autoextend_percent=20
}

这些是瘦端口存储池中将用于自动扩展瘦存储的参数。

现在我们需要使用vim创建配置文件。

重要说明:我们应确保此名称与我们创建的thinpool的名称匹配

[root@node1 ~]# cat /etc/lvm/profile/vg_docker-thinpool.profile
activation {
        thin_pool_autoextend_threshold=80
        thin_pool_autoextend_percent=20
}

现在,我们已经为要创建的" thinpool"创建了配置文件,我们可以将LVM卷转换为精简配置的LVM卷

[root@node1 ~]# lvchange --metadataprofile vg_docker-thinpool vg_docker/thinpool
  Logical volume vg_docker/thinpool changed.
[root@node1 ~]# lvs
  LV       VG        Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root     centos    -wi-ao---- <15.78g
  swap     centos    -wi-ao---- 760.00m
  thinpool vg_docker twi-a-t---   7.59g             0.00   0.05

在那里,我们可以看到逻辑卷刚刚更改。
现在我们需要创建一个Docker配置文件daemon.json

[root@node1 ~]# cat /etc/docker/daemon.json
{
  "storage-driver": "devicemapper",
  "storage-opts": [
  "dm.thinpooldev=/dev/mapper/vg_docker-thinpool",
  "dm.use_deferred_removal=true",
  "dm.use_deferred_deletion=true"
  ]
}
  • 因此,存储驱动程序设置为devicemapper,它告诉Docker应该使用设备映射器存储层。

  • 存储选项指定为dm.thinpooldevice,这是它应该使用的thinpool

  • 然后,我们还需要将dm.use_deferred_removal = true和dm.use_deferred_deletion = true包含在内。

这样,我们就完成了在CentOS 7 Linux上安装docker的步骤,现在,重新启动docker是一个聪明的主意。
我们之前已经启动了它,但是在以前的启动中,它没有使用这种精简配置。

[root@node1 ~]# systemctl restart docker

现在我们可以看到Docker守护程序处于活动状态并正在运行。

[root@node1 ~]# systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2016-12-20 15:51:20 IST; 57min ago
     Docs: https://docs.docker.com
 Main PID: 2601 (dockerd)
    Tasks: 8
   Memory: 33.1M
   CGroup: /system.slice/docker.service
           └─2601 /usr/bin/dockerd -H unix://
Dec 20 15:51:20 node1.example.com dockerd[2601]: time="2016-12-20T15:51:20.567366488+05:30" level=info msg="Succ...pper
Dec 20 15:51:20 node1.example.com dockerd[2601]: time="2016-12-20T15:51:20.599102217+05:30" level=info msg="Grap...nds"
Dec 20 15:51:20 node1.example.com dockerd[2601]: time="2016-12-20T15:51:20.599562425+05:30" level=info msg="Load...rt."
Hint: Some lines were ellipsized, use -l to show in full.

"