跳转至

25. 容器与虚拟化基础

本章节指导在 RHEL 9(主机名 LinuxDC)上使用 SecureCRT 配置容器和虚拟化环境,配合 SecureFX 传输配置文件。内容涵盖 Podman 容器管理、Docker 兼容性、KVM 虚拟化和 Kubernetes 基础集成,以 httpd 容器和 KVM 虚拟机为例,全面实用,适合初学者快速掌握和运维人员日常维护。所有操作在 LinuxDC 环境中测试,确保实验一致性。


25.1 前提条件

  • RHEL 9 已安装(参考第 1 章),主机名设置为 LinuxDC
  • 使用 SecureCRT 登录(SSH2 协议,端口 2222,参考第 9 章)。
  • 使用 SecureFX 传输文件(SFTP 协议)。
  • 具有 root 或 sudo 权限。
  • 系统已订阅并启用 RHEL 和 EPEL 仓库(参考第 2 和第 5 章)。
  • 防火墙和 SELinux 启用(参考第 12 章)。
  • 网络连接正常,时间同步配置完成(参考第 4 章)。
  • KVM 虚拟化支持已启用(检查 lsmod | grep kvm),RHEL 9 ISO 文件已准备(参考第 1 章)。

💡 提示:RHEL 9 默认使用 Podman 作为容器引擎,支持 rootless 操作。在 RHEL 10 中,Podman 和 KVM 支持更多内置 AI 辅助的资源管理和自动化编排,提升虚拟化效率。


25.2 容器管理(Podman)

25.2.1 安装 Podman

  • 安装 Podman:
    dnf install -y podman  # 安装 Podman
    

25.2.2 运行容器(示例:httpd)

  • 拉取并运行容器:

    podman pull registry.access.redhat.com/ubi9/httpd-24  # 拉取 UBI httpd 镜像
    podman run -d --name myhttpd -p 8080:8080 registry.access.redhat.com/ubi9/httpd-24  # 运行容器,映射端口
    

  • 验证容器:

    podman ps -a  # 查看所有容器
    podman logs myhttpd  # 查看日志
    curl localhost:8080  # 测试网页访问
    

🧠 知识点:Podman 无守护进程,支持 pod 概念。防火墙:firewall-cmd --add-port=8080/tcp

25.2.3 配置持久化存储

  • 创建卷并运行容器:

    podman volume create mydata  # 创建卷
    podman run -d --name myhttpd-persist -p 8080:8080 -v mydata:/var/www/html registry.access.redhat.com/ubi9/httpd-24  # 挂载卷
    

  • 测试数据保留:

    podman exec -it myhttpd-persist bash  # 进入容器
    echo "Persistent Data" > /var/www/html/test.html  # 创建文件
    exit
    podman stop myhttpd-persist && podman rm myhttpd-persist  # 移除容器
    podman run -d --name myhttpd-new -p 8080:8080 -v mydata:/var/www/html registry.access.redhat.com/ubi9/httpd-24  # 新容器挂载同一卷
    curl localhost:8080/test.html  # 验证数据保留
    

💡 提示:Podman 支持 Docker 兼容(podman-docker 包)。在 RHEL 10 中,Podman 增强了 volume 加密和自动备份支持。

检查点:数据在新容器中可用。

25.2.4 Docker 兼容性

  • 安装 Docker 兼容层:
    dnf install -y podman-docker  # 启用 Docker CLI 兼容
    docker ps  # 使用 Docker 命令(实际调用 Podman)
    

🧠 知识点:Podman 提供无缝 Docker 迁移,无需 daemon。


25.3 KVM 虚拟化

25.3.1 安装 KVM

  • 安装 KVM 工具:
    dnf install -y @virtualization  # 安装虚拟化组
    systemctl enable --now libvirtd  # 启用 libvirtd 服务
    

25.3.2 创建 KVM 虚拟机

  • 创建虚拟机(示例:RHEL 9 VM):

    virt-install --name testvm --ram 2048 --vcpus 2 --disk size=10 --os-variant rhel9.0 --location /path/to/rhel-9.x-x86_64-dvd.iso --network bridge=virbr0 --graphics none --console pty,target_type=serial
    

  • 管理虚拟机:

    virsh list --all  # 查看所有 VM
    virsh start testvm  # 启动 VM
    virsh console testvm  # 连接控制台(Esc + Ctrl + ] 退出)
    virsh shutdown testvm  # 关闭 VM
    

🧠 知识点:KVM 使用 QEMU 模拟硬件。防火墙:firewall-cmd --add-service=libvirt

检查点virsh list 显示 running,VM 安装完成。


25.4 Kubernetes 基础集成(Minikube)

25.4.1 安装 Minikube

  • 安装 Minikube:
    curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
    install minikube-linux-amd64 /usr/local/bin/minikube  # 安装 Minikube
    minikube start --driver=podman  # 启动 Minikube(使用 Podman 驱动)
    

25.4.2 部署 httpd Pod

  • 配置 kubectl:

    alias kubectl="minikube kubectl --"  # 别名 kubectl
    

  • 创建 Deployment:

    kubectl create deployment httpd --image=registry.access.redhat.com/ubi9/httpd-24  # 创建 httpd Deployment
    kubectl expose deployment httpd --type=NodePort --port=8080  # 暴露服务
    minikube service httpd  # 获取访问 URL
    

  • 验证:

    kubectl get pods  # 查看 Pod 状态
    curl <minikube service URL>  # 测试访问
    

🧠 知识点:Minikube 是单节点 K8s 测试环境。其他驱动:--driver=libvirt(KVM)。

检查点:Pod running,服务可访问。


25.3 常见问题与排查

🔍 故障排查

  • 问题 1:Podman 容器未启动
    解决podman logs <container> 检查日志,podman inspect <container> 查看配置。

  • 问题 2:KVM VM 启动失败
    解决virsh dumpxml testvm 检查 XML,journalctl -u libvirtd 查看日志。

  • 问题 3:Minikube 未运行
    解决minikube status,检查驱动(minikube start --driver=podman)。

  • 问题 4:SELinux 阻挡
    解决ausearch -m avcsetsebool -P container_manage_cgroup 1(Podman)或 virt_use_execmem 1(KVM)。


25.4 实践任务

  1. 使用 SecureCRT 通过 SSH(端口 2222)登录 LinuxDC,运行 httpd 容器并验证网页访问。
  2. 配置 Podman 持久化存储并测试数据保留。
  3. 创建 KVM 虚拟机并验证其状态。
  4. 部署 minikubehttpd pod,验证服务访问。

检查点:容器/KVM/Minikube 运行正常,访问成功。


25.5 自测问题

  • 问题 1:如何查看运行中的容器?
    答案podman ps -a

  • 问题 2:如何创建 KVM 虚拟机?
    答案virt-install --name testvm --ram 2048 --vcpus 2 --disk size=10 --os-variant rhel9.0 --location /path/to/rhel-9.x-x86_64-dvd.iso

  • 问题 3:如何启动 minikube?
    答案minikube start --driver=podman


🧾 总结
本章完整介绍了 RHEL 9 容器与虚拟化基础的配置,包括 Podman、KVM 和 Minikube 的使用。这些技能桥接传统虚拟化和现代容器化,为后续云与混合环境集成提供技术基础。