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
虚拟机。
【拓展】
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 API
:cockpit-machines
插件通过调用libvirt API
来执行虚拟机管理任务。
WebSockets
和REST API
:Cockpit
使用WebSockets
和REST API
在浏览器和服务器之间进行实时通信。这使得管理员可以通过浏览器界面实时查看和管理虚拟机的状态。前端
UI
: 提供了一个直观的Web
界面,使管理员能够轻松地执行各种管理任务,如创建、启动、停止虚拟机,配置网络和存储,以及查看日志和性能指标。
在开始之前,确保你的服务器上已经安装了 KVM
和 Cockpit
相关的软件包并进行相关配置。以下是在 CentOS/RHEL
和 Ubuntu/Debian
上的安装和配置步骤:
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 服务开机自启
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 服务开机自启
安装完毕后,需要验证相关模块和服务是否成功安装或开启,相关检查如下:
KVM
模块是否加载:lsmod | grep kvm
你应该能看到 kvm
和 kvm_intel
或 kvm_amd
模块(取决于你的 CPU
类型)。
KVM
是否支持硬件虚拟化确保你的 CPU
支持硬件虚拟化技术(如 Intel VT-x
或 AMD-V
)。你可以使用 lscpu
命令来检查:
lscpu | grep -E 'Virtualization|vt-x|amd-v'
你应该能看到类似于以下的输出:
Virtualization: VT-x
或
Virtualization: AMD-V
QEMU-KVM
是否安装确保 qemu-kvm
包已经安装。你可以使用包管理器来检查:
CentOS/RHEL
:
rpm -q qemu-kvm
Ubuntu/Debian:
dpkg -l | grep qemu-kvm
如果 qemu-kvm
已经安装,你会看到包名和版本信息。
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
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
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
sudo firewall-cmd --list-all
Ubuntu
使用 ufw
(Uncomplicated 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
打开网络浏览器并从地址栏导航至如下所示地址登录 Cockpit
控制台。
https://<您的服务器IP>:9090
使用系统的登录账号和密码,访问 cockpit
的 Web
服务,如上图所示。
有一点需要注意,我们安装 cockpit-machines
前后所看到的 Web
控制台界面有所不同,所以如果要通过 Cockpit Web
控制台图形化界面管理虚拟机,一定要安装 cockpit-machines
插件。让我们通过如下两张图片对比一下:
cockpit-machines
之前控制台界面cockpit-machines
之后控制台界面在 Linux
系统中,创建 KVM
虚拟机可以通过多种方式实现,本文列举两种常见的方法:使用 virt-install
命令行工具和通过 Cockpit Web
控制台。这两种方法各有优缺点,适用于不同的使用场景和用户需求。
使用 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
使用 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
命令及其各个参数的详细解析:
--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
的界面,可以帮助你管理和监控 Linux
服务器,包括虚拟机管理。以下是如何使用 Cockpit
来管理虚拟机的步骤。
打开浏览器: 打开你的浏览器,访问 https://
,其中
是你的服务器 IP
地址。登录 Cockpit
: 使用你的服务器用户名和密码登录 Cockpit
。
这里使用 Cockpit Web
控制台可以直接查看到前面通过 virt-install
命令在服务器上创建的虚拟机。
进入虚拟机管理界面: 登录后,点击左侧菜单中的 "虚拟机" 选项。查看虚拟机列表: 在 "虚拟机" 页面,你可以看到所有已定义的虚拟机。你可以启动、停止、暂停和删除虚拟机。创建新的虚拟机: 点击 "创建虚拟机" 按钮。选择虚拟机的类型(如从 ISO
文件安装、从现有磁盘等)。配置虚拟机的资源(如 CPU
、内存、磁盘大小等)。完成配置后,点击 "创建" 按钮创建并启动虚拟机。
管理虚拟机控制台: 点击虚拟机名称,进入虚拟机详细页面。在详细页面中,你可以查看虚拟机的状态、资源使用情况,并可以通过 VNC
控制台连接到虚拟机。
Cockpit
还提供了许多其他管理功能,如系统日志、网络配置、存储管理等。你可以通过左侧菜单中的相应选项进行访问和管理。
通过上述步骤,你可以轻松地使用 Cockpit Web
控制台管理虚拟机。Cockpit
提供了一个直观的界面,使得虚拟机的创建、管理和监控变得更加简单。
Cockpit
是一个强大的基于 Web
的管理界面,专为 Linux
服务器设计,提供了丰富的功能来管理和监控系统资源,其中包括对 KVM
虚拟机的图形化管理。通过 Cockpit
,管理员可以轻松地创建、启动、停止、暂停和删除虚拟机,而无需复杂的命令行操作。
安装 Cockpit
非常简单,只需在 CentOS/RHEL
或 Debian/Ubuntu
系统上运行几个简单的命令即可完成。安装完成后,通过浏览器访问 https://
,使用服务器的用户名和密码登录即可进入 Cockpit
界面。
Cockpit
还提供了虚拟机控制台功能,允许管理员通过 VNC
连接直接与虚拟机交互,进行操作系统安装和日常管理任务。此外,Cockpit
还集成了系统日志、网络配置、存储管理等多种管理工具,使管理员能够全面监控和管理整个系统。
总之,Cockpit
通过其简洁易用的图形化界面,极大地简化了 KVM
虚拟机的管理任务,提高了管理员的工作效率和系统的管理便捷性。无论是初学者还是经验丰富的管理员,都能从中受益。