欢迎光临散文网 会员登陆 & 注册

基于DIY主机+CentOS搭建模块化NAS系统

2022-03-10 10:14 作者:提依拉  | 我要投稿

NAS介绍

NAS(Network Attached Storage): 网络附属存储

按市场定位划分

  • 企业级NAS

  • 家用级NAS

家用级NAS功能

以群晖为例:

  • 文件系统共享

  • 文件同步

  • 容器

  • 虚拟机

  • 下载

  • 流媒体

  • 备份

家用NAS解决方案

直接购买软硬件结合消费级产品

  • 优点:时间成本,学习成本,云服务

  • 缺点:性价比,性能

兼容的主机安装发行版NAS系统

  • 优点:同时兼顾了可视化,学习成本和性价比

  • 缺点:服务管理和系统管理

主流主机+最小化操作系统上搭建服务

  • 优点:兼容性,系统管理和服务管理

  • 缺点:学习成本,时间成本

自己在家设计芯片/文件系统/操作系统

  • 优点:性能,创新

  • 缺点:技术难度

DIY主机

机箱

塔式机箱

中塔
全塔

NAS机箱

MATX
ITX

微型电脑

树莓派等

CPU

  • 服务器cpu

  • 台式机cpu

  • 嵌入式
    大致考虑以下几点:
    功耗
    噪音
    稳定性
    性能
    性价比
    扩展性

操作系统

RHEL,CentOS,Ubuntu,SUSE,Fedora,Windows Server,Windows

最小化安装CentOS 8

过程略

LVM RAID

描述

lvm(8)RAID是一种创建逻辑卷(LV)的方法,它使用多个物理设备来提高性能或容忍设备故障。在LVM中,物理设备是单个卷组(VG)中的物理卷(PV)。

LV数据块如何放置在PV上取决于RAID级别。RAID级别通常称为“RAID”,后跟一个数字,例如raid1、raid5或raid6。选择RAID级别需要在以下方面进行权衡:物理设备要求、容错性和性能。有关RAID级别的说明,请访问www.snia.org/sites/default/files/SNIA_DDF_Technical_Position_v2.0.pdf

LVM RAID使用Linux内核中的设备映射器(DM)和多个设备(MD)驱动程序。DM用于创建和管理可见LVM设备,MD用于在物理设备上放置数据。

LVM在可见LV和物理设备之间创建分层的隐藏LV(dm设备)。中间层的LVS被称为子LVS。对于LVM raid,将为每个raid映像/分支创建一个子LV对来存储数据和元数据(raid超级块和写意图位图)(请参见下面的lvs命令示例)。

USAGE

要创建RAID LV,请使用lvcreate并指定LV类型. The LV type corresponds to a RAID level. 可以使用的基本RAID级别有: raid0, raid1, raid4, raid5, raid6,raid10.

lvcreate --type RaidLevel [OPTIONS] --name Name --size Size VG [PVs]

To display the LV type of an existing LV, run:

lvs -o name,segtype LV

(The LV type is also referred to as "segment type" or "segtype".)

LVs can be created with the following types:

raid0

也叫 striping, raid0 spreads LV data across multiple devices in units of stripe size. 这用于提高性能. 如果任何设备出现故障,LV数据将丢失.

lvcreate --type raid0 [--stripes Number --stripesize Size] VG [PVs]

--stripes Number
指定要在其上分布LV的设备数。

--stripesize Size
指定每个条带的大小(以KB为单位)。这是移动到下一个设备之前写入一个设备的数据量。

PVs指定要使用的设备。如果未指定,lvm将根据可用或提供的PV数量选择多个设备,每个条带一个。

raid1

也叫 mirroring, raid1 uses multiple devices to duplicate LV data. 如果除一个设备外的所有设备都出现故障,LV数据仍然可用. The minimum number of devices (i.e. subLV pairs) required is 2.

lvcreate --type raid1 [--mirrors Number] VG [PVs]

--mirrors Number
指定除原始LV映像之外的镜像映像数,例如--mirrors 1表示数据有两个映像,原始映像和一个镜像。

PVs指定要使用的设备。如果未指定,lvm将选择多个设备,每个镜像一个。

raid5

raid5是条带化的一种形式,它使用额外的设备来存储奇偶校验块。LV数据和奇偶校验块存储在每个设备上,出于性能原因,通常以旋转模式存储。如果一台设备出现故障,LV数据仍然可用。奇偶校验用于重新计算单个设备丢失的数据。所需的最少设备数量为3个 (unless converting from 2 legged raid1 to reshape to more stripes; seereshaping).

lvcreate --type raid5 [--stripes Number --stripesize Size] VG [PVs]

--stripes Number
LV数据的设备数。这不包括lvm为存储奇偶校验块而添加的额外设备。带有数字条纹的raid5 LV需要数字+1设备。数字必须为2或更多。

--stripesize Size
条带的大小(以KB为单位)。这是移动到下一个设备之前写入一个设备的数据量。

PVs指定要使用的设备。如果未指定,lvm将选择第+1个单独的设备。

raid5被称为旋转奇偶校验,因为奇偶校验块以循环顺序放置在不同的设备上。raid5有多种不同的算法,用于放置奇偶校验块。默认变量是raid5_ls(raid5左对称,这是一个带数据重启的旋转奇偶校验0。)请参阅下面的RAID5 VARIANTS

SubLVs

LV通常是其他隐藏LV的组合,称为子LV。子虚拟机使用物理设备,或者由其他子虚拟机本身构建。子虚拟机保存LV数据块、RAID奇偶校验块和RAID元数据。子V通常是隐藏的,因此需要lvs -a选项来显示它们:

lvs -a -o name,segtype,devices

设备故障

RAID LV中的物理设备可能会由于多种原因发生故障或丢失。设备可能已断开连接、永久性故障或暂时断开连接。RAID LVs(级别1及更高)的目的是在降级模式下继续运行,即使在设备发生故障后也不会丢失LV数据。在不丢失LV数据的情况下发生故障的设备数量取决于RAID级别:

如果RAID LV缺少设备或存在其他与设备相关的问题,lvs会在健康状况(和属性)字段中报告:

lvs -o name,lv_health_status

激活丢失设备的LV

丢失设备的RAID LV可能会被激活或不被激活,这取决于lvchange中使用的“激活模式”:

lvchange -ay --activationmode complete|degraded|partial LV

更换设备

RAID LV中的设备可以由VG中的其他设备替换。更换系统上不再可见的设备时,请使用lvconvert --repair。更换仍然可见的设备时,请使用lvconvert --replace。repair命令将尝试恢复先前在LV中的相同数量的数据LV。replace选项重复替换多个PV。替换设备可以选择与任一选项一起列出。

lvconvert --repair LV [NewPVs]

lvconvert --replace OldPV LV [NewPV]

lvconvert --replace OldPV1 --replace OldPV2 LV [NewPVs]

刷新LV

刷新RAID LV将清除任何瞬时设备故障(设备暂时断开连接),并将LV返回到其完全冗余模式。恢复设备通常至少需要部分同步(请参阅同步)。未能清除瞬态故障会导致RAID LV在降级模式下运行,直到其重新激活。使用lvchange命令刷新LV:

lvchange --refresh LV

RAID TAKEOVER

RAID takeover是将RAID LV从一个RAID级别转换为另一个RAID级别,例如从raid5转换为raid6。更改RAID级别通常是为了增加或减少对设备故障的恢复能力,或是为了对LV进行重新restripe。这是使用lvconvert完成的,并将新RAID级别指定为LV type:

lvconvert --type RaidLevel LV [PVs]

最常见和推荐的RAID akeover 管转换有:

linear to raid1
which is a direct copy of the original linear image.

striped/raid0 to raid4/5/6
Adding parity devices to a striped volume results in raid4/5/6.

以下takeover转换目前是可能的:

  • between striped and raid0.

  • between linear and raid1.

  • between mirror and raid1.

  • between raid1 with two images and raid4/5.

  • between striped/raid0 and raid4.

  • between striped/raid0 and raid5.

  • between striped/raid0 and raid6.

  • between raid4 and raid5.

  • between raid4/raid5 and raid6.

  • between striped/raid0 and raid10.

  • between striped and raid4.

间接转换

从一个raid级别转换到另一个raid级别可能需要多个步骤,首先转换到中间raid级别

linear to raid6

将LV从线性转换为raid6:

  1. convert to raid1 with two images

  2. convert to raid5 (internally raid5_ls) with two images

  3. convert to raid5 with three or more stripes (reshape)

  4. convert to raid6 (internally raid6_ls_6)

  5. convert to raid6 (internally raid6_zr, reshape)

执行上述步骤的命令如下:

  1. lvconvert --type raid1 --mirrors 1 LV

  2. lvconvert --type raid5 LV

  3. lvconvert --stripes 3 LV

  4. lvconvert --type raid6 LV

  5. lvconvert --type raid6 LV

从raid6_ls_6到raid6_zr的最终转换是为了避免由于专用奇偶校验设备而导致raid6_ls_6中潜在的写/恢复性能降低。raid6_zr旋转数据和奇偶校验块以避免这种情况。

linear to striped
要将LV从linear转换为striped,请执行以下操作:

  1. convert to raid1 with two images

  2. convert to raid5_n

  3. convert to raid5_n with five 128k stripes (reshape)

  4. convert raid5_n to striped

执行上述步骤的命令包括:

  1. lvconvert --type raid1 --mirrors 1 LV

  2. lvconvert --type raid5_n LV

  3. lvconvert --stripes 5 --stripesize 128k LV

  4. lvconvert --type striped LV

使用步骤2中的raid5_n类型是因为它在末尾有专用的奇偶校验子LV,并且可以直接转换为striped.在步骤3中增加条带大小,为转换过程添加额外空间。此步骤将LV大小增加五倍。转换后,可以减少额外的空间(或使用LV扩展文件系统)。

Reversing 这些步骤会将条带状LV转换为线性LV

RAID整形

RAID重塑是在保持相同RAID级别的同时更改RAID LV的属性。这包括更改RAID布局、条带大小或条带数量。

RAID5变体

raid5_ls

  • RAID5 左对称

  • 带数据重启的轮转奇偶校验N

raid5_la

  • RAID5左不对称

  • 带数据延续的旋转奇偶校验N

raid5_rs

  • RAID5右对称

  • Rotating parity 0 with data restart

raid5_ra

  • RAID5右不对称

  • Rotating parity 0 with data continuation

raid5_n

  • RAID5奇偶校验n

  • 用于条带化/raid0转换的专用奇偶校验设备n

  • 用于RAID接管Takeover

参考

dm-raid — The Linux Kernel documentation
https://www.kernel.org/doc/html/latest/admin-guide/device-mapper/dm-raid.html
lvmraid
https://www.linux.org/docs/man7/lvmraid.html
LVM stripe addition failing with "1 extents needed, but only 0 available" or "Insufficient suitable allocatable extents for logical volume"
https://access.redhat.com/solutions/3264531

LVM caching

lvm(8)包括两种缓存,可用于提高逻辑卷(LV)的性能。缓存时,LV数据的不同子集临时存储在更小更快的设备(如SSD)上,以提高LV的性能。

要使用lvm实现这一点,首先从速度更快的设备创建一个新的特殊LV。此LV将保存缓存。然后,新的快速LV通过lvconvert命令连接到主LV。lvconvert将一个设备映射器缓存目标插入到主LV的i/o路径中。device mapper target将主LV和快速LV组合成一个看起来像主LV但性能更好的混合设备。在使用主LV时,其部分数据将临时透明地存储在专用fast LV上。

两种缓存是:

  • 使用dm cache内核模块的读写热点缓存。此缓存跟踪访问模式并有意调整其内容,以便在快速存储器上找到主LV的常用部分。LVM使用LV类型缓存来引用它。

  • 使用dm writecache内核模块的写缓存。此缓存可与SSD或PMEM设备一起使用,以加速对主LV的所有写入。从主LV读取的数据不存储在缓存中,只存储新写入的数据。LVM使用LV类型的writecache来引用它。

除极客外, 一般情况不需要缓存盘. 包括做种不多的下载盘

参考文档:lvmcache(7) manpage

CEPH

Ceph 访问方式

Ceph 原生 API (librados)

  • 实施其他 Ceph 接口(例如 Ceph Block Device 和 Ceph Object Gateway)的基础库是 librados

  • librados 是原生 C 库,允许应用直接使用 RADOS 来访问Ceph 集群中存储的对象。也有类似的库适用于 C++、Java、Python、Ruby 和 PHP

  • 为最大化性能,请编写软件以直接与 librados 配合使用

  • 为了简化对 Ceph 存储的访问,可以改为更高级访问方式,如RADOS Block Device、Ceph Object Gateway(RADOSGW)和 CephFS

RADOS 块设备

  • Ceph Block Device(RADOS Block Device 或 RBD)通过RBD image 在 Ceph 集群内提供块存储

  • 组成 RBD 的对象分布到不同的 OSD,对块设备的访问自动并行处理

Ceph Object Gateway(RADOS Gateway)

  • Ceph 对象网关(RADOS 网关、RADOSGW 或 RGW)是使用 librados 构建的对象存储接口,通过 RESTful API 为应用提供了网关,并且支持两种接口:Amazon S3 和 OpenStack Swift

Ceph File System(CephFS)

  • CephFS 是一种并行文件系统,提供可扩展的、单层级结构共享磁盘。红帽 Ceph Storage 4 提供对 CephFS 的生产环境支持,包括快照支持

  • Ceph Metadata Server (MDS) 管理 CephFS 中文件的元数据。包括文件的访问、更改 和修改时间戳等信息

了解池

  • 池是用来存储对象的逻辑分区。Ceph 客戶端将对象写入池中

池类型

  • 池类型有复制池和纠删代码池

  • 复制池是默认的池类型,将对象复制到多个 OSD ,需要更多的存储空间,但读操作不受副本丢失的影响

  • 纠删代码池需要的存储空间和网络带宽较小,但因为奇偶校验计算,计算开销会更高一些

  • 对于不需要频繁访问且不需要低延迟的数据,可选择纠删代码池

  • 对于经常访问并且需要快速读取性能的数据,选择复制池

创建复制池

  • Ceph 通过创建对象的多个副本来保护复制池中的数据,称为副本(replica)。副本存储在池中的不同 OSD 中,一个或多个OSD 出现故障时,对象中的数据会得到保护

配置纠删代码池

  • 纠删代码池使用纠删代码而非复制来保护对象数据

  • 纠删代码池中存储的对象分割为多个数据区块,这些数据区块存储在不同的 OSD 中。此外,根据数据区块计算一系列编码区块,它们也存储在不同的 OSD 中。当含有区块的 OSD 出现故障时,可利用编码区块来重建对象的数据

Ceph 文件系统和 MDS

  • Ceph 文件系统 (CephFS) 是一种兼容 POSIX 的文件系统,可以像使用传统文件系统一样整理自己的数据

  • 若要实施 Ceph 文件系统,需要一个正在运行的 Ceph 存储集群;至少一台 Ceph 元数据服务器 (MDS) 来管理元数据

  • 与 RBD 和 RGW 一样,CephFS 服务使用 librados 的原生接口

SAMBA

描述SMB

  • Server Message Block (SMB) 是 Microsoft Windows 的标准文件共享协议。

  • 配置独立服务器是最简单的方法,其中服务端和客戶端是Windows 工作组成员。服务器在本地管理用戶帐戶和密码

  • 更复杂的配置使用 Microsoft Active Directory (AD) 通过域控制器来协调用戶身份验证

  • RHEL 支持访问和提供 SMB 文件共享。客戶端安装 cifs-utils软件包;服务端安装 samba 软件包

使用 SMB 共享目录

  • Samba 共享 Linux 目录。服务端在其 Samba 数据库中管理用戶帐戶,并为本地 Windows 工作组的成员提供文件共享

  • SMB 共享目录的基本步骤如下:

  1. 安装 samba 软件包

  2. 准备要共享的目录

  3. 配置 /etc/samba/smb.conf 文件

  4. 设置适当的 Linux 用戶,并在 Samba 数据库中配置它们

  5. 启动 Samba 并打开防火墙

  6. 从客戶端系统挂载 SMB 共享,验证配置

安装 Samba 并准备要共享的目录

  • 在 Samba 服务器上安装 samba 软件包

[root@host ~]# yum install samba

  • 创建要共享的目录

[root@host ~]# mkdir /srv/smbshare

设置 Linux 访问权限

  • Samba 将其用戶帐戶映射到 Linux 用戶,可使用 Linux 文件权限控制对目录的访问

[root@host ~]# chgrp developers /var/smbshare
[root@host ~]# chmod 2775 /srv/smbshare
[root@host ~]# drwxrwsr-x. 2 root developers 6 May 26 08:56 /srv/smbshare

  • SGID位确保新文件自动属于developers组

设置 SELinux context 类型

  • 将目录 context 类型设为 samba_share_t

[root@host ~]# semanage fcontext -a -t samba_share_t /srv smbshare(/.*)?
[root@host ~]# restorecon -Rv /srv/smbshare

  • *Samba 还支持使用 SELinux public_content_t(只读)和public_content_rw_t (读/写)type 标记的文件。对于public_content_rw_t type,启用 SELinux smbd_anon_write 布尔值以允许读/写访问。当希望 Apache服务器或 NGINX 能够提供共享目录内容或写入到其中时,这两种 SELinux 类型非常有用

配置 Samba

  • Samba 配置文件是 /etc/samba/smb.conf

  • /etc/samba/smb.conf 以 [global] 部分开头。该部分提供常规配置和默认值,可在后续部分中覆盖。下一部分定义文件或打印机共享。; 或 # 表示注释

配置全局部分

  • [global] 部分定义 Samba 服务器的基本配置,主要参数如下

  • workgroup:指定服务器的 Windows 工作组,默认值为WORKGROUP

  • security:控制 Samba 如何对客戶端进行身份验证。默认值security = user,客戶端使用本地 Samba 数据库中的用戶名和密码来登录

  • server min protocol:指定服务端支持的最小 SMB 版本。服务器默认支持所有版本的协议,并与客戶端协商版本。由于第一个版本 SMB1(或 CIFS)存在安全问题,因此红帽建议将 server min protocol 设置为 SMB2。但 Microsoft Windows XP 或更早版本的客戶端将无法访问服务端,因为它们仅支持 SMB1。SMB 协议的当前版本是 3

  • smb encrypt:激活流量加密。服务端和客戶端默认会协商加密。若要强制加密,将 smb encrypt 设为 required ,并将server min protocol 设为 SMB3。只有 SMB3 提供对加密的原生支持。Microsoft Windows 8、Microsoft Windows Server 2012 和更高版本的操作系统支持加密的 SMB3

配置共享部分

  • 在 [global] 部分后面,在自定义部分中定义共享。方括号中定义共享的名称,此部分中最有用的指令如下

  • path:在服务器上共享的目录名称

  • writeable:经过身份验证的用戶对共享的读/写访问权限(yes 或 no),默认为 no

  • write list:当 writeable 设为 no,可使用 write list 提供具有读/写访问权限的用戶列表。不在列表中的用戶仅有读权限。@字符表示 Linux 组

write list = operator1, @developers

  • valid users:所有经过身份验证的用戶默认都可以访问该共享。使用 valid users 限制访问权限,用戶列表用逗号分隔

  • 下例定义 devcode 共享,授予对 /srv/smbshare 的访问权限。所有经过身份验证的用戶都对共享具有读权限,但只有developers 组员具有读/写权限

[devcode]
path = /srv/smbshare
write list = @developers

  • 下例仅 developers 组和 operator1 用戶允许访问,从而限制对共享的访问。operator1 仅有读权限,因为它不在 write list中

[devcode]
path = /srv/smbshare
valid users = operator1, @developers
write list = @developers

验证配置文件

  • 运行 testparm 命令验证 /etc/samba/smb.conf

[root@host ~]# testparm
Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
Server role: ROLE_STANDALONE

Press enter to see a dump of your service definitions
Enter
...output omitted...

准备 Samba 用户

  • 每个 Samba 帐戶必须有联名的 Linux 帐戶。要创建仅限于Samba 的用戶帐戶,需锁定其 Linux 密码,并将登录设置为/sbin/nologin,防止用户 ssh 登录

[root@host ~]# useradd -s /sbin/nologin operator1

  • 将用戶添加到 Samba 数据库,使用 smbpasswd -a username,命令会提示输入密码

[root@host ~]# smbpasswd -a operator1
New SMB password: redhat
Retype new SMB password: redhat
Added user operator1.

  • 若要从 Samba 数据库中删除用戶,使用 -x 选项

[root@host ~]# smbpasswd -x operator1
Deleted user operator1.

  • 还有更强大的 pdbedit 命令。例如,可使用 pdbedit -L 命令列出 Samba 数据库中的用戶。可参考 pdbedit(8) man page

  • Samba 数据库在 /var/lib/samba/private/。切勿直接修改该目录中的文件

启动 Samba

  • 使用 systemctl 命令启用并启动 smb 服务

[root@host ~]# systemctl enable --now smb

打开 samba firewalld 服务,允许对端口 139/TCP 和端口445/TCP 的访问

[root@host ~]# firewall-cmd --permanent --add-service=samba
[root@host ~]# firewall-cmd --reload

  • 注:Samba 定期检查 /etc/samba/smb.conf 是否被更改。如果已更改,则 Samba 自动重新加载配置文件,这将不会影响已经建立的连接

挂载 SMB 文件系统

  • Microsoft Windows 和 Linux 系统均可访问 SMB 共享

  • 在 Linux 上,安装 cifsutils 软件包,可在本地系统上挂载SMB 共享

  • 在 Linux 上,可用 //servername/sharename 表示法访问共享。标准 Microsoft Windows 统一命名约定是\servername\sharename,用于表示网络资源。但 \ 在 shell 中是转义符,因此 Linux 改用 / 字符

  • 若要挂载 SMB 共享,必须提供用戶凭据以向 Samba 服务器进行身份验证。这些凭据决定了对共享上的文件的访问权限。

  • 对于手动挂载,可使用 username 挂载选项,会提示用戶输入密码

[root@host ~]# mount -o username=operator1 //host.example.com/devcode /mnt
Password for operator1@//host.example.com/devcode: redhat

  • 若要自动挂载,在 /etc/fstab 添加 credentials 选项

//host.exmaple.com/devcode /data cifs credentials=/etc/samba/credentials 0 0

  • 凭据文件包含用戶名和密码

[root@host ~]# cat /etc/samba/credentials
username=operator1
password=redhat

  • 由于凭据文件包含密码,请将文件存储在安全目录中,并限制其访问权限

[root@host ~]# chown root /etc/samba/credentials
[root@host ~]# chmod 600 /etc/samba/credentials

请求加密:

  • 若要强制 SMB 流量加密,将 seal 选项与 mount 命令配合使用

//host.example.com/devcode /data cifs credentials=/etc/samba/credentials,seal 0 0

执行多用户 SMB 挂载

  • 当使用 credentials 或 username 选项挂载 SMB 共享时,凭据由本地系统上的所有用戶使用

  • 理想情况下,希望每个用戶使用自己的 SMB 凭据来确定对共享的访问权限。可以、使用 multiuser 挂载选项

  • 在使用 multiuser 时,可让 root 用戶使用对共享具有最少访问权限的凭据。当用戶登录时,他们使用 cifscreds 命令将他们的SMB 密码临时添加到安全内核密钥环中。然后,客戶端的Linux 内核将使用其 SMB 凭据来确定对共享的访问权限,而不是 root 的凭据。

  • 下列步骤描述了 multiuser 选项的系统配置:


    • 创建用于挂载 SMB 共享的凭据文件。凭据文件中的默认用戶须具有对 SMB 共享的最少访问权限(读取权限)


    • 将 multiuser 选项添加到加载命令。以下 /etc/fstab 条目使用credentials 和 multiuser 选项

//host.example.com/devcode /data cifs credentials=/etc/samba/credentials,multiuser 0 0


    • 使用 mount 命令挂载 SMB 共享

  • 在访问挂载点之前,用戶应运行 cifscreds 命令以提供其凭据

[developer@client ~]$ cifscreds add host.example.com
Password: redhat

  • cifscreds 的 add 子命令将 SMB 凭据加载到内核密钥环。clear 子命令将用戶凭据从特定主机的内核密钥环中删除。update 子命令可将内核密钥环中的凭据替换为新用戶和密码的凭据

参考文档:samba(7)、smb.conf(5)、testparm(1)、smbpasswd(8)、pdbedit(8)、mount.cifs(8) 和 cifscreds(1) manpage

podman

什么是 Podman

Podman 是一个开源的容器运行时项目,可在大多数 Linux 平台上使用。Podman 提供与 Docker 非常相似的功能。正如前面提到的那样,它不需要在你的系统上运行任何守护进程,并且它也可以在没有 root 权限的情况下运行。

Podman 可以管理和运行任何符合 OCI(Open Container Initiative)规范的容器和容器镜像。Podman 提供了一个与 Docker 兼容的命令行前端来管理 Docker 镜像。

安装 Podman

Podman 目前已支持大多数发行版本通过软件包来进行安装,下面我们来举几个常用发行版本的例子。

Fedora / CentOS

$ sudo yum -y install podman

Ubuntu

$ sudo apt-get update -qq$ sudo apt-get install -qq -y software-properties-common uidmap$ sudo add-apt-repository -y ppa:projectatomic/ppa$ sudo apt-get update -qq$ sudo apt-get -qq -y install podman

MacOS

$ brew cask install podman

RHEL 7

$ sudo subscription-manager repos --enable=rhel-7-server-extras-rpms$ sudo yum -y install podman

Arch Linux

$ sudo pacman -S podman

更多系统的安装方法,可参考官方文档:https://github.com/containers/libpod/blob/master/install.md

使用 Podman

运行一个容器

$ podman run -dt -p 8080:8080/tcp \-e HTTPD_VAR_RUN=/var/run/httpd \-e HTTPD_MAIN_CONF_D_PATH=/etc/httpd/conf.d \-e HTTPD_MAIN_CONF_PATH=/etc/httpd/conf \-e HTTPD_CONTAINER_SCRIPTS_PATH=/usr/share/container-scripts/httpd/ \registry.fedoraproject.org/f27/httpd /usr/bin/run-httpd

列出运行的容器

$ podman ps -a

分析一个运行的容器

$ podman inspect -l | grep IPAddress\":"SecondaryIPAddresses": null,"IPAddress": "",

查看一个运行中容器的日志

$ sudo podman logs --latest10.88.0.1 - - [07/Feb/2018:15:22:11 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.55.1" "-"10.88.0.1 - - [07/Feb/2018:15:22:30 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.55.1" "-"10.88.0.1 - - [07/Feb/2018:15:22:30 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.55.1" "-"10.88.0.1 - - [07/Feb/2018:15:22:31 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.55.1" "-"10.88.0.1 - - [07/Feb/2018:15:22:31 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.55.1" "-"

查看一个运行容器中的进程资源使用情况

$ sudo podman top <container_id> UID PID PPID C STIME TTY TIME CMD 0 31873 31863 0 09:21 ? 00:00:00 nginx: master process nginx -g daemon off; 101 31889 31873 0 09:21 ? 00:00:00 nginx: worker process

停止一个运行中的容器

$ sudo podman stop --latest

删除一个容器

$ sudo podman rm --latest

以上这些特性基本上都和 Docker 一样,Podman 除了兼容这些特性外,还支持了一些新的特性。

  • 给容器设置一个检查点

  • 根据检查点位置恢复容器

  • 迁移容器

  • 配置别名

  • Podman 如何实现开机重启容器

参考
Podman解析 https://www.jianshu.com/p/3fc6eff747ab

KVM

KVM
KVM是linux内核的模块,它需要CPU的支持,采用硬件辅助虚拟化技术Intel-VT,AMD-V,内存的相关如Intel的EPT和AMD的RVI技术,Guest OS的CPU指令不用再经过Qemu转译,直接运行,大大提高了速度,KVM通过/dev/kvm暴露接口,用户态程序可以通过ioctl函数来访问这个接口。

QEMU
Qemu是一个模拟器,它向Guest OS模拟CPU和其他硬件,Guest OS认为自己和硬件直接打交道,其实是同Qemu模拟出来的硬件打交道,Qemu将这些指令转译给真正的硬件。

qemu-kvm
Qemu将KVM整合进来,通过ioctl调用/dev/kvm接口,将有关CPU指令的部分交由内核模块来做。kvm负责cpu虚拟化+内存虚拟化,实现了cpu和内存的虚拟化,但kvm不能模拟其他设备。qemu模拟IO设备(网卡,磁盘等),kvm加上qemu之后就能实现真正意义上服务器虚拟化。因为用到了上面两个东西,所以称之为qemu-kvm。

libvirt
libvirt是目前使用最为广泛的对KVM虚拟机进行管理的工具和API。Libvirtd是一个daemon进程,可以被本地的virsh调用,也可以被远程的virsh调用,Libvirtd调用qemu-kvm操作虚拟机。

virt-manager
virt-manager是用于管理KVM虚拟环境的主要工具,virt-manager默认设置下需要使用root用户才能够使用该工具。当你想在KVM hypervisor服务器上托管虚拟机,由最终用户而非root用户访问这些虚拟机时并不总是很便利。

WebVirtMgr
WebVirtMgr采用几乎纯Python开发,其前端是基于Python的Django,后端是基于Libvirt的Python接口,将日常kvm的管理操作变的更加的可视化。

Aria2

Aria2是一款开源下载工具,可帮助简化不同设备和服务器之间的下载过程。它支持磁力链接、BT种子、http等类型的文件下载,与迅雷及QQ旋风相比,Aria2有着优秀的性能及较低的资源占用,架构本身非常轻巧,通常只需要4兆字节(HTTP下载)到9兆字节(用于BitTorrent交互)之间。

Jellyfin

Plex、Emby、Jellyfin是功能类似的三款媒体影音管理软件,支持多平台、刮削影片生成海报墙显示丰富的电影信息、在服务器端存储资料信息,实现多设备同步观影进程、远程播放、为播放端硬件转码视频等。


基于DIY主机+CentOS搭建模块化NAS系统的评论 (共 条)

分享到微博请遵守国家法律