Cockpit | Web 控制台图形化管理 KVM 虚拟机

文摘   2024-11-05 08:20   江苏  

引言

Cockpit 是一个非常出色的开源项目,是一款强大的基于 Web 的图形界面管理工具,旨在让系统管理员能够通过网页浏览器远程管理 Linux 服务器。它提供了一个用户友好的界面,用于执行多种系统管理任务,包括但不限于用户和组管理、网络设置、防火墙配置、服务管理、日志查看等,它还可以用于监视系统资源使用情况,例如 CPU、内存、磁盘空间等。Cockpit 兼容多个 Linux 发行版,包括 Red Hat、Fedora、CentOS、Ubuntu 等。,并且其安装和配置过程十分简便。

与此同时,Cockpit 通过插件机制提供了强大的扩展能力,可以方便地管理虚拟机、 Kubernetes 集群和 Docker 容器。通过安装 cockpit-machines、 cockpit-kubernetes 和 cockpit-docker 插件,你可以轻松地在 Cockpit 的 Web 界面中创建、管理虚拟机,管理和监控 kubernetes 集群和容器化环境。

本文将主要介绍如何使用 Cockpit 来图形化管理 KVM 虚拟机,并通过实际案例展示其优势。

原理概述

Cockpit 通过集成 libvirt 和 QEMU-KVM 提供了强大的 KVM 虚拟机管理功能。其底层原理包括以下几个方面:

  • libvirt: 提供了一组 API 和守护进程,用于管理和控制虚拟化平台。

  • QEMU-KVM: 结合了 KVM 内核模块和 QEMU 用户空间模拟器,提供了完整的虚拟化解决方案。

  • Cockpit 插件: 特别是 cockpit-machines 插件,扩展了 Cockpit 的功能,使其能够管理 KVM 虚拟机。

  • WebSockets 和 REST API: 用于在浏览器和服务器之间进行实时通信。

通过这种架构,Cockpit 提供了一个直观且高效的 Web 界面,使管理员能够轻松地管理和监控 KVM 虚拟机。

 

拓展

  1. libvirt libvirt 是一个强大的库,提供了一组 API 来管理和控制虚拟化平台。它支持多种虚拟化技术,包括 KVM、Xen、LXC 等。libvirt 包括以下主要组件:

    Cockpit 通过调用 libvirt API 来执行虚拟机管理任务,例如创建、启动、停止、暂停和恢复虚拟机,以及管理磁盘、网络和其他资源。

  • libvirtd: 一个守护进程,负责处理来自客户端的请求,并与虚拟机管理程序(如 KVM)进行交互。

  • libvirt API: 一组 C 语言 API,用于与 libvirtd 进行通信。其他编程语言也可以通过绑定库使用这些 API

  • 命令行工具: 如 virsh,允许用户通过命令行接口管理虚拟机。

  • QEMU-KVM QEMU-KVM 是一个用户空间模拟器,结合了 KVM 内核模块,提供了完整的虚拟化解决方案。KVM 内核模块负责硬件辅助虚拟化,而 QEMU 则提供了设备模拟和用户空间管理功能。

    Cockpit 通过 libvirt 与 QEMU-KVM 进行交互,从而实现对虚拟机的全面管理。

    • KVM 内核模块: 通过硬件辅助虚拟化(如 Intel VT-x 或 AMD-V)提供高性能的虚拟化支持。

    • QEMU: 提供设备模拟(如网卡、磁盘控制器等),并管理虚拟机的生命周期。

  • Cockpit 插件 Cockpit 通过插件机制来扩展其功能。cockpit-machines 插件是专门用于管理 KVM 虚拟机的插件。该插件通过以下方式实现其功能:

    • 集成 libvirt APIcockpit-machines 插件通过调用 libvirt API 来执行虚拟机管理任务。

    • WebSockets 和 REST APICockpit 使用 WebSockets 和 REST API 在浏览器和服务器之间进行实时通信。这使得管理员可以通过浏览器界面实时查看和管理虚拟机的状态。

    • 前端 UI: 提供了一个直观的 Web 界面,使管理员能够轻松地执行各种管理任务,如创建、启动、停止虚拟机,配置网络和存储,以及查看日志和性能指标。

    安装配置

    1. 安装 KVM 虚拟化组件和 Cockpit 管理工具

    在开始之前,确保你的服务器上已经安装了 KVM 和 Cockpit 相关的软件包并进行相关配置。以下是在 CentOS/RHEL 和 Ubuntu/Debian 上的安装和配置步骤:

    • CentOS/RHEL:
    sudo yum install -y qemu-kvm libvirt virt-install libguestfs-tools cockpit cockpit-machines 
    sudo systemctl start cockpit # 启动 cockpit 服务
    sudo systemctl enable cockpit # 设置 cockpit 服务开机自启
    sudo systemctl start libvirtd # 启动 libvirtd 服务
    sudo systemctl enable libvirtd # 设置 libvirtd 服务开机自启
    • Ubuntu/Debian:
    sudo apt-get update
    sudo apt-get install cockpit cockpit-machines virt-manager libvirt-daemon-system
    sudo systemctl start cockpit # 启动 cockpit 服务
    sudo systemctl enable cockpit # 设置 cockpit 服务开机自启
    sudo systemctl start libvirtd # 启动 libvirtd 服务
    sudo systemctl enable libvirtd # 设置 libvirtd 服务开机自启

    安装完毕后,需要验证相关模块和服务是否成功安装或开启,相关检查如下:

    1. 验证 KVM 模块是否加载:
    lsmod | grep kvm

    你应该能看到 kvm 和 kvm_intel 或 kvm_amd 模块(取决于你的 CPU 类型)。

    1. 检查 KVM 是否支持硬件虚拟化

    确保你的 CPU 支持硬件虚拟化技术(如 Intel VT-x 或 AMD-V)。你可以使用 lscpu 命令来检查:

    lscpu | grep -E 'Virtualization|vt-x|amd-v'

    你应该能看到类似于以下的输出:

    Virtualization:          VT-x

    Virtualization:          AMD-V
    1. 验证 QEMU-KVM 是否安装

    确保 qemu-kvm 包已经安装。你可以使用包管理器来检查:

    • CentOS/RHEL:

      rpm -q qemu-kvm
    • Ubuntu/Debian:

      dpkg -l | grep qemu-kvm

    如果 qemu-kvm 已经安装,你会看到包名和版本信息。

    1. 验证 libvirtd 服务是否开启:
    systemctl status libvirtd

    如果 libvirtd 服务正在运行,你会看到类似以下的输出:

    ● libvirtd.service - Virtualization daemon
    Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; enabled; vendor preset: enabled)
    Active: active (running) since Thu 2024-10-31 02:21:20 SAST; 7h ago
    Docs: man:libvirtd(8)
    https://libvirt.org
    Main PID: 745818 (libvirtd)
    Tasks: 21 (limit: 32768)
    Memory: 116.7M
    CGroup: /system.slice/libvirtd.service
    ├─ 2962 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper
    ├─ 2963 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper
    └─745818 /usr/sbin/libvirtd --timeout 120
    1. 验证 cockpit 服务是否开启:
    systemctl status cockpit.socket

    如果 cockpit 服务正在运行,你会看到类似以下的输出:

    cockpit.socket - Cockpit Web Service Socket
    Loaded: loaded (/usr/lib/systemd/system/cockpit.socket; enabled; vendor preset: disabled)
    Active: active (listening) since Thu 2024-10-31 02:21:42 SAST; 19s ago
    Docs: man:cockpit-ws(8)
    Listen: [::]:9090 (Stream)
    Tasks: 0 (limit: 409648)
    Memory: 32.0K
    CGroup: /system.slice/cockpit.socket

    2. 关闭防火墙或放行服务

    1. CentOS/RHEL:

    CentOS 使用 firewalld 作为默认的防火墙管理工具。

    • 停止并禁用firewalld:
    sudo systemctl stop firewalld && sudo systemctl disable firewalld
    • 验证 firewalld 是否已停止:
    sudo systemctl status firewalld

    如果你不想完全关闭防火墙,而是希望放行 Cockpit 服务,可以执行以下命令:

    • 允许 Cockpit 服务通过防火墙:
    sudo firewall-cmd --add-service=cockpit --permanent
    sudo firewall-cmd --reload
    • 验证 Cockpit 服务是否已放行:
    sudo firewall-cmd --list-all
    1. Ubuntu/Debian:

    Ubuntu 使用 ufwUncomplicated Firewall)作为默认的防火墙管理工具。

    • 停止并禁用 ufw:
    sudo ufw disabled
    • 验证 ufw 是否已停止:
    sudo ufw status

    如果你不想完全关闭防火墙,而是希望放行 Cockpit 服务,可以执行以下命令:

    • 允许 Cockpit 服务通过防火墙:

    Cockpit 默认使用 TCP 端口 9090。你可以通过以下命令允许该端口:

    sudo ufw allow 9090/tcp
    • 启用 ufw(如果它当前是禁用状态):
    sudo ufw enable
    • 验证规则是否已添加:
    sudo ufw status

    3. 访问 cockpit 的 Web 服务

    打开网络浏览器并从地址栏导航至如下所示地址登录 Cockpit 控制台。

    https://<您的服务器IP>:9090

    使用系统的登录账号和密码,访问 cockpit 的 Web 服务,如上图所示。

    有一点需要注意,我们安装 cockpit-machines 前后所看到的 Web 控制台界面有所不同,所以如果要通过 Cockpit Web 控制台图形化界面管理虚拟机,一定要安装 cockpit-machines 插件。让我们通过如下两张图片对比一下:

    • 安装 cockpit-machines 之前控制台界面
    • 安装 cockpit-machines 之后控制台界面

    创建虚拟机

    在 Linux 系统中,创建 KVM 虚拟机可以通过多种方式实现,本文列举两种常见的方法:使用 virt-install 命令行工具和通过 Cockpit Web 控制台。这两种方法各有优缺点,适用于不同的使用场景和用户需求。

    使用 virt-install 命令行创建虚拟机

    1) 创建虚拟机磁盘镜像

    使用 qemu-img 命令创建虚拟机的磁盘镜像

    [root@localhost tmp]# qemu-img create -f qcow2 CentOS-Stream-8.img 10G
    Formatting 'CentOS-Stream-8.img', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=10737418240 lazy_refcounts=off refcount_bits=16

    2) 命令行创建虚拟机

    使用 virt-install 命令行创建虚拟机如下:

    virt-install \
    --virt-type kvm \
    --name CentOS-Stream-8 \
    --ram 4096 \
    --vcpus 4 \
    --cdrom=/dev/iso/CentOS-Stream-8-x86_64-20220310-dvd1.iso \
    --disk path=/tmp/CentOS-Stream-8.img \
    --network network=default \
    --graphics vnc,listen=0.0.0.0 \
    --os-type generic \
    --video cirrus

    下面是对 virt-install 命令及其各个参数的详细解析:

    1. --virt-type kvm:

    • 说明: 指定虚拟化类型为 KVM
    • 作用: 确保使用 KVM 内核模块进行虚拟化。
  • --name CentOS-Stream-8:

    • 说明: 指定虚拟机的名称。
    • 作用: 为虚拟机分配一个唯一的名称,方便管理和识别。
  • --ram 4096:

    • 说明: 分配给虚拟机的内存大小(以 MB 为单位)。
    • 作用: 设置虚拟机的内存资源,这里分配了 4096 MB(即 4 GB)内存。
  • --vcpus 4:

    • 说明: 分配给虚拟机的虚拟 CPU 核心数。
    • 作用: 设置虚拟机的 CPU 资源,这里分配了 4 个虚拟 CPU 核心。
  • --cdrom=/dev/iso/CentOS-Stream-8-x86_64-20220310-dvd1.iso:

    • 说明: 指定安装介质(ISO 文件)的位置。
    • 作用: 为虚拟机指定启动时使用的 ISO 镜像文件,这里使用的是 CentOS Stream 8 的安装镜像。
  • --disk path=/tmp/CentOS-Stream-8.img:

    • 说明: 指定虚拟机的磁盘文件路径。
    • 作用: 为虚拟机创建一个磁盘文件,并指定其路径。这里创建了一个名为 CentOS-Stream-8.img 的磁盘文件,位于 /tmp 目录下。
  • --network network=default:

    • 说明: 指定虚拟机的网络配置。
    • 作用: 使用默认的网络配置,通常是 virbr0 桥接网络。
  • --graphics vnc,listen=0.0.0.0:

    • 说明: 指定图形界面的类型和监听地址。
    • 作用: 启用 VNC 图形界面,并设置 VNC 服务器监听所有网络接口(0.0.0.0 表示所有网络接口)。
  • --os-type generic:

    • 说明: 指定操作系统的类型。
    • 作用: 选择通用的操作系统类型。generic 表示通用类型,适用于大多数 Linux 发行版。
  • --video cirrus:

    • 说明: 指定虚拟机的视频设备类型。
    • 作用: 使用 Cirrus 逻辑视频设备。Cirrus 是一种常见的虚拟显卡,适用于大多数操作系统。

    这条 virt-install 命令创建了一个名为 CentOS-Stream-8 的 KVM 虚拟机,分配了 4 GB 内存和 4 个虚拟 CPU 核心。虚拟机使用指定的 ISO 文件进行安装,并创建了一个磁盘文件。网络配置使用默认的桥接网络,图形界面使用 VNC,并监听所有网络接口。操作系统类型设置为通用类型,视频设备使用 Cirrus 逻辑显卡。

    上述命令执行完后,会弹出图形化安装操作系统界面,按照指引一步一步操作即可,安装完毕后,会出现如下界面:

    安装完成后,点击重启系统,该图形化控制台即会重新启动,并弹出虚拟机登录界面如图所示。

    输入用户面和密码,按回车键即可登录虚拟机。

    管理虚拟机

    使用 Cockpit Web 控制台管理虚拟机

    使用 Cockpit Web 控制台管理虚拟机是一种非常方便的方法。Cockpit 是一个基于 Web 的界面,可以帮助你管理和监控 Linux 服务器,包括虚拟机管理。以下是如何使用 Cockpit 来管理虚拟机的步骤。

    1) 访问 Cockpit Web 控制台

    打开浏览器: 打开你的浏览器,访问 https://<your-server-ip>:9090,其中 <your-server-ip> 是你的服务器 IP 地址。登录 Cockpit: 使用你的服务器用户名和密码登录 Cockpit

    这里使用 Cockpit Web 控制台可以直接查看到前面通过 virt-install 命令在服务器上创建的虚拟机。

    2) 管理虚拟机

    进入虚拟机管理界面: 登录后,点击左侧菜单中的 "虚拟机" 选项。查看虚拟机列表: 在 "虚拟机" 页面,你可以看到所有已定义的虚拟机。你可以启动、停止、暂停和删除虚拟机。创建新的虚拟机: 点击 "创建虚拟机" 按钮。选择虚拟机的类型(如从 ISO 文件安装、从现有磁盘等)。配置虚拟机的资源(如 CPU、内存、磁盘大小等)。完成配置后,点击 "创建" 按钮创建并启动虚拟机。

    管理虚拟机控制台: 点击虚拟机名称,进入虚拟机详细页面。在详细页面中,你可以查看虚拟机的状态、资源使用情况,并可以通过 VNC 控制台连接到虚拟机。

    3) 其他功能

    Cockpit 还提供了许多其他管理功能,如系统日志、网络配置、存储管理等。你可以通过左侧菜单中的相应选项进行访问和管理。

    通过上述步骤,你可以轻松地使用 Cockpit Web 控制台管理虚拟机。Cockpit 提供了一个直观的界面,使得虚拟机的创建、管理和监控变得更加简单。

    总结

    Cockpit 是一个强大的基于 Web 的管理界面,专为 Linux 服务器设计,提供了丰富的功能来管理和监控系统资源,其中包括对 KVM 虚拟机的图形化管理。通过 Cockpit,管理员可以轻松地创建、启动、停止、暂停和删除虚拟机,而无需复杂的命令行操作。

    安装 Cockpit 非常简单,只需在 CentOS/RHEL 或 Debian/Ubuntu 系统上运行几个简单的命令即可完成。安装完成后,通过浏览器访问 https://<your-server-ip>:9090,使用服务器的用户名和密码登录即可进入 Cockpit 界面。

    Cockpit 还提供了虚拟机控制台功能,允许管理员通过 VNC 连接直接与虚拟机交互,进行操作系统安装和日常管理任务。此外,Cockpit 还集成了系统日志、网络配置、存储管理等多种管理工具,使管理员能够全面监控和管理整个系统。

    总之,Cockpit 通过其简洁易用的图形化界面,极大地简化了 KVM 虚拟机的管理任务,提高了管理员的工作效率和系统的管理便捷性。无论是初学者还是经验丰富的管理员,都能从中受益。


    Linux二进制
    学习并分享Linux的相关技术,网络、内核、驱动、容器等。
     最新文章