RHCSA学习笔记(RHEL8) - Part2.RH134

Chapter Ⅰ 提高命令行生产率

SHELL脚本
#/bin/bash声明使用的shell翻译器

for循环

for VAR in LIST
do
	COMMAND1
	COMMAND2
done

实验1:显示host1-5

#! /bin/bash
for host in host{1..5}
do
  echo $host
done

实验2:显示包含kernel的软件包安装时间

#! /bin/bash
for PACKAGE in $(rpm -qa | grep kernel)
do
  echo "$PACKAGE was installed on $(date -d @$(rpm -q --qf "%{INSTALLTIME}" $PACKAGE))"
done

注:date -d 可以将天数转换为标准时间

IF判断
echo $? 返回非0,测试不成功;返回为0,测试成功

两种做判断的方法

test 1 -gt 2; echo $?
[[ 1 -gt 2 ]]; echo $?
[ 1 -gt 2 ]; echo $?

在这里插入图片描述
单层IF语句

if <CONDITION> ; then
	COMMAND1
else
	COMMAND2
fi

多层嵌套IF

if <CONDITION> ; then
	COMMAND1
elsif <CONDITION2> ; then
		COMMAND2
	else
		COMMAND3
fi

实验:判断部分服务是否运行

#! /bin/bash
for SERVICE in sshd chronyd httpd
do
  systemctl is-active $SERVICE > /dev/null
  if [ $? -eq 0 ]; then
    echo "$SERVICE is running"
  else
    echo "$SERVICE is dead"
  fi
done

正则表达式
示例文档内容:
cat
caaat
coot
cot
cut
c2t
dog
concatenate
dogma
category
educated
boondoggle
vindication
chilidog

选项说明表达式匹配内容
.匹配任意单个字符c.tcat、cot、cut、c2t、concatenate、category、educated、vindication
*前面的项目匹配零次或多次ca*tcat、caaat、concatenate、category、educated、vindication
{n}前面的项目匹配n次ca{3}tcaaat

grep -v:包含
grep -e:扩展匹配,grep -e cat -e dog file1
grep -A 2 -B 3 cat file1:在file1中查找cat字符串,同时输出前三行(Before)和后两行(After)
grep -i:忽略大小写

Chapter Ⅱ 计划将来的任务

工作场景:修改防火墙前,使用定时任务恢复防火墙配置,在出问题时可以在一定时间后自动恢复

at定时任务(一次性)
systemctl status atd
直接使用at命令设置一次性执行的指令,交互式输入(ctrl+d退出)

at now + 5min     # 5分钟后执行
at 17:35               # 17:35执行

at -l  或者 atq     # 查看at的任务列表
at -c JOBID         # 查看JOBID的任务详细信息

atrm JOBID         # 删除JOBID的任务

crontab定时任务(周期性)
crontab [ -u user ] { -l | -r | -e }
-u user 是指设定指定 user 的时程表;如果不使用 -u user 的话,就是表示设定自己的时程表。

f1 f2 f3 f4 f5 program
f1表示分钟;f2表示小时;f3表示一个月份中的第几日;f4表示月份;f5表示一个星期中的第几天;program表示要执行的任务
当f1为时表示每分钟要执行program,f2为时表示每小时都要执行程序,其余类推
当f1为a-b时表示从第a分钟到第b分钟这段时间内要执行,f2为a-b时表示从a到b小时都要执行,其余类推
当f1为*/n时表示每n分钟个时间间隔执行一次,f2为*/n时表示每n小时个时间间隔执行一次,其余类推
当f1为a,b,c…时表示第a、b、c…分钟要执行,f2为a,b,c…时表示第a、b、c…个小时要执行,其余类推
在这里插入图片描述
• 只需要把相应的脚本放到/etc/cron.hourly、cron.daily、cron.weekly和cron.monthly的文件夹下,即可实现定时任务,而不需要编辑crontab配置文件
• /etc/cron.deny中配置的用户,不能使用定时任务(对root用户无效)

systemd提供的计时timer(周期性)
一般和其他服务结合使用,比如应用在清理临时文件
定时器systemd-tmpfiles-clean.timer:定义了多久运行一次定时器,以及定时到期后唤起哪个clean清理服务
清理服务systemd-tmpfiles:定义了清理的位置,以及多久未使用的文件会被清理
在这里插入图片描述
1、定时器
systemctl daemon-reload– 重新加载systemd的定时器配置文件(每个服务对应自己的timer定时器配置文件)

[root@localhost ~]# systemctl cat systemd-tmpfiles-clean.timer
# /usr/lib/systemd/system/systemd-tmpfiles-clean.timer
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.

[Unit]
Description=Daily Cleanup of Temporary Directories
Documentation=man:tmpfiles.d(5) man:systemd-tmpfiles(8)

[Timer]
OnBootSec=15min
OnUnitActiveSec=1d

OnBootSec:开机后多久开始计时
OnUnitActiveSec:定时的时间间隔

2、清理服务
systemd-tmpfiles --create /etc/tmpfiles.d/tmp.conf–指定创建清理服务
systemd-tmpfiles --clean /etc/tmpfiles.d/tmp.conf–按照配置文件定义开始清理

Chapter Ⅲ 调优系统性能

系统调优tuned
systemctl status tuned

tuned-adm list或tuned-adm profile # 列出可用的优化列表
tuned-adm recommand # 显示推荐的优化配置
tuned-adm profile xxx # 设置优化配置为xxx
tuned-adm active # 显示当前在用的优化配置
tuned-adm off # 关闭系统调优

调优配置文件

调优配置文件用途
balanced性能和节能间的折衷
desktop优化图形化界面的性能
latency-performance侧重于延迟
network-latency侧重于更低的网络延迟
network-throughput侧重于网络吞吐量
powersave省电,强制CPU尽可能使用最低的时钟频率
throughput-performance侧重于吞吐量
virtual-guest当系统在虚拟机上运行时,调优系统以获得最高性能
virtual-host当系统当虚拟机的主机时,调优系统以获得最高性能
[root@localhost ~]# tuned-adm profile
Available profiles:
- balanced                    - General non-specialized tuned profile
- desktop                     - Optimize for the desktop use-case
- hpc-compute                 - Optimize for HPC compute workloads
- latency-performance         - Optimize for deterministic performance at the cost of increased power consumption
- network-latency             - Optimize for deterministic performance at the cost of increased power consumption, focused on low latency network performance
- network-throughput          - Optimize for streaming network throughput, generally only necessary on older CPUs or 40G+ networks
- powersave                   - Optimize for low power consumption
- throughput-performance      - Broadly applicable tuning that provides excellent performance across a variety of common server workloads
- virtual-guest               - Optimize for running inside a virtual guest
- virtual-host                - Optimize for running KVM guests
Current active profile: virtual-guest

进程调优nice
进程调度程序针对不同的进程采用不同的调度策略,该策略为运行的进程指定相对优先级,这个优先级成为nice值
nice取值范围为-20(最高)到19(最低),默认值为0

  • nice值越高,表示优先级越低,该进程容易将其CPU使用量让给其他进程
  • nice值越低,表示优先级越高,该进程更加不倾向于让出CPU
  • 如果不存在资源争用,nice值没有意义

1、使用top查看运行进程的nice值
NI列显示进程的nice值,PR列显示其调度优先级(PR=NI+20)
在这里插入图片描述
2、使用ps查看进程的nice
ps axo pid,comm,nice,cls --sort=-nice
在这里插入图片描述
3、启动具有不同nice级别的进程
nice -n 数字 指令(默认为0)
在这里插入图片描述
4、更改现有进程的nice级别
renice -n 数字 PID

Chapter Ⅳ 使用ACL控制对文件的访问

单独对某个用户或组进行的文件访问权限控制

1、查看文件ACL
getfacl file
没有ACL的情况
在这里插入图片描述
有ACL的情况
在这里插入图片描述
2、查看目录ACL
getfacl directory
在这里插入图片描述
优先级
一般情况:所属者 > 所属组 > 其他(3个权限只有一个有效,判断一个权限满足后不会再判断后面的权限)
ACL情况:所属者 > ACL权限.用户 > 所属组 > ACL权限.组 > 其他(只要满足一个就不会往下判断)

3、修改ACL
setfacl -m u:devops:rwx,g:wheel:rw-,o::- 2.txt
也可以使用getfacl作为输入
getfacl 2.txt | setfacl --set-file=- 3.txt
其中–set-file选项可接受来自文件或stdin的输入,短划线字符(-)指定使用stdin

4、删除ACL
setfacl -x u:name,g:name file

5、默认权限
为了确保在目录中创建的文件和目录继承特定的ACL,需要在目录上使用默认ACL
setfacl -m d:u:name:rx directory

对父目录dir1设置默认权限,在里面新建子目录dir2,将继承父目录的默认权限
setfacl d:u:devops:- dir1

在这里插入图片描述
在这里插入图片描述
使用setfacl -k /home/student/dir1的默认权限后,在里面新建子目录dir22,将不再继承
在这里插入图片描述

Chapter Ⅴ 管理SELinux安全性

SELinux(Security Enhanced Linux):控制进程可以访问哪些文件或目录
三种模式 = { e n f o r c i n g :强制执行访问控制规则 p e r m i s s i v e :只监测发告警但不控制 d i s a b l e : S E L i n u x 关闭 三种模式=\left\{ \begin{matrix} enforcing:强制执行访问控制规则 \\ permissive:只监测发告警但不控制 \\ disable:SELinux关闭 \end{matrix} \right. 三种模式= enforcing:强制执行访问控制规则permissive:只监测发告警但不控制disableSELinux关闭

在这里插入图片描述

SELinux文件上下文
在这里插入图片描述
进程有个标签,文件也有标签,两者的标签匹配上了进程才可以访问文件
比如Apache的标签为httpd_t,/var/www/html的标签为httpd_sys_content_t,匹配上,所以apache进程可以访问该目录
在这里插入图片描述
查看进程的标签:ps auxZ或者 ps -ZC进程
查看文件或目录的标签:ls -Z或者ls -dZ
在这里插入图片描述
临时关闭SELinux

setenforce 0 关闭
setenforce 1 开启
getenforce 查询

永久关闭SELinux

/etc/selinux/config

临时修改标签

chcon -t 标签值 文件名

恢复默认值

restorecon -Rv 文件名

永久修改标签

semanage fcontext -at 标签值 文件名
semanage fcontext -l  查看
fcontext最常用的扩展正则表达式是(/.*)?,表示匹配目录及该目录中的所有内容

不同操作对标签值的影响

操作标签值的变化
创建继承父目录的标签值
复制继承复制到的目录的标签值
剪切保留原有标签值

实验:创建一个新目录,并将apache的访问目录指定这个目录,修改标签值查看curl访问结果
1、在/data下创建一个index.html,其标签继承了父目录的标签default_t
在这里插入图片描述
2、修改apache配置文件,将缺省目录指定在/data,并查询httpd进程的标签为httpd_t
在这里插入图片描述
3、在workstation上访问失败
在这里插入图片描述

4、修改/data/的SELinux属性
在这里插入图片描述
在这里插入图片描述
5、在workstation上再次访问,已经正常
在这里插入图片描述
SEBOOL值
部分系统自定义好的参数(比如FTP是否上传),SEBOOL和SELinux都允许的情况才可以
sebool可以自定义,但非常麻烦
查询:getsebool
临时关闭:setsebool virt_use_usb off
永久关闭:setsebool -P virt_use_usb off
查看sebool列表:semanage boolean -l

触发的SELinux日志
/var/log/messages,以sealert开头

Chapter Ⅵ 管理基本存储

1、分区方案
MBR:最多支持4个主分区,通过扩展分区最多可扩展到15个,大小最大为2TB
GPT:最多支持128个分区,大小最大为8ZB

2、parted分区命令

  • 向磁盘写入分区表
    写入MBR磁盘标签: parted /dev/sdb mklabel msdos
    写入GPT磁盘标签: parted /dev/sdb mklabel gpt

  • 创建分区
    parted /dev/sdb mkpart primary ext4 2048s 1000MB

    • primary:对于MBR分区,超过四个分区时,可以创建三个主分区和一个扩展分区,扩展分区上可以创建多个逻辑分区;对于GPT分区,指定分区的自定义名字即可
    • ext4:指示要在分区上创建的文件系统类型,并不会在分区上创建,仅仅作为指示
    • 2048s:起始值,s标识扇区,也可以使用MB、GB等,对于大多数磁盘而言,假设起始扇区为2048的倍数可以保证分区对齐,较为安全
    • 1000MB:分区的结束值

删除分区:parted /dev/sdb rm 2
查看分区:parted /dev/sdb print
打标记: parted /dev/sdb set 2 flag FLAGS

创建文件系统
mkfs.ext4
mkfs.xfs
临时挂载,用mount;永久挂载在/etc/fstab中修改(建议用UUID),挂载后,可以用mount /dev/sdb1的指令进行验证,通过systemctl daemon-reload加载fstab文件

lsblk -f可以查看文件系统,-p查看全路径
在这里插入图片描述
交换分区
在磁盘上划分出一部分空间,当内存不够用时,将此部分空间当作内存使用。
由于交换分区位于磁盘上,所以与RAM相比,交换会比较慢。虽然是用于增加系统RAM,但对于RAM不足以满足工作负载需求的问题,不应将交换空间视为可持续性的解决方案
在这里插入图片描述
将分区格式化成swap格式
mkswap /dev/sdb1

swapon /dev/sdb1在sdb1上开启交换分区
swapoff /dev/sdb1关闭sdb1的交换分区

swapon --show查看

/etc/fstab上永久生效
UUID swap swap defaults 0 0
注:第一个swap是挂载点,但交换分区没有挂载点,所以用swap字段占位

Chapter Ⅶ 管理逻辑卷

PV-VG-LV的关系
在这里插入图片描述
1、创建物理卷pvcreate
pvcreate会将物理卷分成若干固定大小的物理区块(PE),如4MB
pvdisplay
在这里插入图片描述
- PV NAME:映射到设备名称
- VG NAME:显示将PV分配到的卷组
- PV Size:显示PV的物理大小,包括任何不可用的空间
- PE Size:物理区块大小,是逻辑卷中可分配的最小大小
- Free PE:显示有多少PE单位可用于分配给新逻辑卷

2、创建卷组vgcreate
使用vgcreate将一个或多个物理卷PV结合为一个卷组VG
- VG Name:卷组的名称
- VG Size:存储池可用于逻辑卷分配的总大小
- Total PE:以PE单位表示的总大小
- Free PE/Size:显示VG中有多少空间可用于分配给新LV或扩展现有LV

3、创建逻辑卷lvcreate
使用lvcreate可根据VG中的可用物理块创建新的逻辑卷LV
lvcreate -n指定LV的名字
lvcreate -L指定LV的大小
lvcreate -l指定LV都少个PE

lvdisplay
在这里插入图片描述
- LV Path:显示逻辑卷的设备名称
- VG Name:显示从其分配LV的卷组
- LV Size:显示LV的总大小,使用文件系统工具确定可用空间喝数据存储的已用空间
- Current LE:显示此LV使用的逻辑区块数。LE通常映射到VG中的物理区块,并因此映射到物理卷

4、创建LV的文件系统
mkfs -t xfs /dev/mapper/vg01-lv01
mkfs -t xfs /dev/vg01/lv01
两种方式均可

逻辑卷的扩展
1、扩展卷组:vgextend
2、缩减卷组:pvreduce
3、扩展逻辑卷:lvextend

扩展完逻辑卷后,还需要调整文件系统大小
1、xfs:xfs_growfs /mnt/data(挂载点)
2、ext4: resize2fs /dev/vg01/lv01(逻辑卷)
注意:
xfs可扩,ext4可扩可缩

逻辑卷的迁移
pvmove 迁移PV 目的PV

Chapter Ⅷ 实施高级存储功能

Stratis
将物理磁盘划分成资源池,然后在上面做出多个文件系统,实现灵活管理
在这里插入图片描述

yum install stratisd stratis-cli

1、池
创建:stratis pool create test_pool /dev/sdb
增加:stratis pool add-data test_pool /dev/sdc
查看:stratis pool list

2、文件系统
创建:stratis filesystem create test_pool test_fs
查看:stratis filesystem list

VDO,虚拟数据优化器
两个内核模块:kvdo模块用于以透明的方式控制数据压缩;uds用于重复数据删除
在这里插入图片描述
安装vdo:yum install vdo kmod-kvdo
创建vdo卷:vdo create --name=vdo1 --device=/dev/vdd --vdoLogicalSize=50G
管理vdo卷:vdo start --name=vdo1
vdo stop --name=vdo1
vdo status --name=vdo1
查看统计信息:vdostats --human-readable

实验:通过向vdo卷内copy相同的文件副本,理解压缩和删除重复数据的概念
创建vdo_test卷后,压缩和删除重复的功能会自动开启
在这里插入图片描述
在这里插入图片描述
将/mnt/ 挂载到/dev/mapper/vdo_test上,并逐步将副本copy到此

初始状态下,vdo_test,总大小5G,已用3G(VDO保留),此时可用2G,压缩率99%
在这里插入图片描述
将副本1拷贝后,压缩率降至50%
在这里插入图片描述
将相同内容的副本2拷贝后,压缩率变为67%(因为副本1和副本2相同,所以vdo删除了重复的内容)
在这里插入图片描述
注:创建指定大小的文件,dd if=/dev/urandom of=/root/install.img bs=1M count=1024

永久挂载fstab
挂载选项 ,x-systemd.requires=vdo.service 意思为可延迟挂在文件系统,直到vdo.service启动为止

Chapter Ⅸ 访问网络附加存储

NFS,网络文件系统
- 服务端:共享目录
主配置文件:/etc/exports
自定义配置文件:/etc/exports.d/

/share_remote 172.25.250*(rw,sync,no_roo_squash) serverb(ro,root_squash)

/share_remote:共享的目录
172.25.250(rw,sync,no_root_squash)*:定义了172.25.250.*的访问者的权限
- no_root_squash:登录NFS主机使用分享目录的使用者,如果是root的话,那么对于这个分享的目录来说,他就具有root权限。极不安全,不建议使用
- root_squash:登录NFS主机使用分享目录的使用者如果是root时,那么这个使用者的权限会被压缩成为匿名使用者 nfsnobody,通常他的UDI和GID都会变成nobody这个系统账号的身份

使用exportfs -a使修改生效

防火墙修改:

firewall-cmd --permanent --add-service=nfs
firewall-cmd --permanent --add-service=rpc-bind
firewall-cmd --permanent --add-service=mountd

- 客户端:挂载目录
配置文件/etc/nfs.conf
在这里插入图片描述

nfsconf --get nfsd tcp
nfsconf --set nfsd tcp
nfsconf --unset nfsd tcp

将挂载目录挂载到nfs共享目录上
mount serverb:/shares /mnt/public(mount nfs服务端:共享目录 挂载目录)

showmount命令用于查询NFS服务器的相关信息(showmount -e serverb)
-e或–exports:显示NFS服务器的共享目录

autofs,自动挂载网络附加存储
根据需要(进入目录)自动挂载NFS共享,并将在不再使用NFS共享时自动卸载共享

yum install autofs

主配置文件/etc/auto.master
自定义配置文件/etc/auto.master.d/

以自定义配置文件为例,在auto.master.d文件夹下,必须以.autofs作为扩展名;

/rhel	/etc/auto.test

/rhel为间接自动挂载的基础目录,/etc/auto.test包含挂载详细信息

/etc/auto.test,test反应了映射关系

user1	-rw,sync	workstation:/rhel/user1

安全挂载点是/rhel/user1;rw表示具有读/写权限;sync表示写入操作期间服务器会立即同步;最后一部分是服务端的挂载点

验证:
在未进入挂载点时,df -h看不到挂载点,cd进入后激活autofs,df -h可以看到挂载点
在这里插入图片描述

Chapter Ⅹ 控制启动过程

- 重启和关机
poweroff:停止所有的服务,卸载所有文件系统,然后关闭系统
halt:用于停止系统,与poweroff不通的是不会关闭系统,而是让系统进入能安全手动关闭的状态
reboot:停止所有的服务,卸载所有文件系统,然后重启系统
shutdown:默认一分钟后关机
shutdown -c :取消关机

- SYSTEMD Target

Target用途
graphical.target图形化
multi-user.target命令行
rescue.target救援模式
emergency.target紧急模式

查看所有的Target:systemctl list-units --all --type=target
查看缺省的Target:systemctl get-default
设置缺省Target:systemctl set-default multi-user.target
切换至图形化:systemctl isolate grahpical.target

- 进入救援(rescue)模式
在启动内核界面,按e进入编辑模式,然后在启动参数处添加 systemd.unit=rescue.target,并按Ctrl+x启动
在这里插入图片描述
进入后输入root口令,通过mount查看,可以发现/根目录是ro权限
通过mount -o remount,rw /改为rw权限
在这里插入图片描述

- 进入紧急(emergence)模式
与救援模式类似,参数为systemd.unit=emergence.target;进入系统后,用mount查询,发现/根目录为只读权限,无法进行应急操作,可以下面的指令改为读写权限

mount -o remount,rw /

- 重置root密码
1、在启动参数上,末尾添加rd.break,按Ctrl+x启动

2、/sysroot为启动的临时根目录,以读写形式重新挂载该目录
mount -o remount,rw /sysroot
在这里插入图片描述
3、切换为chroot存放位置,其中/sysroot被视为文件系统树的根
chroot /sysroot

4、设置root密码
passwd root

5、将系统配置为在启动后自动执行完整SELinux重新标记
touch /.autorelabel

6、继续启动系统
键入两次exit或者按两次Ctrl+d
在这里插入图片描述

Chapter Ⅺ 管理网络安全

在CentOS 7及之前版本中,iptables也提供了类似firewalld的daemon,用户可以选择iptables或firewalld daemon其一。CentOS 8已弃用iptables,只用nftables。
nftables和iptables负责的应该属于数据包过滤框架,iptables实际由iptables、ip6tables、arptables和ebtables构成。
在这里插入图片描述
▪ 查看所有zone和默认zone
firewall-cmd --get-default-zone

[root@localhost ~]# firewall-cmd --get-default-zone
public

firewall-cmd --get-zones

[root@localhost ~]# firewall-cmd --get-zones
block dmz drop external home internal public trusted work

firewalld区域默认配置

区域名称默认配置
trusted允许所有流入流量
home续费于传出流量相关,或与ssh、mdns、ipp-client、samba-client或dhcpv6-client预定义服务匹配,否则拒绝传入流量
internal除非与传出流量相关,或与ssh、mdns、ipp-client、samba-client或dhcpv6-client预定义服务匹配,否则拒绝传入流量(一开始与home区域相同)
work除非与传出流量相关,或与ssh、ipp-client或dhcpv6-client预定义服务匹配,否则拒绝传入流量
public除非与传出流量相关,或与ssh或dhcpv6-client预定义服务匹配,否则拒绝传入流量
external除非与传出流量相关,或与ssh预定义服务匹配,否则拒绝传入流量。通过此区域转发的IPv4传出流量将进行伪装,以使其看起来像是来自传出完了过接口的IPv4地址
dmz除非与传出流量相关,或与ssh预定义服务匹配,否则拒绝传入流量
block除非与传出流量相关,否则拒绝所有传入流量
drop除非与传出流量相关,否则拒绝所有丢弃流量(甚至不产生包含ICMP错误的响应)

▪ 添加策略
firewall-cmd --permanent --add-port=9090/tcp

[root@localhost ~]# firewall-cmd --permanent --add-
--add-forward-port=                --add-lockdown-whitelist-command=  --add-masquerade                   --add-service=
--add-icmp-block=                  --add-lockdown-whitelist-context=  --add-port=                        --add-source=
--add-icmp-block-inversion         --add-lockdown-whitelist-uid=      --add-protocol=                    --add-source-port=
--add-interface=                   --add-lockdown-whitelist-user=     --add-rich-rule=

▪ 重新加载
firewall-cmd --reload

// 先移除默认开启的没有访问限制的ssh服务
firewall-cmd --permanent --remove-service=ssh
// 添加复杂规则,只允许指定IP段访问22端口
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="22" accept'

Chapter Ⅻ Podman

容器发展历史

  • LXC(Linux containers):最早的容器技术,Google 公司
  • docker:以 LXC 为基础,开源、最为流行的容器技术,docker 公司(初创公司)
  • rkt(Rocket):CoreOS公司主导,得到了Redhat、Google、Vmware等公司的支持
  • Podman:开源容器技术,区别于 docker,进程化和非 root 管理,Redhat 公司
  • Kubernetes:对容器的管理技术,通过标准化的 CRI 接口对容器进行管理,目前已经宣布不再支持 docker;Google 公司
  • OpenShift:管理和编排 Kubernetes ,Redhat 公司
    在这里插入图片描述
    在这里插入图片描述
    容器化与虚拟化的区别
    容器和虚拟机与硬件和底层操作系统交互方式不同
    ▪ 虚拟化:
    • 可以在单一硬件平台运行多操作系统
    • 使用 hypervisor 将硬件拆分成多个虚拟硬件,允许多个操作系统并行运行
    • 需要完整的操作系统来支持应用运行
    • 隔离性更好
      ▪ 容器化:
    • 在操作系统上直接运行,容器之间分享硬件和操作资源,容器中应用轻量化和快速并行运行
    • 共享操作系统内核,将容器化的应用程序进程与系统的其余部分隔离,并使用与该内核兼容的任何软件
    • 比虚拟化要求更少的硬件资源,可以快速启动和停止,减少存储需求;可快速(上千台)批量秒级部署
    • 代码与系统分离,升级方便
    • 适用于测试/迭代上线/版本演进
    • 网络互通问题存在问题(上千台容器共有网络的分配;上千台容器间的网络互访 等)
      在这里插入图片描述
      容器核心技术
    • Control Groups(cgroups):资源管理
    • NameSpace:进程隔离
    • SElinux和Seccomp(Secure Computing mode)加强安全边界

容器利用 NameSpace 为资源(如进程、网络通信和卷)提供独立的、隔离的环境;在容器中运行的进程与主机上的所有其他进程是隔离的
在这里插入图片描述
容器核心要素

  • images(映像):提供已经封装的文件,容器都是从 images 复制而来
    • 自己做
    • 官方提供:registry.hub.docker.com
    • 第三方:redhat、阿里等
  • Tag(标记):用于区分 image 版本,如果 image 名称中不含有 tag,将默认使用 latest tag

registry_name/user_name/image_name:tag

  • registry_name:是存储 image 的 registry 名称,一般是registry 的域名
  • user_name:是 image 所属的用户或组织
  • image_name:必须在用户 userspace 中唯一

Podman
含义:Pod Manager
三大组件
在这里插入图片描述

配置步骤
1、安装 container 软件包

yum  module  install  container-tools

2、修改配置文件

vim /etc/containers/registries.conf
# 使用本地库
[registries.search]
registries = [' registry.access.redhat.com', ' registry.redhat.io']

# 使用远程库,insecure表示不做安全检查
[registries.search]
registries = ['workstation.lab.example.com:5000']
[registries.insecure]
registries = ['workstation.lab.example.com:5000']

3、查看库
本地库:podman images
远程库:podman search workstation.lab.example.com:5000/

4、下载 PULL 容器映像 images
使用 Podman pull 从 registry 中下载 images,应始终使用完整的 image 名称
podman pull 命令从 registry 中提取指定的 image 并保存到本地
下载后可以通过 podman images 查看下载到本地 image
在这里插入图片描述
也可以通过 podman rmi IMAGE-ID 删除下载后的映像
在这里插入图片描述
5、运行容器

podman run --privileged -d  --name registry  -p 5000:5000 -v /var/lib/registry/:/var/lib/registry 

主要参数列表

参数说明
–privilegeGive extended privileges to container
-d后台运行
Run container in background and print container ID
-it将终端分配给容器,并允许向其发送键盘指令
–name容器名称
-p本地端口:容器端口
Publish a container’s port, or a range of ports, to the host (default [])
-v本地目录:容器目录
Bind mount a volume into the container (default [])
-e传递环境变量
Set environment variables in container

5、停止/删除容器
podman stop 容器id
podman rm 容器id

6、查看容器运行情况
查看所有容器:podman ps -a
查看运行容器:podman ps
在这里插入图片描述
容器随系统启动
▪ 当数据库或 web 服务器等服务部署为容器时,通常希望这些容器与服务器一起自启动
▪ 通过为无根(rootless)容器创建 systemd user unit 文件,可使 systemctl 命令管理,类似常规服务
▪ 如果容器以 rootless 模式运行,可以用非 root 账户管理这些服务,提高安全性
▪ 要对许多基于容器的应用程序和服务进行更复杂的伸缩和编排,可使用基于 Kubernetes 的企业编排平台,如 RedHat Openshift Container Platform(少量容器的不需要扩展的小型部署可以使用 systemd unit管理)

配置步骤:
1、定义 systemd user service
创建 ~/.config/systemd/user/ 目录来存储 unit 文件
2、创建 unit 文件
podman generate --name web --files --new
–name container_name:指定容器名称,用作模板来生成 unit 文件;生成文件名称为 containers-container_name.service
–files:指示 Podman 在当前目录中生成 unit 文件;没有这个选项,Podman 将在标准输出中显示该文件
–new:指示 Podman 配置 systemd 服务,以便在服务启动时创建容器,并在服务停止时删除。在这种模式下,容器是临时的,通过需要持久存储来保存数据。没有 --new 选项,Podman 配置服务启动和停止现有的容器,而不删除
3、使用 systemd 启动和停止容器
systemd监视容器状态,并在它们失败时重新启动它们,不要使用 podman 命令来启动或停止这些容器,否则会干扰systemd监视

systemctl --user start container-web
systemctl --user stop container-web
systemctl --user status container-web

4、激活用户实例
激活的用户实例 systemd user unit,只有在用户登录会话后,才会运行。
如果要让用户实例 systemd user unit 随系统自动启动,需要再执行命令:

loginctl enable-linger

配置系统和用户服务

Storing custom unit filesSystem services/etc/systemd/system/unit.service
User services~/.config/systemd/user/unit.service
Reloading unit filesSystem services# systemctl daemon-reload
User services$ systemctl --user daemon-reload
Starting and stopping a serviceSystem services# systemctl start UNIT
# systemctl stop UNIT
User services$ systemctl --user start UNIT
$ systemctl --user stop UNIT
Starting a service when the machine startsSystem services# systemctl enable UNIT
User services$ loginctl enable-linger
$ systemctl --user enable UNIT

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/210886.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【鸿蒙应用ArkTS开发系列】-自定义底部菜单列表弹窗

文章目录 前言创建Demo工程创建dialog 文件夹创建ListMenu 接口创建自定义弹窗 ListMenuDialog使用自定义弹窗 打包测试效果演示默认效果菜单带图标效果设置文本颜色效果不同文本颜色效果无标题效果 前言 上一篇文章中我们实现了选择图片、选择文件、拍照的功能 。 链接在这里…

【网络协议】聊聊网络ReadTimeout和ConnectTimeout

在实际的开发中&#xff0c;网络超时是一个比较常见的问题&#xff0c;比如说针对支付系统&#xff0c;超时就需要进行和三方人员进行核对订单状态&#xff0c;是否人工介入处理。 但其实在设计网络框架的时候&#xff0c;一般都有两个超时参数 连接超时参数 ConnectTimeout&am…

阻抗匹配电阻原理及其应用

一、匹配电阻的作用 1、阻抗匹配 当信号频率比较高&#xff0c;上升沿比较陡时&#xff0c;电子信号经过阻抗不同的地方时也会产设反射。 PCB的单线阻抗一般会设计成50Ω&#xff0c;发射端阻抗一般是17到40&#xff0c;而接收端一般是MOS管的输入&#xff0c;阻抗是比较大的…

Python 高性能 web 框架 - FastApi 全面指南

原文&#xff1a;Python 高性能 web 框架 - FastApi 全面指南 - 知乎 一、简介 FastAPI 是一个用于构建 API 的现代、快速&#xff08;高性能&#xff09;的 web 框架&#xff0c;使用 Python 3.6 并基于标准的 Python 类型提示。 它具有如下这些优点&#xff1a; 快速&…

shell编程系列(11)-使用grep查找文本

文章目录 前言grep的使用根据关键字查找反向查找 结语 前言 grep命令也是我们在日常使用linux&#xff0c;编写shell脚本中会用到的一个高频命令&#xff0c;grep主要是帮助我们查找我们想要的内容&#xff0c;类似于我们在office word里面的 Ctrl f 查找功能&#xff0c;但是…

LabVIEW在不同操作系统上使VI、可执行文件或安装程序

LabVIEW在不同操作系统上使VI、可执行文件或安装程序 LabVIEW可以在多个操作系统上运行&#xff0c;主要支持以下几种操作系统&#xff1a; Windows&#xff1a; LabVIEW在各个版本的Windows操作系统上都能运行&#xff0c;包括Windows 7、Windows 8和Windows10。LabVIEW为Wi…

docker容器中创建非root用户

简介 用 docker 也有一段时间了&#xff0c;一直在 docker 容器中使用 root 用户肆意操作。直到部署 stable diffusion webui 我才发现无法使用 root 用户运行它&#xff0c;于是才幡然醒悟&#xff1a;是时候搞个非 root 用户了。 我使用的 docker 镜像文件是 centos:centos…

使用系统ProgressBar实现三色进度条

使用系统ProgressBar实现如图三色进度条&#xff1a; //布局中<ProgressBarandroid:layout_width"0dp"android:layout_height"8dp"android:layout_marginLeft"16dp"app:layout_constraintBottom_toBottomOf"id/photo"app:layout_c…

解决报错:error: (-215:Assertion failed) inv_scale_x > 0 in function ‘cv::resize‘

需求背景 欲使用opencv的resize函数将图像沿着纵轴放大一倍&#xff0c;即原来的图像大小为(384, 512), 现在需要将图像放大为(768, 512)。 源码 import cv2 import numpy as np# 生成初始图像 img np.zeros((384, 512), dtypenp.uint8) img[172:212, 32:-32] 255 H, W …

Python爬虫教程27:秀啊!用Pandas 也能爬虫??

说到爬虫&#xff0c;大家可能都知道requests、re、scrapy、selenium等等一些工具库。虽然它低调&#xff0c;但功能非常强大&#xff0c;用于抓取Table表格型数据时&#xff0c;简直是个神器&#xff0c;没有必要去F12研究HTML页面结构甚至写正则表达式解析字段。 #我的Pytho…

Python教程78:聊聊exec和eval()函数,有什么用法区别

exec 和 eval 是 Python 中的两个内置函数&#xff0c;它们都可以执行Python代码&#xff0c;但它们的使用方式和目的有所不同。 1.exec()函数用于执行动态的 Python 代码&#xff0c;你可以使用exec来执行存储在字符串或对象代码中的 Python 代码。exec 不会返回任何结果&…

Python遥感开发之批量镶嵌

Python遥感开发之批量镶嵌 1.ArcGis镶嵌2.Arcpy实现镶嵌2.1 Arcpy实现单个镶嵌2.2 Arcpy实现批量镶嵌 3.GDAL实现镶嵌 前言&#xff1a;主要介绍了遥感数据的镶嵌&#xff0c;其中包括使用ArcGis如何完成镶嵌&#xff0c;如何使用Arcpy和GDAL完成镶嵌。 1.ArcGis镶嵌 是ArcGis…

记一次若依二开的简单流程

记一次若依二开的简单流程 前言: 搞Java后端的应该都知道若依框架&#xff0c;是一个十分强大且功能齐全的开源的快速开发平台&#xff0c;且毫无保留给个人及企业免费使用。很多中小型公司会直接在该系统上进行二次开发使用。本文记录一次使用若依二开零编码的简单实现&#…

Fiddler抓包工具之fiddler设置断点和简单的并发测试

断点有两种方式&#xff1a; 1、全局断点 2、局部断点 全局断点 全局断点的特点是&#xff1a;不能针对一个请求&#xff0c;是给所有抓到的请求打断点 全局断点如何设置&#xff1a; 1、快速设置断点&#xff1a;直接点击底部状态栏断点处 &#xff1b;点击第一下是请求…

vcruntime140.dll无法继续执行代码五种解决方法修复教程

在电脑使用过程中&#xff0c;我们可能会遇到一些常见的错误提示&#xff0c;其中之一就是“vcruntime140.dll丢失”。这个错误通常会导致某些应用程序无法正常运行。本文将介绍vcruntime140.dll丢失对电脑的影响以及如何修复这个问题&#xff0c;并提供一些预防措施&#xff0…

Ubuntu系统CLion安装与Ubuntu下菜单启动图标设置

Ubuntu系统CLion安装 pycharm 同理。 参考官网安装过程&#xff1a;官网安装过程 下载linux tar.gz包 # 解压 sudo tar -xzvf CLion-*.tar.gz -C /opt/ sh /opt/clion-*/bin/clion.sh其中第二个命令是启动CLion命令 clion安装完以后&#xff0c;不会在桌面或者菜单栏建立图…

半监督语义分割综述

paper link&#xff1a;https://arxiv.org/pdf/2302.09899.pdf 1. Introduction 图像分割是最古老、研究最广泛的计算机视觉 (CV) 问题之一。图像分割是指将图像划分为不同的非重叠区域&#xff0c;并将相应的标签分配给图像中的每个像素&#xff0c;最终获得ROI区域位置及其类…

Linux - 动态库的加载 和 重谈进程地址空间 - vscode 当中的 Remote - SSH 插件

推书&#xff1a;《现代操作系统》《操作系统--精髓于设计原理》《UNIX环境高级编程》 目录 前言 程序的加载 程序没有加载之前的地址&#xff08;此时还是程序&#xff09; 程序被加载到内存之后&#xff08;此时是进程&#xff09; 动态库的地址 静态库的不加载&#xff…

海外之路,英语相助:我的雅思考试之旅(成功以此申请到了港科大硕士)

文章目录 背景注册过程 雅思考试之旅全程记录2023年2月14日 - 报名补充2023年2月15日 - 模拟考试2023年2月16日 - 在线考试失利2023年2月20日 - 线下考试再战成功2023年2月23日 - 成绩出来了 考试经验寄送成绩问题请求额外的IELTS成绩寄送 结语 背景 在新加坡Shopee工作了两年…

Linux 内核源码各版本下载

下载地址&#xff1a; kernel/git/stable/linux.git - Linux kernel stable treehttps://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/refs/ 1. Linux 内核的基本概念&#xff1a; 内核是什么&#xff1f; 内核是操作系统的核心部分&#xff0c;负责管理系统…