新闻详情

新闻详情

首页 / 资讯中心 / 详情

LinuxKit 在 Microsoft Azure 上的镜像构建与虚拟机部署实战指南

发布时间:2026/11/14 23:13:33来源:尧图网络
LinuxKit 在 Microsoft Azure 上的镜像构建与虚拟机部署实战指南
操作系统云原生容器运行时【免费下载链接】linuxkitA toolkit for building secure, portable and lean operating systems for containers项目地址https://gitcode.com/gh_mirrors/li/linuxkit点击查看免费下载本文以 docs/platform-azure.md 为骨架结合 linuxkit 仓库中src/cmd/linuxkit/run_azure.go、azure.go、push_azure.go等源码实现与 examples/platform-azure.yml 示例配置系统讲解如何将 LinuxKit 构建的镜像上传到 Azure 并创建虚拟机。读完本文你将掌握 Azure 服务主体的认证配置、linuxkit build -format vhd的镜像产出流程、linuxkit run azure一键部署的完整资源创建链路以及镜像不含 Azure Linux Agent 导致门户报创建失败这一已知限制的正确应对方式。一、部署模式概述一次命令全套 Azure 资源LinuxKit 镜像本身是面向容器的极简操作系统在 Azure 上运行的基本思路是用linuxkit build产出 VHD 格式的磁盘镜像再由linuxkit run azure把 VHD 上传到 Azure 存储账户并自动创建一整套运行所需的基础设施资源。执行linuxkit run azure时工具会自动完成以下资源的创建见 run_azure.go 的调用顺序资源组resource group承载后续所有资源存储账户storage account存放上传的 VHD 镜像虚拟网络virtual network与子网subnet网络接口network interface与公网 IPpublic IP虚拟机VM以上传的 VHD 作为 OS 磁盘启动。需要注意的是当前 LinuxKit Azure 镜像不包含 Azure Linux AgentWALinuxAgent。这是理解整个部署体验的关键前提Azure 门户会因为缺少 Agent 而将 VM 创建报告为失败deployment failed但只要 VHD 本身构建正确VM 依然可以正常启动SSH 依然可用由于 Azure 不提供 VM 串口输出serial output的访问能力SSH 是连接这台机器的唯一途径因此镜像中必须包含 sshd 服务下文示例配置会体现。二、前置准备通过服务主体完成 Azure 认证linuxkit run azure与linuxkit push azure都依赖服务主体service principal方式访问 Azure 资源。工具启动时会在 run_azure.go 中通过getEnvVarOrExit强制校验以下四个环境变量缺失任何一个都会直接报错退出环境变量含义获取方式AZURE_TENANT_IDAzure Active Directory 租户 ID 或域名在 Azure 门户中查询服务主体所属的租户信息AZURE_SUBSCRIPTION_IDAzure 订阅 ID登录 Azure 门户后从订阅信息中获取AZURE_CLIENT_IDAzure Active Directory 应用服务主体的 Client ID创建 AAD 应用后获得AZURE_CLIENT_SECRET该应用的密钥Secret创建 AAD 应用时生成并妥善保存服务主体的创建需要先在 Azure Active Directory 中注册一个应用并授权其管理目标订阅下的资源再取得上述 ID 与 Secret。配置好之后linuxkit run azure会在 azure.go 的initializeAzureClients中完成 OAuth2 令牌获取并分别初始化资源组、存储账户、虚拟网络、子网、公网 IP、网络接口与虚拟机七个 Azure SDK 客户端——这正是后续自动化创建资源的底层基础。三、构建 VHD 镜像linuxkit build -format vhd3.1 编写 YAML 配置参照仓库中的官方示例 examples/platform-azure.yml 创建自己的azure.yml。该示例的核心配置如下kernel: image: linuxkit/kernel:6.12.59 cmdline: consolettyS0 init: - linuxkit/init:1c3e4933ceabd7418b961d66d5d884bf0044ac64 - linuxkit/runc:9442aa234715e751a16144f1d4ae3fd1a00fd492 - linuxkit/containerd:eb5daf20704109ea58abb38d2b808e0c3a7e3717 - linuxkit/ca-certificates:256f1950df59f2f209e9f0b81374177409eb11de onboot: - name: sysctl image: linuxkit/sysctl:43ac1d39da329c3567fcb9689e5ca99de6d169b6 services: - name: rngd image: linuxkit/rngd:984eb580ecb63986f07f626b61692a97aacd7198 - name: dhcpcd image: linuxkit/dhcpcd:b87e9ececac55a65eaa592f4dd8b4e0c3009afdb - name: sshd image: linuxkit/sshd:08e5d4a46603eff485d5d1b14001cc932a530858 binds.add: - /root/.ssh:/root/.ssh files: - path: root/.ssh/authorized_keys source: ~/.ssh/id_rsa.pub mode: 0600 optional: true几个对 Azure 场景尤为关键的要点内核命令行consolettyS0指定串口控制台设备。虽然 Azure 不提供串口输出查看能力但保留该参数有助于镜像在通用虚拟化环境中正确输出内核日志sshd服务由于无法通过串口或控制台访问 VMSSH 是唯一的运维入口sshd必须加入services段authorized_keys文件生成一对新的 SSH 密钥把公钥写入files段示例中使用~/.ssh/id_rsa.pubmode: 0600保证私密性optional: true表示本机无此公钥时构建不中断并通过binds.add把宿主机密钥目录挂载进 sshd 容器dhcpcd服务负责在 VM 启动后通过 DHCP 获取 IP 地址是接入 Azure 虚拟网络的基本网络配置。3.2 执行构建linuxkit build -format vhd azure.yml构建成功后当前目录会产出azure.vhd镜像文件。-format vhd是面向 Azure 的标准磁盘格式——Azure 的托管磁盘与存储账户中的 OS 镜像正是以 VHD 形式存在的。构建系统位于 src/cmd/linuxkit/build.go它负责按 YAML 中声明的 kernel / init / onboot / services / files 顺序组装出最终的磁盘镜像。四、一键部署linuxkit run azure4.1 命令与参数linuxkit run azure \ -resourceGroupName resource-group-name \ -accountName storage-account-name \ -location westeurope \ path-to-your-azure.vhd各参数定义可在 run_azure.go 中确认参数默认值说明-resourceGroupName无必填承载 VM 及相关资源的资源组名称-accountNamelinuxkit存储账户名称VHD 将上传至该账户下的linuxkitcontainer容器Blob 名为linuxkitimage.vhd见 azure.go 的常量定义-locationwestusVM 所在地域示例中使用westeurope子命令本身还有一个位置参数imagePath即 VHD 镜像的绝对或相对路径run_azure.go。4.2 完整的执行输出解读以下是文档中给出的典型运行输出结合源码可以逐行还原背后发生了什么Creating resource group in westeurope Creating storage account in westeurope, resource group linuxkit-azure2 2017/05/30 12:51:49 Using default parallelism [8*NumCPU] : 16 Computing MD5 Checksum.. Completed: 98% RemainingTime: 00h:00m:00s Throughput: 272 MB/sec Detecting empty ranges.. Empty ranges : 449/513 Effective upload size: 126.00 MB (from 1024.00 MB originally) Uploading the VHD.. Completed: 100% [ 126.00 MB] RemainingTime: 00h:00m:00s Throughput: 0 Mb/sec Upload completed OS Image uploaded at https://linuxkitazure2.blob.core.windows.net/linuxkitcontainer/linuxkitimage.vhd Creating virtual network in resource group linuxkit-azure2, in westeurope Creating subnet linuxkitsubnet584 in resource group linuxkit-azure2, within virtual network linuxkitvirtualnetwork916 Creating public IP Address in resource group linuxkit-azure2, with name publicip368 publicip368 Started deployment of virtual machine linuxkitvm493 in resource group linuxkit-azure2 Creating virtual machine in resource group linuxkit-azure2, with name linuxkitvm493, in location westeurope NOTE: Since you created a minimal VM without the Azure Linux Agent, the portal will notify you that the deployment failed. After around 50 seconds try connecting to the VM ssh -i path-to-key rootpublicip368.westeurope.cloudapp.azure.com关键细节一随机资源命名。虚拟网络、子网、公网 IP、网络接口和虚拟机名称都由代码在运行时随机生成run_azure.go例如linuxkitvirtualnetwork916、linuxkitsubnet584、publicip368、linuxkitvm493避免与既有资源冲突。关键细节二VHD 上传是高性能并行上传。上传逻辑在 azure.go 的uploadVMImage中实现先通过validator.ValidateVhd/ValidateVhdSize校验本地 VHD 的完整性与尺寸ensureVHDSanity以2 MB 页大小PageBlobPageSize将 VHD 切分为多个 page blob 区域对应输出中的Computing MD5 Checksum调用LocateUploadableRanges与DetectEmptyRanges检测空白区域并跳过不传输——这正是输出中Empty ranges : 449/513、Effective upload size: 126.00 MB (from 1024.00 MB originally)的来源即 1024 MB 的原始镜像实际只需上传约 126 MB以8 * NumCPU的并行度输出中的Using default parallelism [8*NumCPU] : 16即 2 核 CPU 的机器并发上传剩余的有效区域并最终写入 Blob 的 MD5 校验值。关键细节三VM 参数的占位特性。azure.go 的setVirtualMachineParameters显示VM 使用Standard_DS1规格且AdminUsername为unusedUserName、AdminPassword为UnusedPassword!123——源码注释明确说明这些值仅为通过部署校验而设置由于镜像中没有 Azure Linux Agent它们不会被实际使用。同时开启了启动诊断Boot Diagnostics。4.3 创建完成后连接 VM命令结束后等待约50 秒让 VM 完成启动与网络配置然后使用镜像中配置的公钥所对应的私钥进行 SSH 连接前提是镜像中包含 sshd 服务ssh -i path-to-key rootpublicip368.westeurope.cloudapp.azure.com公网域名由createPublicIPAddress中以公网 IP 名称为DomainNameLabel生成azure.go格式为label.region.cloudapp.azure.com。五、仅上传镜像linuxkit push azure如果只是想先把 VHD 推到 Azure 存储账户暂不创建 VM可以使用独立的推送子命令 push_azure.golinuxkit push azure -resource-group resource-group-name -storage-account storage-account-name path-to-azure.vhd它与run azure共用同一套环境变量认证与uploadVMImage上传实现参数命名为-resource-group与-storage-account注意与run azure的-resourceGroupName/-accountName命名差异上传完成后同样得到位于linuxkitcontainer容器中的linuxkitimage.vhd。六、已知限制、规避方式与演进方向原文档对当前实现的边界有非常坦诚的说明结合源码可进一步确认门户误报创建失败核心限制镜像不包含 Azure Linux AgentAzure 门户会在 VM 创建后报告部署失败。这是预期行为只要 VHD 构建正确机器依然可启动、可 SSH。判断 VM 是否真正就绪的方式不是看门户状态而是等待约 50 秒后尝试 SSH。VHD 上传方案当前上传依赖azure-vhd-utils工具库仓库 vendored 于 src/cmd/linuxkit/vendor/github.com/radu-matei/azure-vhd-utils其价值在于通过并行分块与空白区域检测实现对超 1 GB 原始镜像的快速、高效上传。这直接对应本文 4.2 节中的上传输出日志。网络端口开放work in progress目前run azure尚未提供指定 VM 开放端口即网络安全组 NSG 规则的选项相关能力仍在开发中。Azure 元数据支持缺失仓库中的 pkg/metadata 包负责从各云平台元数据服务读取实例信息目前尚不支持 Azure 的元数据服务从源码结构看其 provider 列表如 provider_aws.go、provider_gcp.go 等中确实没有 Azure 对应的 provider 实现。七、小结LinuxKit 在 Azure 上的部署链路已经高度自动化编写 YAML →linuxkit build -format vhd产出 VHD →linuxkit run azure完成上传 建网 建机全流程。理解无 Azure Linux Agent 导致门户误报、以 SSH 就绪为准这一关键心智模型是顺利使用该能力的前提。若需要更精细的运维如端口管控、元数据读取可关注仓库后续演进或结合 pkg/metadata 自行扩展 provider 实现。赞分享操作系统云原生容器运行时【免费下载链接】linuxkitA toolkit for building secure, portable and lean operating systems for containers项目地址https://gitcode.com/gh_mirrors/li/linuxkit点击查看免费下载相关推荐Kata Containers 在 IBM Secure ExecutionSE虚拟机上的部署与安全镜像构建指南Kata Containers 在 IBM Secure ExecutionSE虚拟机上的部署与安全镜像构建指南 导读 本文基于 Kata Containe云原生容器运行时LinuxKit 在树莓派 3B 上的部署实战镜像构建、启动流程与外设支持LinuxKit 在树莓派 3B 上的部署实战镜像构建、启动流程与外设支持 LinuxKit 官方支持在树莓派 3BRaspberry Pi 3b上构建和操作系统云原生容器运行时LinuxKit Hyper-V 后端实战在 Windows 上运行、配置与排查 linuxkit 虚拟机LinuxKit Hyper V 后端实战在 Windows 上运行、配置与排查 linuxkit 虚拟机 本文围绕 LinuxKit 的 Hyper V 运操作系统云原生容器运行时上一篇Light-R1性能优化技巧如何将训练成本控制在1000美元以内下一篇深度解析Atmosphere固件彻底解决Nintendo Switch启动错误的终极指南 创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

【外设】之大彩串口显示屏 2026/11/14 3:51:47

【外设】之大彩串口显示屏

大彩串口屏初步使用 1 .官网下载 STM32 屏幕 GUI 设计资料 http://www.gz-dc.com/category/typeid/4112 找到 STM32 Keil 工程,移植相关代码因项目而异进行移植,由于项目简单,本人只对用到的指令接口进行修改。 比如:注意事项&…

阅读更多 →
无法下载Windows系统iso文件 2026/11/12 23:59:09

无法下载Windows系统iso文件

当我遇到这个问题的时候,我打开了一个网站: 登录 然后我打算下载的时候: 突然那个官方的连接就可以下载了:

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/11/14 10:11:15

【清华代码熊】DeepSeek V4.1 Flash 后训练详解

📌 上期解析了 DeepSeek V4.1 Flash 模型架构改进,本期解析 DeepSeek V4.1 Flash 预训练/后训练技术: 🌟 预训练:45T 文本 多模态混合语料、直接训练 sparse attention(取消 DeepSeek V4 的 dense 冷启动&…

阅读更多 →
Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ... 2026/11/14 17:14:38

Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ...

文章主要内容和创新点 主要内容 本文聚焦于多模态大语言模型(MLLM)强化学习(RL)训练中的效率问题,提出了一个名为Shuffle-R1的框架。研究发现,当前RL训练存在两个关键缺陷: 优势值坍缩(Advantage Collapsing):批次中大多数优势值集中在零附近,导致有效梯度信号被淹…

阅读更多 →
PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction 2026/11/14 16:35:50

PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction

一、文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现个人身份信息(PII)脱敏的研究,旨在解决传统脱敏方法(如基于规则的系统、领域特定命名实体识别(NER)模型)泛化能力差、跨格式/跨语境适应性弱的问题。 研究通过全面评估多种LLM架构(包括密集型LLM(D-LLM…

阅读更多 →
LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model 2026/11/14 3:51:43

LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model

文章主要内容和创新点 主要内容 本文聚焦于二进制图像-文本相关性评估任务(判断图像与文本“相关”或“不相关”),针对该任务中文本格式多样、相关性定义随场景变化等挑战,提出了基于多模态大语言模型(MLLM)的解决方案LLaVA-RE。 模型设计:LLaVA-RE基于LLaVA 1.5架构,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉