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 avc,setsebool -P container_manage_cgroup 1(Podman)或virt_use_execmem 1(KVM)。
25.4 实践任务
- 使用 SecureCRT 通过 SSH(端口 2222)登录
LinuxDC,运行httpd容器并验证网页访问。 - 配置 Podman 持久化存储并测试数据保留。
- 创建 KVM 虚拟机并验证其状态。
- 部署
minikube和httpdpod,验证服务访问。
✅ 检查点:容器/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 的使用。这些技能桥接传统虚拟化和现代容器化,为后续云与混合环境集成提供技术基础。