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

Chapter Ⅰ 提高命令行生产率

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

for循环

for VAR in LIST
doCOMMAND1COMMAND2
done

实验1:显示host1-5

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

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

#! /bin/bash
for PACKAGE in $(rpm -qa | grep kernel)
doecho "$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> ; thenCOMMAND1
elseCOMMAND2
fi

多层嵌套IF

if <CONDITION> ; thenCOMMAND1
elsif <CONDITION2> ; thenCOMMAND2elseCOMMAND3
fi

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

#! /bin/bash
for SERVICE in sshd chronyd httpd
dosystemctl is-active $SERVICE > /dev/nullif [ $? -eq 0 ]; thenecho "$SERVICE is running"elseecho "$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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CAN总线学习(STM32的CAN寄存器使用)(笔记二)

CAN总线基础基础知识的文章&#xff1a;CAN总线学习&#xff08;CAN总线基础知识&#xff09;&#xff08;笔记一&#xff09;-CSDN博客 在前面CAN总线基础知识和报文中介绍的是报文内容是比较全面的&#xff0c;STM32在CAN协议的基础上做了一些简单的简化&#xff0c;例如下图…

softmax实现

import matplotlib.pyplot as plt import torch from IPython import display from d2l import torch as d2lbatch_size 256 train_iter,test_iter d2l.load_data_fashion_mnist(batch_size) test_iter.num_workers 0 train_iter.num_workers 0 num_inputs 784 # 将图片…

【MySQL】-日志系统

一、背景介绍 MySQL中提供了各种各样的日志&#xff0c;每一个日志在不同的阶段有不同的作用&#xff0c;对数据的一致性和正确性得到保障&#xff0c;为数据恢复也提供至关重要的作用&#xff0c;那今天我们一起来讨论讨论MySQL中的各个日志 二、正文 binlog&#xff1a;…

NIO--07--Java lO模型详解

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 何为 IO?先从计算机结构的角度来解读一下I/o.再从应用程序的角度来解读一下I/O 阻塞/非阻塞/同步/异步IO阻塞IO非阻塞IO异步IO举例 Java中3种常见的IO模型BIO (Blo…

Redis缓存的使用

什么是缓存 缓存就是数据交换的缓冲区&#xff0c;是存储数据的临时地方&#xff0c;一般读写性能较高。 缓存的作用&#xff1a; 降低后端负载提高读写效率&#xff0c;降低响应时间 缓存的成本&#xff1a; 数据一致性成本代码维护成本运维成本 Redis特点 键值型数据库…

C语言之结构体

一.前言引入. 我们知道在C语言中有内置类型&#xff0c;如&#xff1a;整型&#xff0c;浮点型等。但是只有这些内置类 型还是不够的&#xff0c;假设我想描述学⽣&#xff0c;描述⼀本书&#xff0c;这时单⼀的内置类型是不⾏的。描述⼀个学⽣需要名字、年龄、学号、⾝⾼、体…

Spark经典案例分享

Spark经典案例 链接操作案例二次排序案例 链接操作案例 案例需求 数据介绍 代码如下&#xff1a; package base.charpter7import org.apache.hadoop.conf.Configuration import org.apache.hadoop.fs.{FileSystem, Path} import org.apache.spark.SparkContext import org.a…

四、Zookeeper节点类型

目录 1、临时节点 2、永久节点 Znode有两种,分别为临时节点和永久节点。 节点的类型在创建时即被确定,并且不能改变。 1、临时节点 临时节点的生命周期依赖于创建它们的会话。一旦会话结束,临时节点将被自动删除,

OpenCV-Python:计算机视觉介绍

目录 1.背景 2.计算机视觉发展历史 3.计算机视觉主要任务 4.计算机视觉应用场景 5.知识笔记 1.背景 OpenCV是计算机视觉的一个框架&#xff0c;想要学习OpenCV&#xff0c;需要对计算机视觉有一个大致的了解。计算机视觉是指通过计算机技术和算法来模拟人类视觉系统的能力…

Redis高效缓存:加速应用性能的利器

目录 引言 1. Redis概述 1.1 什么是Redis&#xff1f; 1.2 Redis的特点 2. Redis在缓存中的应用 2.1 缓存的重要性 2.2 Redis作为缓存的优势 2.3 缓存使用场景 3. Redis在实时应用中的应用 3.1 实时数据处理的挑战 3.2 Redis的实时数据处理优势 3.3 实时应用中的Red…

mediapipe+opencv实现保存图像中的人脸,抹去其他信息

mediapipeopencv MediaPipe本身不提供图像处理功能&#xff0c;它主要用于检测和跟踪人脸、手势、姿势等。如果您想要从图像中仅提取人脸主要信息并去除其他信息. # codingutf-8 """project: teatAuthor&#xff1a;念卿 刘file&#xff1a; test.pydate&…

Kubernetes学习笔记-Part.09 K8s集群构建

目录 Part.01 Kubernets与docker Part.02 Docker版本 Part.03 Kubernetes原理 Part.04 资源规划 Part.05 基础环境准备 Part.06 Docker安装 Part.07 Harbor搭建 Part.08 K8s环境安装 Part.09 K8s集群构建 Part.10 容器回退 第九章 K8s集群构建 9.1.集群初始化 集群初始化是首…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《余电上网/制氢方式下微电网系统全生命周期经济性评估》

该标题涉及到对微电网系统的全生命周期经济性进行评估&#xff0c;其重点关注两种运营方式&#xff1a;余电上网和制氢。以下是对标题的解读&#xff1a; 微电网系统&#xff1a; 微电网是指一种小规模的电力系统&#xff0c;通常包括分布式能源资源&#xff08;如太阳能、风能…

ES通过抽样agg聚合性能提升3-5倍

一直以来&#xff0c;es的agg聚合分析性能都比较差&#xff08;对应sql的 group by&#xff09;。特别是在超多数据中做聚合&#xff0c;在搜索的条件命中特别多结果的情况下&#xff0c;聚合分析会非常非常的慢。 一个聚合条件&#xff1a;聚合分析请求的时间 search time a…

部署springboot项目到GKE(Google Kubernetes Engine)

GKE是 Google Cloud Platform 提供的托管 Kubernetes 服务&#xff0c;允许用户在 Google 的基础设施上部署、管理和扩展容器。本文介绍如何部署一个简单的springboot项目到GKE. 本文使用podman. 如果你用的是docker, 只需要把本文中所有命令中的podman替换成docker即可 非H…

java+springboot物资连锁仓库经营商业管理系统+jsp

主要任务&#xff1a;通过网络搜集与本课题相关的素材资料&#xff0c;认真分析连锁经营商业管理系统的可行性和要实现的功能&#xff0c;做好需求分析&#xff0c;确定该系统的主要功能模块&#xff0c;依据数据库设计的原则对数据库进行设计。最后通过编码实现本系统功能并测…

Linux周期任务

我自己博客网站里的文章 Linux周期任务&#xff1a;at和crontab 每个人或多或少都有一些约会或者是工作&#xff0c;有的工作是长期周期性的&#xff0c; 例如&#xff1a; 每个月一次的工作报告每周一次的午餐会报每天需要的打卡…… 有的工作则是一次性临时的&#xff0…

Prometheus+Grafana搭建日志采集

介绍 一、什么是日志数据采集 日志数据采集是指通过各种手段获取应用程序运行时产生的各类日志信息&#xff0c;并将这些信息存储到特定的地方&#xff0c;以便后续分析和使用。通常情况下&#xff0c;这些日志信息包括系统运行状态、错误信息、用户操作记录等等。通过对这些…

牛客算法题 【HJ97 记负均正】 golang实现

题目 HJ97 记负均正 描述 首先输入要输入的整数个数n&#xff0c;然后输入n个整数。输出为n个整数中负数的个数&#xff0c;和所有正整数的平均值&#xff0c;结果保留一位小数。 0即不是正整数&#xff0c;也不是负数&#xff0c;不计入计算。如果没有正数&#xff0c;则平均…