Appearance
18. 容器与虚拟化基础
本章节指导在 RHEL 8.10(主机名 ZSLinux)上使用 SecureCRT 配置容器和虚拟化环境,配合 SecureFX 传输配置文件。内容涵盖 Podman 容器管理、Docker 兼容性、KVM 虚拟化和 Kubernetes 基础集成,以 httpd 容器和 KVM 虚拟机为例,全面实用,适合初学者快速掌握和运维人员日常维护。所有操作在 ZSLinux 环境中测试,确保实验一致性。
18.1 前提条件
- RHEL 8.10 已安装(参考第 1 章),主机名设置为
ZSLinux. - 使用 SecureCRT 登录(SSH2 协议,端口 2222,参考第 6 章).
- 使用 SecureFX 传输文件(SFTP 协议).
- 具有 root 或 sudo 权限.
- 系统已订阅并启用 RHEL 和 EPEL 仓库(参考第 4 和 7 章).
- 防火墙和 SELinux 启用(参考第 13 章).
- 网络连接正常,时间同步配置完成(参考第 3 章).
18.2 容器管理
18.2.1 配置 Podman
- 安装 Podman:bash
dnf install -y podman # 安装 Podman 容器工具 - 配置防火墙和 SELinux:bash
firewall-cmd --permanent --add-port=8080/tcp # 允许 HTTP 容器端口 firewall-cmd --reload # 应用防火墙规则 setsebool -P httpd_can_network_connect 1 # 允许 httpd 容器网络连接
18.2.2 运行和管理容器
- 运行
httpd容器:bashpodman pull registry.access.redhat.com/ubi8/httpd-24 # 拉取 Red Hat UBI httpd 镜像 podman run -d -p 8080:8080 --name webserver registry.access.redhat.com/ubi8/httpd-24 # 运行 httpd 容器,映射端口 - 管理容器:bash
podman ps -a # 列出所有容器状态 podman images # 列出本地镜像 podman stop webserver # 停止容器 podman rm webserver # 删除容器
18.2.3 配置容器网络和存储
- 创建 Podman 网络:bash
podman network create mynetwork # 创建自定义网络 podman run -d -p 8080:8080 --name webserver --network mynetwork registry.access.redhat.com/ubi8/httpd-24 # 在自定义网络运行容器 - 配置持久化存储:bash
mkdir -p /var/lib/webdata # 创建持久化存储目录 podman run -d -p 8080:8080 --name webserver -v /var/lib/webdata:/var/www/html registry.access.redhat.com/ubi8/httpd-24 # 挂载本地目录
18.2.4 Docker 兼容性
- 安装 Docker CE(若需要):bash
dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo # 添加 Docker CE 仓库 dnf install -y docker-ce docker-ce-cli containerd.io # 安装 Docker CE systemctl enable --now docker # 启用并启动 Docker 服务 - 迁移 Podman 容器到 Docker:bash
podman export webserver > webserver.tar # 导出 Podman 容器 docker import webserver.tar myhttpd:latest # 导入到 Docker docker run -d -p 8080:80 myhttpd:latest # 运行 Docker 容器
18.3 虚拟化管理
18.3.1 配置 KVM
- 安装 KVM 和
libvirt:bashdnf install -y @virtualization # 安装 KVM 和虚拟化工具 systemctl enable --now libvirtd # 启用并启动 libvirt 服务 - 配置防火墙:bash
firewall-cmd --permanent --add-service=libvirt # 允许 libvirt 服务 firewall-cmd --reload # 应用防火墙规则
18.3.2 创建虚拟机
- 使用
virt-install创建虚拟机:bashdnf install -y virt-install # 安装 virt-install 工具 virt-install --name testvm --ram 2048 --vcpus 2 --disk size=10 --os-variant rhel8.10 --location /path/to/rhel-8.10.iso --noautoconsole # 创建 RHEL 8.10 虚拟机
18.3.3 使用 virt-manager
- 安装
virt-manager:bashdnf install -y virt-manager # 安装 virt-manager 图形工具 - 启动
virt-manager(需 X11 转发,参考 SecureCRT 设置):bashvirt-manager # 启动 virt-manager 管理虚拟机
18.3.4 Kubernetes 基础集成
- 安装
minikubefor single-node Kubernetes:bashdnf install -y minikube # 安装 minikube minikube start --driver=libvirt # 使用 libvirt 驱动启动 minikube - Deploy
httpdpod:bashkubectl create deployment httpd --image=registry.access.redhat.com/ubi8/httpd-24 # 创建 httpd 部署 kubectl expose deployment httpd --port=8080 --type=NodePort # 暴露服务
18.4 验证
- 验证 Podman 容器:bash
podman ps -a # 检查容器状态 curl http://localhost:8080 # 测试 httpd 容器访问 podman inspect webserver | grep Network # 检查容器网络配置 - 验证 Docker:bash
docker ps -a # 检查 Docker 容器状态 systemctl status docker # 检查 Docker 服务 - 验证 KVM 虚拟机:bash
virsh list --all # 列出所有虚拟机 virsh start testvm # 启动虚拟机 - 验证 Kubernetes:bash
kubectl get pods # 检查 pod 状态 kubectl get services # 检查服务暴露端口 - 测试 SSH 连接:bash
ssh -p 2222 testuser@ZSLinux # 测试 SSH 连接(参考第 6 章) - 常见问题:
- 容器无法访问:检查防火墙(
firewall-cmd --list-ports)或 SELinux(ausearch -m avc)。 - KVM 虚拟机不启动:确认
libvirtd状态(systemctl status libvirtd)或 ISO 文件路径。 - Kubernetes 部署失败:检查
minikube状态(minikube status)或 Podman/Docker 驱动。
- 容器无法访问:检查防火墙(
18.5 实践任务
- 使用 SecureCRT 登录
ZSLinux,运行httpd容器并验证网页访问。 - 配置 Podman 持久化存储并测试数据保留。
- 创建 KVM 虚拟机并验证其状态。
- 部署
minikube和httpdpod,验证服务访问。
18.6 自测问题
- 问题:如何查看运行中的容器?
- 答案:
podman ps -a
- 答案:
- 问题:如何创建 KVM 虚拟机?
- 答案:
virt-install --name testvm --ram 2048 --vcpus 2 --disk size=10 --os-variant rhel8.10 --location /path/to/rhel-8.10.iso
- 答案:
- 问题:如何启动 minikube?
- 答案:
minikube start --driver=libvirt
- 答案:
