写点什么

如何在 Azure Stack 中自定义虚拟机镜像?

  • 2017-10-01
  • 本文字数:4497 字

    阅读完需:约 15 分钟

Azure Stack 环境中服务的提供者或运营者从微软变成了 Azure Stack 集成环境的运营者,通过 Azure Stack 的 MarketPlace,我们可以根据用户的特定需求,提供一些定制化的应用,获得与公有云不一样的用户体验。本文将主要介绍如何在 Azure Stack 的 MarketPlace 中如何添加一个自定义的虚拟机镜像并定制满足需求的 Gallery Item,同时通过自服务的模式提供给业务的消费者。 这一篇,我们将探讨以下几个问题:

  • 如何制作自定义镜像
  • 从自定义镜像创建虚拟机的几种方式
  • 如何创建自定义的 Gallery Item

制作自定义镜像

Azure Stack 的镜像分为 generalized 和 specialized 两种不同的形式。 Generalized 镜像中已经删除了所有个人账户信息及一些其它数据,可以作为模板来创建一个或者多个虚拟机。微软在 Windows 和 Linux 下都提供了相应的工具来 generalize 镜像,Windows 下可以采用 Sysgrep,Linux 下可以安装 Azure Linux Agent,执行 sudo waagent –deprovision 来实现。 Specialized 镜像中保留了原始虚拟机中的用户账户、应用程序和其它状态数据,可以作为模板创建一台虚拟机。Specialized 镜像可以看作是原始虚拟机在某个时间的的 snapshot。 镜像既可以从 Azure Stack 或者 Azure 上运行的虚拟机来制作,比如捕获或者克隆虚拟机,也可以将在本地基于 Hyper-V Manager 启动的虚拟机导出作为镜像。几种不同的自定义镜像的详细制作过程请参考下面链接:

从自定义镜像创建虚拟机

在获得虚拟机镜像之后,如何在 Azure Stack 中根据镜像创建虚拟机? 这部分介绍如何将本地 VHD 镜像上传到 Azure Stack 中,并且创建虚拟机。Azure Stack 中可以通过 Portal、PowerShell,ARM Template 等方式来进行相应的操作,这些操作包括 2 步:

  • 上传本地 VHD 镜像到 Azure Stack 上
  • 创建虚拟机

通过 Portal 新建存储账户并上传本地镜像

  • 登陆 Azure Stack

  • 新建存储账户

  • 新建 Blob Container,名字为 vhds

  • 将本地 VHD 文件以 PageBlob 的类型上传到新建的 Container 中

通过 ARM Template 从镜像创建新的虚拟机

镜像上传后,就可以开始创建虚拟机了。从 VHD 创建虚拟机有两种模式:Attach 和 From-Image。Attach 模式下,VHD 文件是直接附加到新建的虚拟机上。因此采用 Attach 模式,一个 VHD 文件只能创建一台虚拟机。而 From-Image 模式,首先会将 VHD 文件复制一份到指定的 Blob Container 中,然后将 VHD 的副本附加到虚拟机上,因此可以从一个 generalized VHD 创建多台虚拟机。

这里采用 ARM Template 来创建虚拟机, ARM Template 的使用方式及创建虚拟机的完整 Template 可以在 AzureStack-QuickStart-Templates 上获得,这里仅提供两种模式下不同的部分来进行对比分析:

  • Attach 模式

Attach 模式下只需要提供 vhd 的 uri,createOption 采用"Attach" 这里 parameters(‘osDiskVhdUri’) 为

也就是前面通过 Portal 上传的 VHD 文件的 URL。

Attach 模式流程:

  • From-Image 模式

From-Image 模式下需要提供 image 的 uri 和 vhd 的 uri, createOption 采用 FromImage variables(‘userImageUri’) 为前面用 Portal 上传的 VHD 文件的 URL

而 variables(‘osDiskVhdUri’) 为

是用户指定的新的虚拟机绑定的 VHD 文件,实际上是 CentOS7-AzureStack-WithAgent.vhd 的副本。

注:这里为了方便,将 CentOS7-AzureStack-WithAgent.vhd 和 testVM.vhd 放在了同一个 Blob Container 中。实际上,副本 VHD 可以放在其他的存储账户中,并且名字也可以根据需要设置。

From-Image 模式流程:

Azure Stack 镜像库

上一节中介绍了如何上传镜像及通过 ARM Template 从镜像创建虚拟机。VHD 镜像上传到我们自己新建的存储账号中。创建虚拟机的时候直接通过 Blob 的 URL 来定位镜像文件。

那么除了用户自己维护镜像的存储,Azure Stack 有没有提供一个统一的镜像库来方便的存储镜像呢?除了用 URL 来标识和定位镜像,有没有别的方式来唯一指定镜像呢?

答案是有。本节讨论 Azure Stack 的镜像库,主要介绍下面几个问题:

  • 自定义镜像上传到镜像库
  • 镜像库中镜像的标识
  • 从镜像库中的镜像创建虚拟机

通过 Admin Portal 上传自定义镜像到镜像库

Azure Stack 的镜像库在 Resource Provider 的 Compute 当中,需要 admin 权限才能进行操作。

1、从 admin portal 用 admin 账号登陆 Azure Stack

admin portal 地址:

2、点击 Resource Providers-- 点击 Compute–VM images

可以看到目前已经上传到镜像库中的所有镜像。

3、点击 Add,填写镜像的相应标识信息,然后点击 Create

其中 OS Disk Blob URI: 就是我们上一小节中上传的 VHD 镜像的 Blob URL, 也即:

注: 由于上一小节是在 tenant portal 进行的操作,这里实际上需要在 admin portal 重新执行一遍。

4、成功后,即将镜像上传到了镜像库中

镜像库中镜像的标识

在上传镜像的过程中,我们需要填写一些相关信息,如 PUBLISHER, OFFER, SKU, VERSION, OSTYPE, OS DISK BLOB URI,那么这些信息到底有什么用呢?在点击了 Create 后,发生了什么过程呢?

实际上主要发生了两步:

1、将 OS DISK BLOB URI 指定的 vhd 文件复制到 VM Images 库中

在我们的 POC 测试环境中,镜像库位于 C:\ClusterStorage\Volume1\Shares\SU1_Infrastructure_1\CRP\PlatformImages 中,可以看到有两个文件夹,对应着我们在镜像库中的两个镜像。

2、生成该镜像的对应的 Manifest 文件,用来标识该镜像。

进入刚刚上传的镜像对应的文件夹中可以看到,除了存在着一个复制过来的 VHD 文件外还有一个 Manifest 文件。

Manifest 文件的内容如下:

Manifest 文件中包含了前面填写的 PUBLISHER, OFFER, SKU, VERSION, OSTYPE 信息,也包含了镜像文件在镜像库中的存储位置以及镜像是从哪里复制过来的。

其中 PUBLISHER, OFFER, SKU, VERSION, OSTYPE 唯一标识了当前的镜像。通过这些标识信息,就可以指定用该镜像创建虚拟机。

从镜像库中的镜像创建虚拟机

有了镜像的唯一标识信息,就可以创建虚拟机,前面小节介绍了如何通过 ARM Template 来创建虚拟机,这里则通过 PowerShell 来创建。

在 vmConfig 中通过标识信息来指定用我们刚刚上传的镜像来创建新的虚拟机。

自定义 Gallery Item

前面的几个小节介绍了从自定义镜像创建虚拟机的几种方式,无论是采用 PowerShell 还是 ARM Template,都需要一定的编程基础,那么有没有一种方式,可以在 Portal 上通过点击操作来创建自定义的虚拟机呢?本节就介绍如何为自定义镜像在 Portal 上创建图标,也就是 Gallery Item。

什么是 Gallery Item

简单的理解,在 Azure 中我们可以通过如下方式创建虚拟机:

如图点击对应的图标,就可以弹出创建虚拟机的界面:

不需要配置任何的开发环境,不需要一定的编程基础,只要点击,就可以弹出创建虚拟机的相关步骤和需要填写的项,来快速的创建一台虚拟机。

在 Azure Stack 中同样可以实现!

利用 Azure Stack Tool 创建 Gallery Item

在 Azure Stack 深入浅出系列的上一篇中介绍了 Azure Stack 运维工具 Azure Stack Tools 的使用,新版本的 Azure Stack Tools 提供了 Add-AzsVMImage 方法来实现:

执行上面的指令后就可以实现与 Azure 类似的通过 Portal 来创建虚拟机

更多 Azure Stack Tools 的内容请参考: Azure Stack Tools

深入理解自定义 Gallery Item 的流程

利用 Azure Stack Tools 的 Add-AzsVMImage 可快速的实现自定义 Gallery Item。那么 Add-AzsVMImage 到底封装了什么操作?自定义 Gallery Item 需要经过哪些过程呢? Add-AzsVMImage 主要做了 2 个工作:

  • 将本地 VHD 文件上传到 Azure Stack 的镜像库
  • 为镜像库中的镜像创建 Gallery Item

将本地 VHD 文件上传到 Azure Stack 镜像库

将镜像上传到镜像库的过程前面已经介绍过了,Add-AzsVMImage 所进行的操作与前面介绍的相同,流程如下:

  • 在 Azure Stack 中创建新的临时资源组,存储账号,Blob Container
  • 将本地 VHD 文件上传到新建的 Container 中
  • 将临时存储账户中的 VHD 文件的 BLob URL 作为 OS DISK BLOB URI 的值,Add-AzsVMImage 指令中的参数 publisher, offer, sku, version, osType 的值作为 PUBLISHER, OFFER, SKU, VERSION, OSTYPE 的值,在镜像库中添加新的镜像
  • 删除创建的临时资源组,包括其中的存储账号、Container 以及临时的 VHD 文件

为镜像库中的镜像创建 Gallery Item

本小节将通过 PowerShell 来详细分析自定义 Gallery Item 的流程。主要分为以下几步:

  • 填写相应的 Json 描述文件
  • 生成 azkpg 包
  • 生成 Gallery Item

1、首先创建下面的目录结构及文件:

其中 DeploymentTmeplates、Icons、strings 为文件夹的名字。Icons 下面存放的是图标文件,可以选择自己需要的 png 文件进行替换。

注:可以从 github 上下载 CustomizedVMGalleryItem.azpkg,然后重命名为 CustomizedVMGalleryItem.zip。解压后删除掉多余的文件,只留下上面目录结构和文件。

下载地址

2、编辑 Manifest 文件:

Manifest 文件包含了一些对图标的描述,包括名字,发布者,版本,图标样式等信息。也就是对下图中 CentOS 7.2 的一些描述。

3、编辑 UIDefinition.json

UIDefinition 定义了在创建新的虚机时 UI 显示的步骤和内容,有两种类型 一种是 Azure 的默认类型 CreateVMWizardBlade,如下图共 四步,一般都采用这种类型比较好。

另一种是 DeployFromTemplateBlade 类型,这种需要在 DeploymentTemplates 文件夹下,填写需要显示的内容,感兴趣的读者可以深入研究一下。

4、编辑 DeplymentTemplates\CreateUIDefinition.json

ImageReference 中可以设置下面的属性来表示采用的镜像:

5、编辑 Strings\resources.resjon 里面主要是 Manifest.json 中用到的几个变量的详细信息

6、生成 azkpg 包

-> 使用工具 AzureGalleryPackager,下载地址

-> 解压,进入目录

-> 执行 powershell 指令

.\AzureGalleryPackageGenerator\AzureGalleryPackager.exe -m C: \CentOS.72\Manifest.json -o C:\InesaMarketPlaceItems

-> 执行成功后会在 InesaMarketPlaceItems 文件夹下生成相应的 azkpg 文件 Inesa.CentOS72.1.0.0.azpkg 。

7、上传 azkpg 文件到 Blob 中,并记录文件在 Blob 中的 URL

8、执行下列 PowerShell 指令,根据 azkpg 文件生成 Gallery Item

其中, https://itemstore.blob.local.azurestack.external/templates/Inesa.CentOS72.1.0.0.azpkg 是上传的文件的 Blob URI

经过上面的 8 步,已经可以实现创建 Gallery Item 的功能,实际上,Add-AzsVMImage 中也是根据这个过程来实现的。

利用 Publishing Tool 来添加 Gallery Item

在前面小节中,需要执行 PowerShell 指令来添加 Gallery Item。随着 Azure Stack GA,微软提供了一个 Publishing Tool 来实现可视化的添加 Gallery Item。界面如下图:

Publishing Tool 的详细使用教程: Add marketplace items using publishing tool

总结

通过本文,我们了解了如何创建自定义的虚拟机镜像,并且通过自定义镜像来创建虚拟机,为自定义镜像创建 Gallery Item 等。从较简单的例子入手,逐步深入,来介绍 Azure Stack Tools 中 Add-AzsVMImage 所做的工作,希望能够对读者有一定的启发。

感谢江柳对本文的审校。

2017-10-01 18:451692

评论

发布
暂无评论
发现更多内容

链路传播(Propagate)机制及使用场景

观测云

APM 链路

山寨币发展的崛起:随着比特币 ETF 重新定义市场动态,山寨币激增

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

鸿蒙开发:于前端开发而言是福音还是挑战?

EquatorCoco

华为 前端开发 HarmonyOS 鸿蒙开发

低代码开发视角下的大模型时代:探索“新思维”技术管理

不在线第一只蜗牛

人工智能 低代码 大模型 AI模型

测试开发高薪私教线下班手把手带你提升职业技能

霍格沃兹测试开发学社

追求成长还是追求“高薪”?

老张

个人成长 能力提升

一起畅玩!幻兽帕鲁服务器华为云搭建教程(Windows平台)

YG科技

深度解析Android APP加固中的必备手段——代码混淆技术

雪奈椰子

【教程】如何在苹果手机上查看系统文件?

雪奈椰子

如何快速上手Visio?从入门到精通 | Visio替代软件,建议收藏!

彭宏豪95

效率工具 在线白板 架构图 绘图软件 Visio

Atlassian为Jira、Confluence引入AI新功能,进一步释放团队潜能

龙智—DevSecOps解决方案

AI Atlassian

Go语言对象池实践

FunTester

软件测试/测试开发|给你剖析闭包与装饰器的魔力

霍格沃兹测试开发学社

中国信通院筹备启动“边缘算力网络推进计划”,招募首批成员单位

信通院IOMM数字化转型团队

边缘计算 边缘算力网络

一站式解决对接问题,让企业管理更轻松!

聚道云软件连接器

案例分享

媒体声音|PolarDB再升级:欢迎来到云数据库 x AI新时代

阿里云瑶池数据库

人工智能 数据库 云计算 阿里云 云原生

2024 年入局大模型:是否为时已晚?

快乐非自愿限量之名

人工智能 AI技术 GPT

中国信通院正式启动视联网产业与技术研究工作

信通院IOMM数字化转型团队

中国信通院 视频行业 视联网

IPQ9554 and IPQ9574 difference - the biggest difference point?

wifi6-yiyi

ClickHouse分析效率翻倍提升,揭秘奇点云对归因分析场景的优化实践

奇点云

奇点云 clickhosue DataKun

演讲回顾 | 清晖资深讲师分析敏捷实践的最新趋势,帮助大型企业落地敏捷开发

龙智—DevSecOps解决方案

敏捷 Atlassian

用Python实现高效数据记录!Web自动化技术助你告别重复劳动!

霍格沃兹测试开发学社

【第七在线】智能商品计划:重塑服装行业的供应链管理

第七在线

2024年值得推荐的 API 开发工具

快乐非自愿限量之名

推荐 测试 开发工具 API

测试开发高薪私教线下班手把手带你提升职业技能

测试人

软件测试

云手机与实体手机的对比

Ogcloud

云手机 海外云手机 跨境电商云手机 tiktok云手机 云手机海外版

独立站的客户支持体系:提高客户满意度的秘密武器

技术冰糖葫芦

API

如何降低微服务复杂度丨云栖大会微服务主题分享实录

阿里巴巴云原生

阿里云 微服务 云原生

WorkPlus打造高效协作的即时通讯工具,提升工作效率

WorkPlus

WorkPlus开启高效沟通新时代,领先的IM工具之选

WorkPlus

如何在Azure Stack中自定义虚拟机镜像?_微软_刘建志_InfoQ精选文章