Skip to content

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 容器:
    bash
    podman 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
    bash
    dnf 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 创建虚拟机:
    bash
    dnf 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
    bash
    dnf install -y virt-manager  # 安装 virt-manager 图形工具
  • 启动 virt-manager(需 X11 转发,参考 SecureCRT 设置):
    bash
    virt-manager  # 启动 virt-manager 管理虚拟机

18.3.4 Kubernetes 基础集成

  • 安装 minikube for single-node Kubernetes:
    bash
    dnf install -y minikube  # 安装 minikube
    minikube start --driver=libvirt  # 使用 libvirt 驱动启动 minikube
  • Deploy httpd pod:
    bash
    kubectl 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 实践任务

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

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

Released under the MIT License.