2026年CentOS Stream 8虚拟化支持完全指南:KVM与容器全面解析(2026)

一、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完全支持虚拟化! 主要支持两种虚拟化技术:

  1. KVM虚拟化
  2. 完全支持,性能优异
  3. 使用libvirt管理
  4. 支持快照、热添加资源等高级功能
  5. 推荐使用virtio驱动提升性能

  6. 容器虚拟化

  7. 推荐使用Podman(Docker的替代品)
  8. 无需daemon,更安全
  9. 兼容Docker命令
  10. 支持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编写,具体配置可能因版本差异而略有不同。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注