c05-常用命令总结¶
自我介绍¶
你好面试官,我叫xxx 上家公司在天翼云工作 主要工作是资源池建设 交付部署运维 编写自动化部署脚本 编写制定集成规范,部署流程等相关的工作
本人擅长 自动化 云计算 写自动化脚本 写总结 写文档 写流程 写规范 写方案 画流程图 架构图 做企业技术培训 平时喜欢做技术分享
dell 惠普 h3c 华为 烽火
服务器优化 配网 升级 巡检 脚本 kvm虚拟机创建脚本
使用ansible编写云平台 openstack 组件部署脚本
902190089
linux¶
常用命令类¶
cd
mkdir
touch
lscpu
free -h
ip addr
lsblk
find
三剑客命令¶
1. grep 命令¶
功能:文本搜索工具,支持正则表达式匹配。
常用参数
参数 | 说明 | 示例 |
---|---|---|
-i |
忽略大小写 | grep -i "error" log.txt |
-v |
反向匹配(显示不包含模式的行) | grep -v "success" data.txt |
-n |
显示匹配行的行号 | grep -n "root" /etc/passwd |
-r |
递归搜索目录 | grep -r "TODO" ./src |
-E |
使用扩展正则表达式 | `grep -E "hello |
-w |
完全匹配单词 | grep -w "apple" fruits.txt |
-A 2 |
显示匹配行及其后2行 | grep -A 2 "error" log.txt |
-B 2 |
显示匹配行及其前2行 | grep -B 2 "start" demo.txt |
-C 2 |
显示匹配行前后各2行 | grep -C 2 "end" data.txt |
-l |
仅显示包含匹配的文件名 | grep -rl "pattern" ./project |
-c |
统计匹配行数 | grep -c "error" *.log |
2. sed 命令¶
功能:流式文本编辑器,支持替换、删除、插入等操作。
常用参数
参数 | 说明 | 示例 |
---|---|---|
-i |
直接修改文件(GNU) | sed -i 's/old/new/g' file.txt |
-i.bak |
修改文件并备份(BSD/macOS) | sed -i.bak 's/old/new/g' file.txt |
-e |
允许多个编辑命令 | sed -e 's/a/b/' -e 's/c/d/' file.txt |
-n |
抑制自动打印模式空间 | sed -n '2,5p' file.txt |
s/old/new/ |
替换命令,g 表示全局替换 |
sed 's/hello/HELLO/g' demo.txt |
d |
删除行 | sed '3d' file.txt (删除第3行) |
a |
在行后追加文本 | sed '2a\New Line' file.txt |
i |
在行前插入文本 | sed '2i\Inserted Line' file.txt |
y/old/new/ |
字符转换(如大小写) | sed 'y/abcdef/ABCDEF/' data.txt |
3. awk 命令¶
功能:文本分析工具,按列处理数据。
常用参数
参数 | 说明 | 示例 |
---|---|---|
-F |
指定字段分隔符(默认为空格) | awk -F',' '{print $2}' csv.txt |
-v |
定义变量 | awk -v var=1 '{print var, $1}' data.txt |
$0 |
当前行内容 | awk '{print $0}' file.txt |
$1 , $2 ... |
第1、2...列 | awk '{print $1, $3}' data.txt |
NR |
当前行号 | awk 'NR>5 {print}' file.txt (从第6行开始) |
NF |
当前行字段数 | awk '{print NF, $NF}' file.txt |
BEGIN |
处理前执行的动作 | awk 'BEGIN {print "Start"} {print $1}' |
END |
处理后执行的动作 | awk '{sum+=$1} END {print sum}' data.txt |
4. find命令¶
1)-type表示查找类型,f表示文件,d表示目录
2)-name精确查找文件或目录名称
3)-mtime根据修改时间查找文件或目录 +7表示7天以前 -7表示七天以内 第七天7表示
4)-size根据文件大小查找,+100k +100M
5)find命令后面加上管道与xargs命令配合
6)xargs -i mv {} /tmp 将find查找的内容通过xargs -i参数放进{}这个框里
7)xargs mv -t /tmp mv的参数-t 可以反转源路径和目标路径
正则表达式¶
常用正则
字符 | 描述 |
---|---|
^ | ^word表示搜索以word开头的内容 |
$ | word$表示搜索以word结尾的内容 |
拓展正则
字符 | 描述 |
---|---|
+ | 重复一个或多个字符(*是0个或个多) |
| | 同时过滤多个关键字字符 |
? | 重复0个或1个前面的字符 |
() | 找出"用户组"字符串 |
常见符号与通配符¶
[常见通配符]
通配符 | 解释说明 |
---|---|
* | 代表任意字符(0个或多个) |
? | 代表任意一个字符 |
[] | 匹配中括号中的任意一个字符 |
[常见符号]
符号 | 解释说明 |
---|---|
; | 连续两个命令的分隔符(前面的命令执行错误,后面的命令也能正常执行) |
# | 用来注释文件内容信息 |
| | 管道符号,将前面命令的结果,通过管道传送给后面的命令 |
~ | 用户的家目录 |
- | 上一次目录 |
. | 当前目录 |
.. | 上一级目录 |
$ | (1)引用系统变量使用例如$OLDPWD (2)表示普通用户提示符 |
/ | (1)系统根目录 (2)路径的分隔符,用来分割路径 |
! | (1)取反 (2)vi中表示强制退出 (3)!c 表示在历史记录中调出最近一次以c开头的命令 |
> | > 或1> **输出重定向:**把前面的输出的东西输入到后面的文件中,但是会清空原来文件的内容。 |
>> | >>或1>> **追加重定向:**把前面输出的东西追加到后面的文件中,不会清空原有的文件内容 |
< | <或<0 输入重定向:用于改变命令的输入,后面指定输入内容,前面跟文件名。(箭头的方向就是数据的流向) |
<< | <<或<<0 追加输入重定向:后跟字符串,用来表示“输入结束”,也可以使用Ctrl+d键结束 |
2> | 错误重定向:把错误信息输入到后面的文件中,但是会清空文件原有的内容,并输入错误提示信息到文件内容中。 |
2>> | 错误追加重定向:把错误的信息追加到文件内容的最后一行,不会清空原来的文件内容。 |
' ' | 单引号,原样输出内容,所见即所得 |
" " | 双引号,会将解析的变量输出 |
|
反引号,会将命令的执行结果输出 |
{ } | 中间表示命令块,或创建数字序列 |
&& | 前一个命令执行成功后,才继续执行下一个命令。例:p1 && p2 ;若p1执行成功后,才执行p2,反之,不执行p2; |
|| | 前一个命令执行失败后,才继续执行下一个命令。例:p1 || p2 ;若p1执行成功后,不执行p2,反之,才执行p2; |
网络类命令¶
tcpdump¶
tcpdump 是一款用于Unix/Linux系统的命令行网络数据包捕获与分析工具,支持基于协议、主机、端口等条件的过滤,常用命令如 tcpdump -i eth0 host 192.168.1.1 and port 80 -c 10 -w output.pcap 可抓取指定IP和端口的数据包并保存为文件。
基础命令与参数
指定网卡与基础抓包。
tcpdump -i eth0:监听eth0网卡的所有流量(需root权限)。
tcpdump -D:列出系统所有可用网卡。
过滤条件。
IP过滤:
tcpdump host 192.168.1.1:抓取与指定IP相关的所有流量。
tcpdump src 192.168.1.1 或 tcpdump dst 192.168.1.1:按源/目标IP过滤。
端口过滤:
tcpdump port 80:抓取HTTP流量。
tcpdump src port 22:抓取源端口为SSH的流量。
协议过滤:
tcpdump icmp:仅抓取ICMP协议包(如ping请求)。
逻辑组合与高级过滤。
使用 and/or/not 组合条件,例如:
tcpdump "host 192.168.1.1 and (port 80 or port 443)"。
BPF语法支持更复杂过滤,如 tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-ack) != 0' 抓取TCP握手包。
输出控制与保存
限制抓包数量。
tcpdump -c 100:抓取100个包后自动停止。
保存与分析。
tcpdump -w output.pcap:保存原始数据供Wireshark分析。
tcpdump -r output.pcap:读取已保存的抓包文件。
输出格式。
-n:禁用DNS解析,显示IP而非域名。
-vvv:输出更详细的协议信息。
高级用法示例
抓取特定服务的流量。
HTTP请求:tcpdump -i eth0 -nn "tcp port 80 and (((ip^2:2^ - ((ip&0xf)<<2)) - ((tcp&0xf0)>>2)) != 0)"。
排除干扰数据。
tcpdump not port 22:过滤SSH流量。
实时显示MAC地址。
tcpdump -e:输出包含MAC地址的链路层信息。
DNS系统架构与解析原理¶
参考答案:
TCP/IP的3次握手和四次断开原理¶
参考答案:
ISO网络模型¶
ISO参考模型:物理层/数据链路层/网络层/传输层/会话层/表示层/应用层
各层功能详解
物理层(Physical Layer)。
负责比特流在物理介质(如电缆、光纤)上的传输,定义电压、接口等电气特性。典型设备包括集线器和中继器。
3
4
数据链路层(Data Link Layer)。
通过MAC地址寻址,将数据封装为帧(Frame),并提供差错控制和流量管理。交换机是该层的代表设备。
3
5
网络层(Network Layer)。
使用IP协议实现逻辑寻址和路由选择,确保数据包跨网络传输。路由器工作于此层。
3
6
传输层(Transport Layer)。
提供端到端的可靠传输(如TCP协议)或不可靠传输(如UDP协议),负责数据分段、流量控制和差错恢复。
2
7
会话层(Session Layer)。
管理通信会话的建立、维护和终止,支持全双工或半双工对话同步。
4
7
表示层(Presentation Layer)。
处理数据格式转换(如加密/解密、压缩/解压缩),确保不同系统间的语法兼容性。
4
7
应用层(Application Layer)。
直接为用户应用程序(如HTTP、FTP)提供网络服务接口,实现文件传输、邮件收发等功能。
TCP/IP模型¶
TCP/IP模型的核心架构
应用层:直接面向用户,整合了OSI模型中应用层、表示层和会话层的功能,提供HTTP、FTP、SMTP等协议支持网络服务。
1
2
传输层:确保端到端通信,包含TCP(可靠连接,三次握手)和UDP(无连接高速传输)协议,负责数据分段、流量控制和差错恢复。
3
4
网络层(网际互联层):通过IP协议实现逻辑寻址和路由选择,核心协议包括IP、ICMP(错误诊断)、ARP(地址解析)等。
1
5
网络接口层:对应OSI的物理层和数据链路层,处理硬件接口(如以太网、Wi-Fi)和帧封装,实现比特流传输。
3
mysql¶
高可用方案¶
Galera Cluster是集成了Galera插件的MySQL集群,是一种新型的,数据不共享的,高度冗余的高可用方案,目前Galera Cluster有两个版本,分别是Percona Xtradb Cluster和MariaDB Cluster,Galera本时是具有多主特性,即采用Multi-master的集群架构,是一个即稳健,又在数据一致性、完整性及高性能方面有出色表现的高可用解决方案。
Galera Cluster种每个MySQLServer之间相互为主主的关系,当客户端发送指令到一个数据库时,数据库将数据修改后返回一个OK,表示用户的请求已经被收到,但是事务并没有结束依旧可以撤销。当事务结束时用户发送一个commit(提交),服务器收到后会将数据的更新发送给其他的MySQLServer,此时会开启一个全局性的事务ID给组内的其他服务器,其他服务器会查看是否有事务冲突,如果没有冲突就确认更改成功。
主要特点: 多主架构:真正的多点读写的集群,在任何时候读写数据都是最新的 同步复制:集群不同节点之间数据同步,没有延迟,在数据库挂掉之后,数据不会丢失 并发复制:从节点APPLY数据时,支持并行执行有更好的性能。 故障切换:数据库故障时,因为支持多点写入,切换容易 热插拔:在服务期间,如果数据库挂了,只要监控程序发现的够快,不可服务的时间就会非常少。在节点故障期间,节点本身对集群的影响非常小 自动节点克隆: 在新增节点,或者停机维护时,增量数据或者基础数据不需要人工手动备份提供,Galera Cluster会自动拉取在线节点数据,最终集群会变为一直 对应用透明:集群的维护,对应用程序是透明的 https://blog.csdn.net/ZouChengli/article/details/107564041
常用命令类¶
systemctl start mariadb
systemctl stop mariadb
mysql -u root -p # 登录进入数据库
create database test01(character set utf8);
drop database test01;
use test01;
show databases; # 显示数据库的表
# 创建表与删除表
use 库名;
create table 表名(字段列表);
drop table 表名;
# 显示表中的记录
select * from 表名;
ceph¶
存储类型区分¶
特性 | 块存储 | 文件存储 | 对象存储 |
---|---|---|---|
数据结构 | 固定大小数据块(512B/4KB) | 树状目录结构下的文件和子文件夹 | 自包含的,无层级结构的(数据+元数据) |
接口标准 | SCSI/iSCSI/FC | 文件系统协议:如NFS/SMB/CIFS/FTP/HTTP | RESTful API/S3/Swift 接口 |
元数据 | 上层应用管理 | 文件系统内置(大小/日期等) | 对象自带自定义元数据 |
应用场景 | 虚拟机磁盘/数据库存储/大型企业应用 | 文件共享/网络附加存储NAS/备份恢复 | 大规模非结构化数据/CDN内容分发/备份 |
对应产品 | SAN存储/本地磁盘/虚拟机磁盘/数据库实例 | NAS设备/云文件服务 | AWS S3/Azure Blob/阿里云OSS |
扩展性 | 高 扩展复杂度相对较高,需精细管理 | 中等(可通过添加更多NAS节点扩展) | 极高(添加支持横向扩展 增加存储容量) |
数据访问 | 高性能低延迟(随机I/O) | 通过路径定位文件适用于顺序或随机读写 | 唯一ID访问(适用于规模并行访问) |
数据一致性 | 较强的一致性 尤其对于本地存储 | 可以提供较强的强一致性保证 | 可配置(最终到强一致性) |
版本控制 | 无原生支持(依赖应用) | 快照实现版本 | 原生版本控制(轻松回滚) |
集群类命令¶
ceph -s # 显示集群的整体状态,包括监视器、管理器、OSD 的数量和状态,以及存储池信息等
ceph health # 显示集群的健康状态,若集群健康会显示 HEALTH_OK
ceph health detail # 当集群不健康时,提供详细错误信息
ceph -w # 持续监控集群状态变化
ceph df # 查看全局存储使用情况,包括每个 OSD 的用量和 PG 数量
ceph df detail # 显示更详细的存储池使用情况
ceph osd stat # 显示所有 OSD 的状态(如 up/down)
ceph osd tree # 查看 OSD 目录树,了解分布情况
ceph osd dump # 获取指定 OSD 的详细信息(如权重、状态等)
ceph osd df # 查看osd节点的使用情况
存储池命令¶
ceph osd pool create rbd 128 # 创建存储池
ceph osd pool application enable rbd rbd # 启用存储池
ceph osd pool ls # 查看存储池
每个pool应该分配多少个PG,与OSD的数量、复制份数、pool数量有关,有个计算公式在:
Total PGs = ((Total_number_of_OSD * 100) / max_replication_count) / pool_count
结算的结果往上取靠近2的N次方的值。比如总共OSD数量是160,复制份数3,pool数量也是3,那么按上述公式计算出的结果是1777.7。取跟它接近的2的N次方是2048,那么每个pool分配的PG数量就是2048。
块存储命令¶
rbd create --size 4096 test01 --image-feature layering --pool rbd # 创建快存储
rbd ls -l # 查看创建的块存储
rbd --image test01 info # 详细查看块存储
rbd resize --image test01 --size 8192 # 扩容块存储
rbd rm test01 # 删除块存储
扩缩容类命令¶
# ceph mon 节点扩容
cd /data/ceph/
ceph-deploy --overwrite-conf mon add ceph02
ceph -s
ceph mon stat
# ceph mon 节点缩容
cd /data/ceph/
ceph-deploy mon destroy ceph03
ceph -s
# ceph osd 节点扩容
cd /data/ceph/
mkfs.xfs -f /dev/sdd # 初始化磁盘
ceph-deploy disk zap ceph03 /dev/sdd # ceph初始化磁盘
ceph-deploy osd create --data /dev/sdd ceph03 # 添加osd节点
ceph osd tree # 检查osd节点是否扩容成功
# ceph osd 节点缩容
ceph osd tree
ceph osd out osd.8 # 将 OSD 下线
systemctl disable --now ceph-osd@8 # 客户端的osd节点停止osd相关进程
ceph auth del osd.8 # 删除osd认证密钥d
ceph osd rm osd.8 # 将 OSD 删除 注意观察osd的状态为DNE
dmsetup status # 客户端解除ceph对磁盘的占用
dmsetup remove ceph--d17c50bc--c897--451d--8d0b--0424a7521af9-osd--block--94ee413b--6ed6--49d6--a70e--7881ef33f89a
ceph osd crush remove osd.8 # 管理端清除osd的DNE状态,从crush中移除
ceph -s # 验证集群状态,发现集群数据缩容成功
服务管理¶
mon节点相关服务
systemctl status ceph-mon.target
systemctl status ceph.target
systemctl status ceph-mon@ceph01.service
osd节点相关服务
systemctl status ceph-osd.target
systemctl status ceph.target
systemctl status ceph-osd@0.service
systemctl status ceph-osd@1.service
systemctl status ceph-osd@2.service
故障处理¶
处理磁盘故障失败
作为存储管理员,您必须在存储群集的生命周期内处理磁盘故障。在发生实际故障前,测试和模拟磁盘失败将确保您为实际情况做好准备。
以下是替换故障磁盘的高级别工作流:
查找失败的 OSD。 ceph osd tree
将 OSD 变为 out。 ceph osd out osd.8
停止节点上的 OSD 守护进程。 systemctl disable --now ceph-osd@8
检查 Ceph 的状态。 ceph -s
从 CRUSH map 移除 OSD。 ceph osd crush remove osd.8
删除 OSD 授权。 ceph auth del osd.8
从存储集群中移除 OSD。 ceph osd rm osd.8
卸载节点上的文件系统。 dmsetup remove ceph--d17c50bc-
替换失败的驱动器。 通知机房人工替换或者修复磁盘
将 OSD 重新添加到存储集群。 ceph osd 节点扩容
检查 Ceph 的状态。 ceph -s
openstack¶
架构图¶
网络划分¶
虚拟机创建流程¶
集群类命令¶
source /root/admin-openrc
nova service-list
neutron agent-list
cinder service-list
openstack image list # 查看镜像
openstack image delete <image_id> # 删除镜像
openstack image show <image_id> # 查看镜像详细信息
openstack image set <image_id> # 更新镜像ID
openstack flavor list # 查看虚拟机规格
openstack user list # 查看所有租户
openstack role list # 查看所有角色
openstack catalog list # 列出认证服务目录
openstack server list --all # 查看所有租户下的虚拟机
openstack server list --all --long # 查看所有租户下的虚拟机(可以显示更多信息 包括虚拟机所在节点)
nova list --all # 查看所有租户下的虚拟机
nova show 32191deb-0c65-464a-9625-d15256c77d57 # 查看虚拟机的详细信息包含虚拟机所在节点
租户类命令¶
source demo-openrc
openstack network list # 查看租户网络
openstack subnet list # 查看租户子网
openstack port list # 查看租户port ip
openstack floating ip list # 查看租户浮动IP
openstack volume list # 查看租户创建的卷
openstack console url show selfservice-instance # 查看租户虚拟机vnc地址
openstack console log show selfservice-instance # 查看租户console log日志
openstack server stop selfservice-instance # 关闭虚拟机
openstack server start selfservice-instance # 开启虚拟机
openstack server reboot selfservice-instance # 重启虚拟机
openstack server pause selfservice-instance # 暂停虚拟机
openstack server unpause selfservice-instance # 取消暂停虚拟机
openstack server suspend selfservice-instance # 挂起虚拟机
openstack server resume selfservice-instance # 恢复虚拟机
openstack server rescue <server_id> --rescue_image_ref <rescue_image> # 恢复虚拟机
openstack server resize <server_id> <flavor_name> # 调整需求规格大小
openstack server rebuild <server_id> <image_id> # 重装虚拟机
nova meta <server_id> set <meta_key>=<meta_value> # 设置虚拟机元数据
openstack volume snapshot create --volume <volume-id> <snapshot-name> # 虚拟机做快照
openstack volume snapshot list # 虚拟机查看快照
# 创建网络
openstack network create --share --external \
--provider-physical-network provider \
--provider-network-type flat provider
# 创建子网
openstack subnet create --network provider \
--allocation-pool start=203.0.113.101,end=203.0.113.250 \
--dns-nameserver 8.8.4.4 --gateway 203.0.113.1 \
--subnet-range 203.0.113.0/24 provider
# 创建flavor
openstack flavor create --id 0 --vcpus 1 --ram 64 --disk 1 m1.nano
# 安全组规则
openstack security group rule create --proto icmp default
openstack security group rule create --proto tcp --dst-port 22 default
# 创建虚拟机
openstack server create --flavor m1.nano --image cirros \
--nic net-id=PROVIDER_NET_ID --security-group default \
--key-name mykey provider-instance
扩缩容类命令¶
# 下线计算节点的命令
nova service-list
nova service-disable 154ad59a-d986-446e-91ac-fab6dbf47f0b
nova service-delete 154ad59a-d986-446e-91ac-fab6dbf47f0b
systemctl disable libvirtd.service openstack-nova-compute.service
systemctl stop libvirtd.service openstack-nova-compute.service
neutron agent-list
neutron agent-delete 154ad59a-d986-446e-91ac-fab6dbf47f0b
systemctl disable neutron-linuxbridge-agent.service
systemctl stop neutron-linuxbridge-agent.service
cinder service-list
cinder service-disable compute1 cinder-volume
cinder service-disable compute1@nfs cinder-volume
cinder service-disable compute1@lvm cinder-volume
cinder service-disable compute1@rbd cinder-volume
cinder-manage service remove cinder-volume compute1
systemctl disable openstack-cinder-volume.service target.service
systemctl stop openstack-cinder-volume.service target.service
迁移类命令¶
热迁移单个虚拟机(热迁移需要依赖分布式存储ceph实现)
source /root/admin-openrc
openstack server list --long --all
nova live-migration eb77e2dc-1516-424a-81fe-e5a1c78cc6e2 compute1
openstack server list --long --all
热迁移批量虚拟机(热迁移需要依赖分布式存储ceph实现)
source /root/admin-openrc
openstack server list --long --all
nova host-evacuate-live --target-host compute3 compute1
openstack server list --long --all
冷迁移虚拟机
nova stop selfservice-instance01
scp -rP 10000 355c2264-a2bd-4485-962b-4a231175d39d 192.168.1.223:/var/lib/nova/instances/
chown -R nova.nova /var/lib/nova/instances/355c2264-a2bd-4485-962b-4a231175d39d
mysql
use nova;
desc instances;
select id,hostname,host from instances;
update instances set host='compute2', node='compute2' where uuid='355c2264-a2bd-4485-962b-4a231175d39d';
nova show selfservice-instance01
nova start selfservice-instance01
计算节点超配¶
内存和磁盘超配虽然能提供更多数量的虚拟机,当该宿主机上大量虚拟机的负载都很高时,轻着影响虚拟机性能,重则引起 qemu-kvm 相关进程被杀,即虚拟机被关机。因此对于线上稳定性要求高的业务,建议不要超配 RAM 和 DISK,但可适当超配 CPU。建议这几个参数设置为:
CPU: CONF.cpu_allocation_ratio = 4
RAM: CONF.ram_allocation_ratio = 1.0
DISK: CONF.disk_allocation_ratio = 1.0
RAM-Reserve: CONF.reserved_host_memory_mb = 2048
DISK-Reserve: CONF.reserved_host_disk_mb = 20480
在OpenStack中,默认的CPU超配比例是1:16,内存超配比例是1:1.5。当宿主机使用swap交换分区来为虚拟机分配内存的时候,则虚拟机的性能将急速下降。生产环境上不建议开启内存超售(建议配置比例1:1)。另外,建议设置nova.conf文件中的reserved_host_memory_mb 参数,即内存预留量(建议至少预留4GB),保证该部分内存不能被虚拟机使用。
vim /etc/nova/nova.conf
[DEFAULT]
reserved_host_memory_mb=4096
#磁盘预留空间,这部分空间不能被虚拟机使用
reserved_host_disk_mb= 10240
默认OpenStack的CPU超配比例是1:16,内存超配比例是1:1.5。下面配置的就是这个比例,你可以自己算一下,cat /proc/cpuinfo里面的逻辑核数,再x16就是你能够分配给虚拟机的。内存也是类似。
物理cpu数
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
单块cpu核数
cat /proc/cpuinfo| grep "cpu cores"|wc -l
总核数 = 物理CPU个数 × 每颗物理CPU的核数
cpu和内存的超售目的就是为了资源利用的最大化
[root@compute2 ~]# vim /etc/nova/nova.conf
disk_allocation_ratio = 10.0
cpu_allocation_ratio = 10.0
ram_allocation_ratio = 10.0
systemctl restart openstack-nova-compute.service
需要重启控制节点服务
systemctl restart openstack-nova-api.service openstack-nova-scheduler.service openstack-nova-conductor.service
服务管理¶
# 控制节点
systemctl stop openstack-cinder-api.service openstack-cinder-scheduler.service
systemctl stop neutron-l3-agent.service
systemctl stop neutron-server.service neutron-linuxbridge-agent.service neutron-dhcp-agent.service neutron-metadata-agent.service
systemctl stop openstack-nova-api.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service
systemctl stop openstack-glance-api.service
systemctl stop httpd.service
systemctl stop etcd
systemctl stop memcached.service
systemctl stop rabbitmq-server.service
systemctl stop mariadb.service
# 计算节点
systemctl stop neutron-linuxbridge-agent.service
systemctl stop libvirtd.service openstack-nova-compute.service
systemctl stop openstack-cinder-volume.service target.service
以下是OpenStack各节点典型服务分配(基于2025年最新架构):
控制节点(Controller Node)
- Keystone:身份认证与授权服务
- Glance:镜像管理服务(API与注册表)
- Nova:
nova-api
:计算服务API接口nova-scheduler
:虚拟机调度器nova-conductor
:数据库交互代理- Neutron:
neutron-server
:网络服务API接口- 核心插件(如ML2)与路由服务
- Cinder:
cinder-api
:块存储API接口cinder-scheduler
:卷调度器- Placement:资源跟踪与分配服务(独立于Nova)
- Horizon:Web仪表盘(可选)
- Heat:编排服务(可选)
网络节点(Network Node)
- Neutron:
neutron-l3-agent
:虚拟路由器与NAT服务neutron-dhcp-agent
:DHCP服务neutron-metadata-agent
:实例元数据服务neutron-openvswitch-agent
:OVS虚拟交换代理(或Linux Bridge代理)- OVN:SDN控制器(高级部署可选)
存储节点(Storage Node)
块存储(Cinder)
cinder-volume
:卷管理服务(对接LVM/Ceph等后端)cinder-backup
:卷备份服务(可选)
对象存储(Swift)
swift-proxy
:API代理与负载均衡swift-account
/swift-container
/swift-object
:账户/容器/对象存储服务swift-replicator
/swift-auditor
:数据一致性服务
计算节点(Compute Node)
- Nova:
nova-compute
:虚拟机生命周期管理nova-libvirt
:虚拟化驱动(KVM/QEMU)- Neutron:
neutron-openvswitch-agent
:虚拟网络接口管理- 其他:
libvirtd
:底层虚拟化服务qemu-kvm
:虚拟机实例运行
补充说明
- 高可用部署:控制节点通常集群化(如Keystone、MySQL集群),服务分布可能调整。
- 混合节点:小型部署中,网络/存储服务可能与控制节点合并,但最佳实践建议分离以提升性能。
- 最新架构:Neutron已支持OVN、SR-IOV等高级网络功能,存储节点可集成Ceph等分布式存储。
网络抓包¶
在OpenStack环境中抓包,通常是为了调试网络问题,比如虚拟机之间的通信问题、流量分析等。OpenStack使用多种技术来构建和管理云环境,包括计算(Nova)、网络(Neutron)和存储(Cinder)等。下面介绍几种常见的抓包方法:
1. 使用虚拟机内的抓包工具
1.1 使用tcpdump
如果你在虚拟机内部,可以直接使用tcpdump来抓包。例如,要抓取所有经过虚拟机的流量,可以在虚拟机中执行:
sudo tcpdump -i any -w output.pcap
这会捕获所有经过虚拟机的流量,并将输出保存到output.pcap文件中。
1.2 使用Wireshark
在虚拟机中安装Wireshark GUI工具,然后运行它,选择正确的网络接口(通常是eth0或ens3等),然后开始捕获。
2. 使用Neutron的端口镜像功能
如果你的OpenStack部署支持Neutron网络,可以使用端口镜像功能来抓取特定端口的流量。
2.1 创建端口镜像
首先,你需要创建一个端口镜像:
openstack port mirror create --name mirror-name --type flow --port-id port-id-to-mirror --shared
其中mirror-name是镜像的名称,port-id-to-mirror是你想要监控的端口的ID。
2.2 配置交换机以支持端口镜像
接下来,你需要将镜像端口添加到适当的交换机上:
openstack network set --distributed --provider:network_type vxlan --provider:segmentation_id 10 network-name
然后,将镜像添加到交换机:
openstack network set --mirror mirror-port-id network-name
3. 使用外部抓包工具(如tshark, Wireshark在宿主机上)
3.1 使用tshark在宿主机上抓包
在宿主机上,你可以使用tshark(Wireshark的命令行版本)来抓取通过物理网络接口的流量。例如:
sudo tshark -i eth0 -w output.pcap
这会捕获通过eth0接口的流量。
4. 使用Neutron的端口安全组规则添加日志记录功能(可选)
虽然这不是直接抓包的方法,但可以通过配置安全组规则来记录进出端口的流量:
openstack security group rule create --proto icmp --direction ingress security-group-name
openstack security group rule create --proto icmp --direction egress security-group-name
这些规则可以帮助你监控进出特定端口的ICMP流量。
总结
选择哪种方法取决于你的具体需求和环境配置。如果只是简单地想要查看虚拟机内的流量,使用虚拟机内的tcpdump或Wireshark是最直接的方法。对于需要监控跨多个虚拟机或网络的流量,使用Neutron的端口镜像功能会更加有效。在宿主机上使用tshark或Wireshark也是一种强大的选择,尤其是在需要捕获物理网络流量的场景中。
故障处理方法¶
ISO参考模型:物理层/数据链路层/网络层/传输层/会话层/表示层/应用层
https://blog.csdn.net/qq_57515401/article/details/147323583
source admin-openrc
一:简单openstack底层网络状态
1.使用ping命令进行简单检查所有管理网是否通信正常,进行互ping
2.使用ssh命令检查所有openstack主机是否可以连接
二:检查openstack网络服务状态
openstack compute service list # 检查Nova服务状态
openstack network agent list # 检查Neutron服务状态
openstack volume service list # 检查Cinder服务状态
三:检查网络拓扑
openstack network list # 列出所有网络
openstack subnet list # 列出所有子网
openstack port list # 列出所有端口
四:检查实例网络配置
openstack server list # 查看虚拟机状态
openstack server show <server_id> # 查看实例详情 (nova show)
openstack console log show <instance-id> # 查看实例console 日志
五:无法获取IP地址
# 检查DHCP代理状态
openstack network agent list | grep dhcp # 如状态异常可能为neutron-dhcp-agent未正常运行
# 检查DHCP命名空间
ip netns list | grep dhcp
六:检查端口状态
openstack port list --server <instance-id> # 查找实例关联的端口
openstack port show <port-id> # 查看端口详情
端口绑定失败:
检查物理网络(如 VLAN/VXLAN)配置或底层插件(OVS/LinuxBridge)状态
七:检查实例内部
# 通过控制台或VNC检查实例内的网络配置
# 确认是否发送了DHCP请求
虚拟机网络不通
检查 OVS/LinuxBridge 是否绑定虚拟机端口:
ovs-vsctl show | grep tap
brctl show | grep tap
检查安全组是否放行流量
openstack port show <端口ID> | grep security_group
故障处理案例¶
当发现你的OpenStack虚拟机网络有问题,不妨先试一下这16个步骤
https://www.cnblogs.com/popsuper1982/p/8536247.html
1. Security Group全部打开,这是最基本的,但是很多人容易忘记
2. 通过界面查看虚拟机的log,也可以在compute节点上查看console.log文件,看看里面是否有DHCP获取IP成功的日志
在compute节点上可以查看 /var/lib/nova/instances/6323a941-de10-4ed3-9e2f-1b2b25e79b66/console.log
如果没有日志,则说明image有问题
3. 如果虚拟机连不上DHCP Server,则需要准备一个不使用metadata server,而是用用户名密码可以登录的image
这种Image很好做,自己动手做一个就可以了,启动镜像后去掉cloud-init相关配置,然后设置一个默认的用户名密码。
4. 通过VNC登录
5. 如果VNC登录不进去,说明VNC配置的有问题,方法一重新配置VNC
6. 如果VNC登录不进去,还有一个方法,使用自己的VNC Client,通过compute物理节点的IP地址登陆
qemu-system-x86_64 有参数 -vnc 0.0.0.0:5
就可以通过compute node的ip地址进入
7. 通过ovs-vsctl show和brctl来查看,各个网卡和bridge之间关系是否正确,tunnel之间是否能够通,网卡是否都处于up的状态
8. 如果从虚拟机的虚拟网卡到DHCP Server的网卡一路都是配置正确的,则需要查看br-tun上ovs-ofctl dumpflows查看flows规则,是否对包的改写正确,是否有正确的规则
9. 通过VNC登录进去后,就可以通过命令行运行dhclient,来重启连接DHCP Server, 从compute节点上的网卡和bridge,一个个进行tcpdump,看到底哪个网卡或者bridge没有收到包,收到的包里面的VLAN ID等是否正确
10. 如果VM能从DHCP Server获得IP,则好事成了一半,接下来换一个有cloud-init的image,看metadata server能够连接成功,能够注入key,也是通过console.log来看
11. 如果metadata server不能连接成功,就需要顺着metadata server的整个流程,一个一个模块看,看每个模块的log,端口是否正确,是否收到请求,也可以在VM里面用curl来模拟metadata server的请求 http://169.254.169.254
12. 如果metadata server能够连接成功,key成功注入,下一步需要从namespace里面看是否能够ping通,能够ssh
13. 如果namespace里面能够成功,则在network节点上,ping floating ip和ssh,是否能够成功,如果不成功,看br-ex的网卡是否添加正确,是否配置了ip,路由表是否正确,namespace里面floating ip的iptables规则是否添加正确
14. 在network节点上能够ssh到floating ip,则需要从其他节点上ssh,如果不成功,可能br-ex的网址配置有问题,很可能是br-ex添加的物理网卡不是混合状态,也可能是路由配置有问题,对于floating ip所在的网段,不指向network节点
15. 如果floating ip能够成功,则需要进去VM里面运行apt-get update,如果不可以,看能否ping通openstack里面的gateway(10.0.0.1),然后看能否ping通物理网络环境的gateway(16.158.XXX.1)
16. 看DNS Server是否配置正确,是否能够ping通,如果能,apt-get update运行成功
kubernetes-k8s¶
架构图¶
集群类命令¶
- 集群状态与节点信息
kubectl cluster-info dump # 查看集群信息(API服务器、版本、节点数等)
kubectl get nodes # 查看集群节点列表及状态
kubectl get nodes -o wide # 查看集群节点列表及状态 显示详细信息(IP、版本、角色等)
kubectl describe node node-10-0-0-112 # 查看节点详情(含污点、标签、条件等)
- 组件状态(适用于 kubeadm 部署的集群)
kubectl get pods -n kube-system # 查看系统组件Pod
kubectl get pods --all-namespaces # 查看所有命名空间的pod
kubectl describe pod <pod-name> -n kube-system # 查看组件详情
资源对象操作¶
- 通用语法
# 查看资源列表
kubectl get <resource-type> [NAME] [OPTIONS]
# 创建资源
kubectl create -f <yaml-file> # 从YAML文件创建
kubectl apply -f <yaml-file> # 从YAML文件创建或更新(推荐)
# 删除资源
kubectl delete <resource-type> <name>
kubectl delete -f <yaml-file>
# 查看资源详情
kubectl describe <resource-type> <name>
- 常见资源类型缩写
资源类型 缩写
Pods po
Services svc
Deployments deploy
ReplicaSets rs
StatefulSets sts
DaemonSets ds
ConfigMaps cm
Secrets secret
Namespaces ns
PersistentVolume pv
PersistentVolumeClaim pvc
Pod相关操作¶
- 创建与查看
# 创建Pod(示例:运行一个Nginx容器)
kubectl run nginx --image=nginx:alpine
# 查看Pod列表
kubectl get pods
kubectl get pods -o wide # 显示IP、节点等详细信息
kubectl get pods -n <namespace> # 查看指定命名空间的Pod
kubectl get pods -ALL # 查看所有命名空间的pod
# 查看Pod详细状态(事件、容器信息等)
kubectl describe pod <pod-name>
- 调试与日志
# 查看Pod日志
kubectl logs <pod-name>
kubectl logs -f <pod-name> # 实时跟踪日志(类似tail -f)
kubectl logs <pod-name> -c <container-name> # 多容器Pod指定容器
# 进入Pod内部执行命令
kubectl exec -it <pod-name> -- /bin/sh # 进入shell
kubectl exec <pod-name> -- cat /etc/hosts # 执行单个命令
# 复制文件到/从Pod
kubectl cp <pod-name>:/path/in/pod /local/path # 从Pod复制到本地
kubectl cp /local/path <pod-name>:/path/in/pod # 从本地复制到Pod
Deployment 与服务编排¶
- Deployment 操作
# 创建Deployment(示例:3副本的Nginx)
kubectl create deployment nginx --image=nginx:alpine --replicas=3
# 查看Deployment
kubectl get deployments
kubectl describe deployment <deployment-name>
# 扩缩容
kubectl scale deployment <deployment-name> --replicas=5
# 滚动更新镜像
kubectl set image deployment <deployment-name> nginx=nginx:1.21.0
# 回滚到上一个版本
kubectl rollout undo deployment <deployment-name>
# 查看更新状态
kubectl rollout status deployment <deployment-name>
2.Service 操作
# 为Deployment创建Service(ClusterIP类型)
kubectl expose deployment <deployment-name> --port=80 --target-port=80
# 查看Service
kubectl get services
kubectl describe service <service-name>
# 创建NodePort类型Service(外部访问)
kubectl create service nodeport <service-name> --tcp=80:80 --node-port=30080
Namespace 命名空间管理¶
# 查看所有命名空间
kubectl get namespaces
# 创建命名空间
kubectl create namespace dev
# 在特定命名空间执行命令
kubectl get pods -n dev # 查看dev命名空间的Pod
kubectl apply -f <yaml-file> -n dev # 在dev命名空间创建资源
# 设置默认命名空间
kubectl config set-context --current --namespace=dev
配置与密钥管理¶
- ConfigMap
# 从文件创建ConfigMap
kubectl create configmap app-config --from-file=config.properties
# 从字面量创建ConfigMap
kubectl create configmap app-config --from-literal=key1=value1 --from-literal=key2=value2
# 查看ConfigMap
kubectl get configmaps
kubectl describe configmap app-config
- Secret
# 创建Secret(示例:存储数据库密码)
kubectl create secret generic db-secret --from-literal=username=root --from-literal=password=pass123
# 查看Secret(数据以Base64编码显示)
kubectl get secrets
kubectl describe secret db-secret
存储卷管理¶
# 创建PersistentVolume(PV)
kubectl apply -f pv.yaml # 需先编写PV的YAML文件
# 创建PersistentVolumeClaim(PVC)
kubectl apply -f pvc.yaml
# 查看PV和PVC
kubectl get pv
kubectl get pvc
集群调试与故障排查¶
# 查看API资源类型及支持的操作
kubectl api-resources
# 查看资源的API版本
kubectl api-versions
# 查看事件(排查问题的关键)
kubectl get events
kubectl get events --sort-by=.metadata.creationTimestamp # 按时间排序
# 端口转发(访问集群内部服务)
kubectl port-forward service/<service-name> 8080:80 # 将本地8080端口转发到Service的80端口
# 节点资源使用情况(需安装metrics-server)
kubectl top nodes
kubectl top pods
上下文与认证管理¶
# 查看当前配置上下文
kubectl config view
# 查看当前使用的上下文
kubectl config current-context
# 切换上下文
kubectl config use-context <context-name>
# 获取集群凭证(用于配置kubectl客户端)
kubectl get secret -n kube-system <admin-secret> -o yaml
其他实用命令¶
# 自动补全(支持bash/zsh)
source <(kubectl completion bash) # 临时生效
echo "source <(kubectl completion bash)" >> ~/.bashrc # 永久生效
# 使用JSONPath过滤输出
kubectl get pods -o=jsonpath='{.items[*].metadata.name}'
# 执行批量操作(标签选择器)
kubectl delete pods -l app=nginx # 删除所有标签app=nginx的Pod
kubectl scale deployments -l app=nginx --replicas=0 # 缩容所有相关Deployment
节点扩缩容¶
节点扩容
yum install docker-ce-20.10.6 docker-ce-cli-20.10.6 containerd.io -y
yum install -y kubelet-1.20.6 kubeadm-1.20.6 kubectl-1.20.6
systemctl enable kubelet ; systemctl start kubelet
kubeadm token create --print-join-command 安装 k8s 集群-添加第三个工作节点
kubectl get node
节点缩容
kubectl get node
kubectl cordon node3 标记节点不可调度
kubectl drain node3 --delete-local-data --force --ignore-daemonsets 驱逐这个node节点上的pod
kubectl delete nodes node3 删除这个node节点
kubectl get node
故障排查思路图¶
问题及解决思路汇总¶
Pod 启动失败问题¶
(一)镜像拉取失败
问题表现:Pod 长时间处于Pending状态,描述信息中显示ImagePullBackOff。例如,执行kubectl describe pod
网络通信问题¶
(一)Pod 间通信失败
问题表现:一个 Pod 无法访问另一个 Pod 提供的服务,使用ping或应用层面的请求都无法成功。例如,在 Pod 内执行ping
资源不足问题¶
(一)CPU 和内存资源不足 问题表现:Pod 运行缓慢,出现卡顿现象,或者被 K8s 驱逐(Evicted状态)。使用kubectl top pods命令查看 Pod 的资源使用情况,发现 CPU 或内存使用率持续高于 Pod 定义的limits。 解决思路: 优化应用程序:检查应用程序代码,看是否存在资源消耗过高的代码逻辑,如内存泄漏、死循环等。对应用程序进行性能优化,减少不必要的资源占用。 调整资源请求和限制:根据应用实际的资源需求,合理调整 Pod 的resources.requests和resources.limits。例如,如果应用在高负载下需要更多内存,可以适当增加limits.memory的值,但同时要确保节点有足够的资源可供分配。 扩缩容集群:若集群整体资源不足,考虑增加节点数量或升级节点的硬件配置。使用 K8s 的自动扩缩容功能(如 Horizontal Pod Autoscaler,HPA),根据资源指标自动调整 Pod 副本数量。 (二)存储资源不足 问题表现:Pod 因无法挂载存储卷而启动失败,或者在运行过程中出现磁盘空间不足的错误。例如,应用程序写入文件时提示磁盘已满。 解决思路: 清理无用数据:检查存储卷中的数据,删除不必要的文件或日志。对于日志文件,可以设置定期清理策略。例如,使用logrotate工具对日志文件进行管理。 扩展存储卷:如果是持久化卷(PV),可以尝试扩展其容量。不同的存储后端有不同的扩展方法,如在 AWS EBS 卷中,可以在控制台直接扩展卷的大小,然后在 K8s 中更新 PersistentVolumeClaim(PVC)以使用扩展后的容量。 调整存储策略:评估应用对存储的需求,考虑使用更高效的存储策略。例如,对于一些读写频繁但对数据持久性要求不高的应用,可以使用EmptyDir存储卷,它基于节点的内存或磁盘临时存储数据,不会占用持久化存储资源。
节点下线维修¶
kubectl get node
kubectl cordon node2 # 首先标记节点不可调度
kubectl drain node2 --delete-local-data --force --ignore-daemonsets # 节点上的pod进行驱逐
然后我们将服务器进行关机,等待服务器修好以后,再次开机,讲node节点恢复为可以调度的状态
kubectl uncordon node2
kubectl get node
节点故障疏散¶
node节点故障 等待一段时间后,我们可以看到node3节点上pod的状态会变成 Terminating
如果此时我们已经确认node3节点已经属于不可恢复的节点 我们开始清理node3节点上异常的pod
我们开始清理node3节点上异常的pod
[root@master1 ~]# cat clean_pod.sh
#!/bin/bash
node_list="node2"
for n in "${node_list}"
do
fail_pod_count=$(kubectl get pod -o wide -ALL |grep " ${n} "|grep -v kube-system|wc -l)
for m in `seq 1 $fail_pod_count`
do
fail_pod_name=$(kubectl get pod -o wide -ALL |grep " ${n} "|grep -v kube-system|awk 'NR=='$m'{print $2}')
fail_pod_namespace=$(kubectl get pod -o wide -ALL |grep " ${n} "|grep -v kube-system|awk 'NR=='$m'{print $1}')
echo "kubectl delete pod $fail_pod_name -n $fail_pod_namespace --force --grace-period=0"
sleep 0.5
done
done
关机下电¶
master节点操作¶
现在master节点操作 使得节点为维修状态
kubectl drain master-10-0-0-111 --ignore-daemonsets
kubectl drain node-10-0-0-112 --ignore-daemonsets
kubectl drain node-10-0-0-113 --ignore-daemonsets
[root@k8s01 ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
master-10-0-0-111 Ready,SchedulingDisabled control-plane,master 13m v1.20.11
node-10-0-0-112 Ready,SchedulingDisabled <none> 10m v1.20.11
node-10-0-0-113 Ready,SchedulingDisabled <none> 10m v1.20.11
node节点操作¶
依次关机node节点
poweroff
最后关机master节点
poweroff
开机恢复¶
master节点操作¶
先开机master节点 启动时先启动master节点,然后等 30秒-1分钟 etcd 起稳,再启动子节点
kubectl uncordon master-10-0-0-111
kubectl uncordon node-10-0-0-112
kubectl uncordon node-10-0-0-113
[root@k8s01 ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
master-10-0-0-111 Ready control-plane,master 18m v1.20.11
node-10-0-0-112 Ready <none> 15m v1.20.11
node-10-0-0-113 Ready <none> 15m v1.20.11
[root@k8s01 ~]# kubectl get pod -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-flannel kube-flannel-ds-7dcjz 1/1 Running 1 15m
kube-flannel kube-flannel-ds-h5jgz 1/1 Running 1 15m
kube-flannel kube-flannel-ds-smd9n 1/1 Running 1 18m
kube-system coredns-5775bfb4dc-26sqg 1/1 Running 1 18m
kube-system coredns-5775bfb4dc-vsg6q 1/1 Running 1 18m
kube-system etcd-master-10-0-0-111 1/1 Running 1 18m
kube-system kube-apiserver-master-10-0-0-111 1/1 Running 2 15m
kube-system kube-controller-manager-master-10-0-0-111 1/1 Running 2 18m
kube-system kube-proxy-24mvj 1/1 Running 1 15m
kube-system kube-proxy-lw8j9 1/1 Running 1 15m
kube-system kube-proxy-nk92z 1/1 Running 1 18m
kube-system kube-scheduler-master-10-0-0-111 1/1 Running 2 18m
kube-system metrics-server-6595f875d6-wf8nv 2/2 Running 2 14m
kubernetes-dashboard dashboard-metrics-scraper-7b59f7d4df-hmwr8 1/1 Running 1 15m
kubernetes-dashboard kubernetes-dashboard-5dbf55bd9d-6flnn 1/1 Running 2 15m
sdn¶
常见面试题¶
以下是SDN运维部署交付相关的常见面试题及解析,结合了实际场景和技术要点:
一、SDN基础与架构
SDN的核心架构包含哪些平面?
控制平面:集中管理网络策略(如OpenDaylight控制器)
数据平面:转发流量(如支持OpenFlow的交换机)
应用平面:业务需求驱动(如网络编排系统)
OpenFlow协议的默认端口号是多少?
答案:6633(TCP协议)
二、部署与自动化
如何实现SDN网络的自动化部署?
技术选型:
使用Ansible/Python脚本批量配置交换机(如端口VLAN、ACL)
通过SDN控制器(如Cisco DNA Center)集中下发策略
场景:新办公楼部署时,自动化工具可节省80%配置时间
SDN控制器如何保障高可用性?
方案:控制器集群(如ONOS多节点)+ 热备切换机制
三、运维与故障处理
SDN网络中如何快速定位故障?
工具:
使用REST API查询控制器状态(如Ryu的/stats接口)
分析交换机流表日志(如匹配异常流表项)
如何优化SDN网络的性能?
方法:
调整流表匹配规则优先级(避免全表扫描)
启用ECMP(等价多路径)负载均衡
四、安全与扩展
SDN网络的安全风险有哪些?如何防护?
风险:控制器单点故障、南向接口劫持
防护:
加密通信(TLS协议)
基于角色的访问控制(RBAC)
如何扩展SDN网络支持新业务?
步骤:
通过北向API(如RESTful)对接业务系统
动态调整流表(如新增VXLAN隧道)
五、实际场景题
金融行业如何利用SDN降低交易延迟?
方案:
超低延迟交换机(如Arista 7060CX2,转发延迟<500ns)
静态路由优化(避免动态协议收敛时间)
多租户场景下SDN如何隔离网络?
技术:
VXLAN/OTV实现二层隔离
控制器内租户逻辑分区(如OpenStack Neutron)
如需深入探讨特定问题(如SDN与NFV协同、多云网络集成等),可进一步补充。
kvm¶
增¶
virt-install --name ${vmname} --virt-type kvm --vcpus 2 --ram 2048 --disk path=/data/kvm-data/${vmname}/${vmname}.qcow2 --boot hd=${vmname} --channel unix,path=/var/lib/libvirt/qemu/${vmname}.agent,mode=bind,target_type=virtio,name=org.qemu.guest_agent.0 --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole # 创建虚拟机
删¶
virsh undefine linux-node1 # 删除虚拟机配置文件(等价于删除虚拟机,不会删除磁盘)
改¶
virsh shutdown linux-node1 # 正常关机虚拟机
virsh destroy linux-node1 # 强制关闭虚拟机
virsh start linux-node1 # 开启虚拟机
virsh reboot linux-node1 # 重启虚拟机
virsh autostart linux-node1 # 设置虚拟机开启自启
virsh console linux-node1 # 进入虚拟机控制台
virsh suspend linux-node1 # 虚拟机挂起
virsh resume linux-node1 # 虚拟机恢复挂起
virsh edit linux-node1 # 修改虚拟机配置文件
virsh domrename linux-node1 linux-node1 # 虚拟机重命名(必须的关机后才能重命名)
virsh snapshot-create-as linux-node1 system-init # 虚拟机创建快照
virsh snapshot-list linux-node1 # 虚拟机查看快照
virsh snapshot-revert linux-node1 --snapshotname system-init # 虚拟机还原快照
virsh snapshot-delete linux-node1 --snapshotname system-init # 虚拟机删除快照
virsh set-user-password linux-node1 --user root --password 123 # 修改虚拟机密码
查¶
virsh --version # 查看kvm版本
virsh list # 查看正在运行的虚拟机
virsh list --all # 查看所有虚拟机 包含未启动的
virsh dumpxml linux-node1 # 查看虚拟机配置文件
virsh dominfo linux-node1 # 查看虚拟机基本信息
virsh domiflist linux-node1 # 查看虚拟机网卡信息
virsh vcpuinfo linux-node1 # 查看虚拟机CPU信息
virsh domblklist linux-node1 # 查看虚拟机磁盘信息
docker¶
增¶
docker run --name nginx01 -it -d -p 8080:80 nginx # 启动一个容器
docker save nginx:latest > nginx.tar.gz # 导出镜像
docker load < nginx.tar.gz # 导入镜像
删¶
docker rm nginx01 # 删除容器
docker rm -f nginx01 # 强制删除容器
docker rmi nginx01 # 删除镜像
docker rmi -f nginx01 # 强制删除镜像
改¶
docker start nginx01 # 启动容器
docker stop nginx01 # 关闭容器
docker restart nginx01 # 重启容器
docker rename nginx01 nginx02 # 给容器修改名称
查¶
docker info # 查看容器详细信息
docker version # 查看容器版本
docker ps # 查看已运行容器
docker ps -a # 查看所有容器 包含未启动的容器
docker images # 查看容器镜像
docker logs nginx01 # 查看容器日志
docker network ls # 查看容器网络类型
docker volume ls # 查看容器存储卷