一、CentOS Stream 8简介
1.1 什么是CentOS Stream 8
CentOS Stream 8是Red Hat Enterprise Linux (RHEL) 8的上游开发版本,介于Fedora和RHEL之间的发行版。它是RHEL 8未来版本的滚动更新版本。
CentOS Stream 8核心特点:
– RHEL 8的上游开发平台
– 滚动更新模式(持续接收更新)
– 比RHEL更前沿的软件包
– 社区驱动开发
– 免费使用,无订阅费用
与CentOS Linux 8的区别:
– CentOS Linux 8:RHEL的下游复刻,已停止维护(2021年底)
– CentOS Stream 8:RHEL的上游开发版本,持续更新
1.2 CentOS Stream 8生命周期
# 查看CentOS Stream 8版本
cat /etc/centos-release
# 查看内核版本
uname -r
# 查看系统架构
uname -m
# 查看支持周期(预计至2029年)
# CentOS Stream 8跟随RHEL 8生命周期
二、CentOS Stream 8虚拟化支持
2.1 KVM虚拟化支持
是的,CentOS Stream 8完全支持KVM虚拟化!
# 1. 检查CPU是否支持虚拟化
egrep -o '(vmx|svm)' /proc/cpuinfo
# 输出vmx(Intel)或svm(AMD)表示支持
# 2. 检查KVM模块是否可用
lsmod | grep kvm
# 应该看到kvm_intel或kvm_amd
# 3. 安装KVM及相关工具
sudo yum install -y qemu-kvm libvirt virt-install bridge-utils
# 4. 启动libvirtd服务
sudo systemctl enable libvirtd
sudo systemctl start libvirtd
# 5. 验证KVM安装
virsh list --all
# 应该能正常连接到hypervisor
2.2 安装虚拟化工具组
# 1. 安装Virtualization Host组
sudo yum groupinstall -y "Virtualization Host"
# 2. 安装Virtualization Client组(管理工具)
sudo yum groupinstall -y "Virtualization Client"
# 3. 安装其他有用工具
sudo yum install -y virt-manager virt-viewer
# 4. 验证安装
virsh version
qemu-img --version
2.3 容器支持(Docker/Podman)
CentOS Stream 8推荐使用Podman(Docker的替代品,无需daemon):
# 1. 安装Podman
sudo yum install -y podman
# 2. 验证Podman安装
podman version
# 3. 运行测试容器
podman run --rm hello-world
# 4. 如果需要Docker兼容
sudo yum install -y podman-docker
alias docker=podman
# 5. 安装Docker CE(如果需要)
# 添加Docker仓库
sudo dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
sudo dnf install -y docker-ce --nobest
三、配置KVM虚拟化
3.1 配置网络桥接
# 1. 查看当前网络接口
ip addr show
# 2. 创建桥接接口
sudo nano /etc/sysconfig/network-scripts/ifcfg-br0
# 添加以下内容:
TYPE=Bridge
BOOTPROTO=dhcp
NAME=br0
DEVICE=br0
ONBOOT=yes
# 3. 修改物理接口配置
sudo nano /etc/sysconfig/network-scripts/ifcfg-ens33
# 添加以下内容:
TYPE=Ethernet
NAME=ens33
DEVICE=ens33
ONBOOT=yes
BRIDGE=br0
# 4. 重启网络服务
sudo systemctl restart NetworkManager
# 5. 验证桥接
brctl show
3.2 创建第一个虚拟机
# 1. 创建虚拟机磁盘镜像
qemu-img create -f qcow2 /var/lib/libvirt/images/vm1.qcow2 20G
# 2. 使用virt-install创建虚拟机
sudo virt-install \
--name vm1 \
--ram 2048 \
--vcpus 2 \
--disk path=/var/lib/libvirt/images/vm1.qcow2,format=qcow2 \
--network bridge=br0 \
--graphics vnc,listen=0.0.0.0 \
--cdrom /tmp/CentOS-8-x86_64.iso \
--os-type linux \
--os-variant centos8
# 3. 查看虚拟机列表
virsh list --all
# 4. 启动虚拟机
virsh start vm1
# 5. 连接到虚拟机控制台
virt-viewer vm1
3.3 使用virt-manager图形界面
# 1. 安装virt-manager
sudo yum install -y virt-manager
# 2. 启动virt-manager(需要X11转发或本地桌面)
virt-manager
# 3. 通过图形界面创建虚拟机
# - 点击"创建新虚拟机"
# - 选择安装介质(ISO或网络)
# - 配置CPU、内存、磁盘
# - 完成创建
四、管理KVM虚拟机
4.1 基本虚拟机管理
# 1. 列出所有虚拟机
virsh list --all
# 2. 启动虚拟机
virsh start vm1
# 3. 优雅关闭虚拟机
virsh shutdown vm1
# 4. 强制关闭虚拟机
virsh destroy vm1
# 5. 暂停虚拟机
virsh suspend vm1
# 6. 恢复虚拟机
virsh resume vm1
# 7. 删除虚拟机(保留磁盘)
virsh undefine vm1
# 8. 删除虚拟机(含磁盘)
virsh undefine vm1 --remove-all-storage
4.2 虚拟机信息查看
# 1. 查看虚拟机信息
virsh dominfo vm1
# 2. 查看虚拟机CPU使用率
virsh cpu-stats vm1
# 3. 查看虚拟机内存使用率
virsh mem-stats vm1
# 4. 查看虚拟机磁盘
virsh domblklist vm1
# 5. 查看虚拟机网络接口
virsh domiflist vm1
# 6. 查看虚拟机XML配置
virsh dumpxml vm1 > vm1.xml
4.3 虚拟机快照管理
# 1. 创建快照
virsh snapshot-create-as vm1 snapshot1 "Before update" --disk-only --atomic
# 2. 列出快照
virsh snapshot-list vm1
# 3. 查看快照信息
virsh snapshot-info vm1 snapshot1
# 4. 恢复快照
virsh snapshot-revert vm1 snapshot1
# 5. 删除快照
virsh snapshot-delete vm1 snapshot1
五、CentOS Stream 8容器管理
5.1 使用Podman管理容器
# 1. 拉取镜像
podman pull centos:8
podman pull ubuntu:20.04
# 2. 运行容器
podman run -d --name my-centos centos:8 sleep infinity
# 3. 查看运行中的容器
podman ps
# 4. 查看所有容器(包括停止的)
podman ps -a
# 5. 进入容器
podman exec -it my-centos /bin/bash
# 6. 停止容器
podman stop my-centos
# 7. 删除容器
podman rm my-centos
# 8. 删除镜像
podman rmi centos:8
5.2 使用Podman Compose
# 1. 安装podman-compose
sudo yum install -y podman-compose
# 2. 创建docker-compose.yml
cat > docker-compose.yml << 'EOF'
version: '3'
services:
web:
image: nginx:latest
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html
db:
image: mysql:8
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: mydb
EOF
# 3. 启动服务
podman-compose up -d
# 4. 查看服务状态
podman-compose ps
# 5. 停止服务
podman-compose down
5.3 构建容器镜像
# 1. 创建Dockerfile
cat > Dockerfile << 'EOF'
FROM centos:8
RUN yum install -y httpd
COPY index.html /var/www/html/
EXPOSE 80
CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]
EOF
# 2. 构建镜像
podman build -t my-httpd:latest .
# 3. 查看镜像
podman images
# 4. 运行自定义镜像
podman run -d -p 8080:80 my-httpd:latest
# 5. 推送镜像到仓库
podman tag my-httpd:latest registry.example.com/my-httpd:latest
podman push registry.example.com/my-httpd:latest
六、虚拟化性能优化
6.1 KVM性能优化
# 1. 启用KSM(Kernel Same-page Merging)
sudo systemctl enable ksm
sudo systemctl start ksm
# 2. 配置巨页(Huge Pages)
# 查看当前巨页配置
cat /proc/meminfo | grep Huge
# 配置巨页
echo 256 > /proc/sys/vm/nr_hugepages
# 永久配置
echo "vm.nr_hugepages = 256" | sudo tee -a /etc/sysctl.conf
# 3. 启用vhost_net(网络性能优化)
sudo modprobe vhost_net
# 4. 配置CPU模式(host-passthrough性能最好)
virsh edit vm1
# 修改<cpu mode='host-passthrough'/>
# 5. 使用virtio驱动(性能最好)
# 磁盘使用virtio:
--disk path=/var/lib/libvirt/images/vm1.qcow2,format=qcow2,bus=virtio
# 网络使用virtio:
--network bridge=br0,model=virtio
6.2 容器性能优化
# 1. 使用systemd管理容器
podman generate systemd --name my-centos --files
sudo cp container-my-centos.service /etc/systemd/system/
sudo systemctl enable container-my-centos.service
sudo systemctl start container-my-centos.service
# 2. 限制容器资源
podman run -d --name limited-container \
--cpus=2 \
--memory=2g \
--memory-swap=3g \
centos:8 sleep infinity
# 3. 使用tmpfs挂载(内存文件系统)
podman run -d --name tmpfs-container \
--tmpfs /tmp \
centos:8 sleep infinity
# 4. 查看容器资源使用
podman stats
七、虚拟化安全加固
7.1 KVM安全加固
# 1. 禁用不必要的服务
sudo systemctl disable --now telnet.socket
sudo systemctl disable --now rsh.socket
# 2. 配置防火墙允许VNC(如果需要)
sudo firewall-cmd --permanent --add-port=5900-5905/tcp
sudo firewall-cmd --reload
# 3. 使用TLS加密VNC连接
# 生成证书(需要TLS证书)
virsh vncdisplay vm1
# 使用SSH隧道加密VNC:ssh -L 5900:localhost:5900 user@kvm-host
# 4. 启用SELinux(如果支持)
getenforce
sudo setenforce Enforcing
# 5. 限制虚拟机资源访问
virsh edit vm1
# 添加<resource>/>
7.2 容器安全加固
# 1. 使用非root用户运行容器
podman run -d --name non-root --user 1000:1000 centos:8 sleep infinity
# 2. 启用容器安全选项
podman run -d --name secure-container \
--security-opt no-new-privileges \
--read-only \
--cap-drop ALL \
centos:8 sleep infinity
# 3. 使用Seccomp配置文件
podman run -d --name seccomp-container \
--security-opt seccomp=/etc/containers/seccomp.json \
centos:8 sleep infinity
# 4. 扫描容器漏洞
podman scan my-httpd:latest
# 5. 使用签名镜像
podman image trust set -t signed registry.example.com
八、常见问题排查
8.1 KVM虚拟化问题
问题1:虚拟机无法启动,报错”no network with matching name ‘default'”
# 解决方案:启动default网络
virsh net-list --all
virsh net-start default
virsh net-autostart default
问题2:虚拟机性能很差
# 解决方案:
# 1. 确保使用virtio驱动
virsh edit vm1
# 修改磁盘和网卡为virtio
# 2. 启用KSM
sudo systemctl start ksm
# 3. 使用host-passthrough CPU模式
virsh edit vm1
# 修改<cpu mode='host-passthrough'/>
问题3:无法连接到虚拟机控制台
# 解决方案:
# 1. 检查VNC端口
virsh vncdisplay vm1
# 2. 使用SSH隧道
ssh -L 5900:localhost:5900 user@kvm-host
# 3. 使用virt-viewer
virt-viewer vm1
8.2 容器问题
问题1:容器无法访问网络
# 解决方案:
# 1. 检查容器网络
podman network ls
# 2. 使用host网络(测试用)
podman run -d --net=host centos:8 sleep infinity
# 3. 重启podman服务
sudo systemctl restart podman
问题2:容器存储占用过多
# 解决方案:
# 1. 清理停止的容器
podman container prune
# 2. 清理未使用的镜像
podman image prune -a
# 3. 清理所有未使用资源
podman system prune -a
九、总结
CentOS Stream 8完全支持虚拟化! 主要支持两种虚拟化技术:
- KVM虚拟化:
- 完全支持,性能优异
- 使用libvirt管理
- 支持快照、热添加资源等高级功能
-
推荐使用virtio驱动提升性能
-
容器虚拟化:
- 推荐使用Podman(Docker的替代品)
- 无需daemon,更安全
- 兼容Docker命令
- 支持systemd集成
核心要点:
– CentOS Stream 8是RHEL 8的上游版本,适合需要前沿功能的场景
– KVM虚拟化需要CPU支持Intel VT-x或AMD-V
– 推荐使用桥接网络让虚拟机获得独立IP
– Podman是CentOS Stream 8推荐的容器运行时
– 定期更新系统以获得安全补丁:sudo yum update -y
通过本文的指南,你可以在CentOS Stream 8上顺利部署和管理KVM虚拟机及容器,构建灵活的虚拟化环境。
注:本文基于CentOS Stream 8编写,具体配置可能因版本差异而略有不同。