浅尝 xen 虚拟化

news2024/10/7 9:26:29

前言

之前分享过使用 oVirt 部署私有虚拟化环境, oVirt 是基于 KVM 虚拟化开发了一系列的管理工具, 以 Web Console /CLI 的方式交付使用. 今天记录和分享的是在 VMware Workstation 中使用 Alpine 作为基础操作系统部署 xen 虚拟化环境的简单测试.

xen 基本概念

xen 可以理解为对标 kvm, 都是偏底层的虚拟化技术. 在此基础上进行开发的商业级应用可以对标 RHEV / oVirt 这样的产品, 例如:

  • Citrix XenServer
    在这里插入图片描述

  • Oracle VM Server for x86
    在这里插入图片描述

  • Huawei FusionSphere
    在这里插入图片描述
    xen 中最基础的概念就是 dom0, 可以理解为是 oVirt 中的 Manager Node, 主要功能就是用来管理整个虚拟环境. 不过 dom0 是在创建 xen 环境时自动/必须启动的第一台 VM, 貌似并不能像 oVirt 那样可以用另外一台物理机替代. 而后面再创建的所有其他虚拟机都称之为 domU, 即一个 domU 可以理解为就是一台虚拟机:
    在这里插入图片描述

xen vs KVM

在这里插入图片描述

部署 Dom0

首先下载包含了 xen 依赖的 Alpine ISO 镜像, 直接从清华大学镜像站下载就行, 文件不大, 分分钟搞定, 注意下载包含 xen 的版本:
在这里插入图片描述
在 VMware Station 中新建虚拟机, 安装程序光盘影响选择上面下载好的 ISO 文件, 客户机操作系统选择 其他 Linux 5.x 内核 64 位, 内存分配 1GB, 硬盘 20GB, 网络使用 桥接 (方便后面从本地 SSH 访问), 其他选项默认即可.

启动虚拟机后引导至 alpine 系统, 登陆账号输入 root, 没有密码直接进到系统中. 开始安装过程:

# 初始化 xen 安装
setup-xen-dom0

会有 xenqemu 服务报错的提示, 先不用管它:
在这里插入图片描述

继续标准安装过程, 根据提示完成设置即可.

setup-alpine
  • Hostname 叫成 dom0
  • 桥接 br0 默认网卡 eth1, IP 地址使用静态配置 192.168.1.10/24
  • 选择镜像站点时可以直接输入编号 14 使用清华大学的服务器.
  • 不创建新用户
  • 使用默认 openssh
  • Allow root ssh login? yes (方便后面远程登陆)
  • 安装到磁盘 sda, 安装目的 sys, 安装完成后会自动创建 3 个分区:
    • sda1 /boot
    • sda2 swap
    • sda3 /

标准安装结束后不要着急重启, 还需要额外单独安装两个包:

apk add xen-hypervisor bridge
reboot

首次重启后在出现引导菜单时注意手动切换到 Xen + Linux lts, 否则默认启动的 Linux lts 会报错:
在这里插入图片描述
这时就可以用 SSH 远程登陆, 使用安装时设置的密码登陆 root 账户, 继续下面操作:

# 启用 Alpine community repository
sed -i '3s/#//' /etc/apk/repositories
apk update
# 安装 xen vm 需要用到的 bios 固件
apk add seabios ovmf
# 修改默认引导菜单由 Linux lts 为 Xen + Linux lts
sed -ie '/MENU DEFAULT/d;/LABEL xen-lts/a \ \ MENU DEFAULT' /boot/extlinux.conf

部署 domU

下面操作仍在 dom0 虚机中进行

# 下载 virt 版本的 alpine 系统 ISO 镜像
wget https://mirrors.tuna.tsinghua.edu.cn/alpine/latest-stable/releases/x86_64/alpine-virt-3.18.0-x86_64.iso
# 挂载 ISO
mount -t iso9660 -o loop alpine-virt-3.18.0-x86_64.iso /media/cdrom
# 创建磁盘镜像
dd if=/dev/zero of=/root/a1.img bs=1M count=3000
# 创建配置文件
vi /etc/xen/a1.cfg

a1.cfg 内容:

# Kernel paths for install
kernel = "/media/cdrom/boot/vmlinuz-virt"
ramdisk = "/media/cdrom/boot/initramfs-virt"
extra="modules=loop,squashfs console=hvc0"

# Path to HDD and iso file
disk = [
        'format=raw, vdev=xvda, access=w, target=/root/a1.img',
        'format=raw, vdev=xvdc, access=r, devtype=cdrom, target=/root/alpine-virt-3.18.0-x86_64.iso'
       ]

# Network configuration
vif = ['bridge=br0']

# DomU settings
memory = 512
name = "alpine-dom1"
vcpus = 1
maxvcpus = 1

接下来就可以使用配置文件启动和初始化 domU, -c 参数可以直接连接到启动的 domU 控制台

xl create -f /etc/xen/a1.cfg  -c

开头会提示:

libxl: info: libxl_create.c:122:libxl__domain_build_info_setdefault: qemu-xen is unavailable, using qemu-xen-traditional instead: No such file or directory

这是因为我们没有安装 qemu-xen 这个包, 所以使用了 qemu-xen-traditional 代替, 影响不大.

安装结束后会进入登陆界面, 注意 Kernel 6.1.27-2-virt on an x86_64 (/dev/hvc0), 这里的 /dev/hvc0 就是 xen 的 Hypervisor 对应的设备名称. 使用 root 账号登陆(没有密码)

# 标准化安装 alpine
setup-alpine
  • 主机名 dom1
  • IP 192.168.1.11/24
  • Allow root ssh login? yes
  • 安装磁盘 xvda, 安装模式 sys
  • 其它选项与安装 dom0 的时候一样

安装结束后 reboot 重启系统, 会自动断开当前 domU 的控制台连接, 回到 dom0 的控制台.

xen 常用命令

# 检查 xen 环境基本信息
xl list
Name                                        ID   Mem VCPUs      State   Time(s)
Domain-0                                     0   384     4     r-----      13.2
# 检查当前运行的 domX
xl list
Name                                        ID   Mem VCPUs      State   Time(s)
Domain-0                                     0   384     4     r-----      62.7
alpine-dom1                                    3   512     1     -b----       4.1
# 连接到 alpine-dom1 ID=3 的控制台
xl console 3
# Ctrl + ] 可以退出当前控制台连接, 返回 dom0
# 查看所有 domain 资源占用状态
xentop
# 等同于
xl top

总结

以上只是 xen 虚拟化技术的简单尝试, 对于复杂的虚拟化网络, 存储, 权限等相关配置来说, 还有很深的技术需要挖掘了.

参考资料

Xen Project Beginners Guide
Xen Dom0
Create Alpine Linux PV DomU
xl - Xen management tool, based on libxenlight

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/632711.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chatgpt赋能python:Python的发音

Python的发音 Python是一种广泛使用的编程语言,用于web开发、数据分析、科学计算等众多领域。然而,Python这个词汇的发音在不同的地方却存在差异。在本文中,我们将介绍Python的发音,解决大家的困惑。 发音方式 Python在英语中常…

【数学建模系列】TOPSIS法的算法步骤及实战应用——MATLAB实现

文章目录 TOPSIS简介方法和原理数学定义数学语言描述现实案例 正负理想解定义实例 量纲 TOPSIS法的算法步骤1.用向量规范化的方法求得规范决策矩阵2.构成加权规范阵C(c~ij~)~m*n~3.确定正负理想解的距离4.计算各方案到正理想解与负理想解的距离5.计算各方案的综合评价指数6.排列…

STM32源码阅读记录之HAL库(SystemTick)

问题 HAL_Delay是怎么做到可以延迟控制的? 分析记录 步骤01:看函数本身 void HAL_Delay(uint32_t Delay); /*** brief 此函数根据变量递增提供最小延迟(以毫秒为单位)。* note 在默认的实现中,SysTick计时器是时基的来源。它用…

【Leetcode -225.用队列实现栈 -232.用栈实现队列】

Leetcode Leetcode -225.用队列实现栈Leetcode -232.用栈实现队列 Leetcode -225.用队列实现栈 题目:仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。 …

chatgpt赋能python:Python实践:如何升级pip

Python实践:如何升级pip Python作为一门高效的脚本语言,被广泛应用于数据分析、人工智能、Web开发等领域。而pip则是Python的包管理工具,是开发Python应用的必备工具。但是pip在使用过程中,有时候会出现版本不兼容或者出现漏洞等…

chatgpt赋能python:Python取两位小数的方法

Python取两位小数的方法 介绍 Python是一种高级编程语言,因其简洁易懂、跨平台等特点,被广泛应用于科学计算、数据分析、网站开发、人工智能等领域。在编写Python程序时,我们经常需要将浮点数精确到小数点后几位,比如精确到两位…

【0基础教程】Javascript 里的分组正则Capturing Groups使用方法及原理

一、从最简单开始 现有一个字符串: “1-apple” 需要提取出 1 和 apple 来,对应的正则表达式很简单: ^(\d)-(.)$ 对应的代码也比较简单: const str "1-apple"const regexp /^(\d)-(.)$/let match regexp.exec(str)c…

chatgpt赋能python:Python如何升序输出?从入门到实践!

Python如何升序输出?从入门到实践! 作为一门高级编程语言,Python是目前应用广泛且最为流行的一门语言之一。它逐渐成为开发者的首选语言,因为它易学易用,可读性强,支持多种编程范式,提供了强大…

chatgpt赋能python:如何升级Python的pip版本

如何升级Python的pip版本 如果你使用Python来进行程序开发,那么你一定需要用到pip,它是Python的包管理器,用于安装和管理各种Python库。 不过,一旦你开始使用pip,你可能会遇到一个问题:你的pip版本可能会…

软考A计划-系统架构师-学习笔记-第二弹

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列 👉关于作者 专注于Android/Unity和各种游戏开发技巧&#xff…

前端vue基于原生check增强单选多选插件

前端vue基于原生check增强单选多选插件, 下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id12979 效果图如下: #### 使用方法 使用方法 <!-- 多选组件 checkData&#xff1a;多选数据 change&#xff1a;多选事件 --> <ccCheckView…

FreeRTOS:软件定时器

目录 前言什么是硬件定时器什么是软件定时器 一、回调函数二、定时器的配置2.1软件定时器分类2.2定时器相关API函数2.2.1创建软件定时器2.2.2开启软件定时器2.2.3停止软件定时器2.2.4复位软件定时器 三、软件定时器实验3.1实验要求3.2实验代码 前言 什么是硬件定时器 CPU内部…

Limma | 三个组的差异分析怎么分析做呢!?~

1写在前面 高考结束了&#xff0c;不知道各位考生考的怎么样&#xff0c;这种时候总是几家欢喜几家忧&#xff0c;但这也是实现阶级流动的最佳机会。&#x1f914; 回想自己高考过去10几年了&#xff0c;不能说学了医后悔吧&#xff0c;只能说后悔至极&#xff0c;苦不堪言啊&a…

Linux -- 用户和组

目录 一、root用户&#xff08;超级管理员&#xff09; 1.1 切换用户命令&#xff1a;su 和 exit 命令 1.2 sudo命令 二、用户、用户组 2.1 用户组管理 2.1.1 创建用户组 2.1.2 删除用户组 2.2 用户管理 2.2.1 创建用户 2.2.2 删除用户 2.2.3 查看用户所属组 2.2.…

Linux系统防火墙iptables

目录 一、iptables防火墙概述 1.简介 2.netfilter/iptables关系 3.iptables的四表五链 &#xff08;1&#xff09;四表 &#xff08;2&#xff09;五链 4.数据包过滤的匹配流程 &#xff08;1&#xff09;入站 &#xff08;2&#xff09;转发 &#xff08;3&#xff…

前端vue简单好用的上拉加载下拉刷新组件,支持列表分页 本地分页

前端vue简单好用的上拉加载下拉刷新组件,支持列表分页 本地分页, 下载完整代码请访问uni-app插件市场地址: https://ext.dcloud.net.cn/plugin?id12942 效果图如下: #### 使用方法 使用方法 <!-- pullDown:下拉刷新 back-top: 回到顶部 --> <ccPullScroll class…

OMG--IDL(Interface Definition Language)

OMG--IDL&#xff08;Interface Definition Language&#xff09; 1 概述2 内容缩写IDL 语法和语义概述词法约定ISO Latin-1的字母字符如下表十进制数字字符图形字符格式化字符Tokens注释标识符冲突规则转义标识符关键字IDL识别的其他字符字面量 预处理IDL 语法构建块核心数据类…

dubbo流量录制异常(dubbo2.7.3)的问题解决排查

背景 我们自己基于jvm-sandbox-repeater做的流量录制出现了如下的问题, 从这个问题的堆栈信息来看&#xff0c;是在针对dubbo的调用的时候判断这个dubbo的返回是否有异常的时候&#xff0c;报了空指针异常了。 分析 我们看下具体出错的代码地方是怎么样的吧。 Overridepro…

chatgpt赋能python:Python怎么判断素数:一篇完整指南

Python怎么判断素数&#xff1a;一篇完整指南 Python是一种广泛应用于编程领域的语言&#xff0c;它非常适合初学者。在许多编程任务中&#xff0c;一个常见问题是需要判断一个数字是否是素数。本篇文章将介绍Python是如何判断素数的&#xff0c;并带领读者详细了解其中的细节…

Java入门之String 学习随记(一)

一. 前置知识 API-Application Programming Interface-应用程序编程接口,接口可以简单理解为别人写好的东西,我们拿过来直接使用即可.顾名思义,JavaAPI指的就是JDK提供的各种功能的Java类,它们将底层的实现封装了起来. 二. java.lang.String 该类为字符串,在Java中所有字符串…