未经同意,请勿转载!
****本文聚焦租户视角下能做什么、不能做什么、推荐的实操路径------从订阅创建开始,到虚拟网络、NSG、VM、VMSS、监控和 ARM 模板,构成完整的租户操作蓝图。
系列预告 :本篇为 三篇运维实战系列 的第 2 篇(租户篇):
- 第 1 篇(管理员篇):Azure Stack Hub 管理员日常操作 ------ StampInformation、管理员门户、PEP、区域管理、容量监管。
- 第 2 篇(本文·租户篇):用户操作 ------ 订阅创建、虚拟网络、NSG、VM、VMSS、监控、ARM 模板部署。
- 第 3 篇(报修篇):报修与技术支持 ------ Dell + Microsoft 双供应商协同支持流程、SLA 升级路径、紧急联系方式。
版本基础 :本文基于 azs-2005 至当前主流 azs 版本 (覆盖 azs-2002 / 2005 / 2102 / 2206 / 2301 / 2405 / 2503 等)的 Azure Stack Hub Tenant 文档整理。不同 azs 版本以及不同 OEM 集成系统(Lenovo ThinkAgile / Dell APEX / HPE Edgeline 等)之间可能存在差异 ------当版本与本文表述不一致时,以当期版本 Azure Stack Hub User Documentation + 当期 azs 版本 Release Notes 为准。
修订说明:
本篇为 Azure Stack Hub 运维管理三篇系列 · 租户篇首发版,基于内训材料《Azure Stack Hub 运维管理》整理,按四层原则做工程化改写。
目录
- [租户操作全景:从订阅到 ARM 模板的"完整生命周期"](#租户操作全景:从订阅到 ARM 模板的"完整生命周期")
- 租户与管理员的边界:能做什么、不能做什么
- 创建订阅:租户的"入口动作"
- 创建虚拟网络(vNet):租户网络的"主结构"
- 创建网络安全组(NSG):流量控制的"第一道闸"
- [子网关联 NSG:让规则"覆盖整个子网"](#子网关联 NSG:让规则"覆盖整个子网")
- [公共 IP 地址:让 VM 拥有"对外可达性"](#公共 IP 地址:让 VM 拥有"对外可达性")
- 创建虚拟机(VM):完整路径整合
- [VM 大小选择:F2s_v2 与所有可选系列的边界](#VM 大小选择:F2s_v2 与所有可选系列的边界)
- [连接到 VM:RDP 与 NSG 端口的联动](#连接到 VM:RDP 与 NSG 端口的联动)
- 创建虚拟机规模集(VMSS):可横向扩展层
- [VMSS 扩容:手动调实例计数从 2 到 3](#VMSS 扩容:手动调实例计数从 2 到 3)
- [监控 VM 指标:注册 Microsoft.Insights](#监控 VM 指标:注册 Microsoft.Insights)
- [ARM 模板部署:使用快速入门模板](#ARM 模板部署:使用快速入门模板)
- 四层原则落地:租户操作的全景分层
- 三大误判信号:租户最容易踩的坑
- 三条操作红线:租户绝对不能越的边界
- 租户篇小结:八类典型操作的工程化整合
1. 租户操作全景:从订阅到 ARM 模板的"完整生命周期"
Azure Stack Hub 租户(Tenant)在日常运维中需要执行的典型操作集中在以下八类:
Azure Stack Hub 租户日常操作(按典型顺序)
│
┌─────────────────┼─────────────────────┐
│ │ │
第 1 步 第 2 步 第 3 步+
拿订阅 配网络 建资源
│ │ │
▼ ▼ ▼
创建订阅 vNet / NSG / Subnet VM / VMSS / ARM
│
▼
选 Offer
│
▼
订阅上线
核心操作清单(按业务流顺序):
| 步骤 | 操作 | 入口 | L 分类 |
|---|---|---|---|
| 1 | 登录用户门户 | portal.<region>.<FQDN> |
L1 微软硬要求 |
| 2 | 创建订阅 | "所有服务和订阅" → 添加 | L1 微软硬要求 |
| 3 | 创建虚拟网络 | 创建资源 → 虚拟网络 | L1 微软硬要求 |
| 4 | 创建 NSG | 创建资源 → 网络安全组 | L1 微软硬要求 |
| 5 | 子网关联 NSG | vNet → 子网 → 关联 NSG | L1 微软硬要求 |
| 6 | 创建公共 IP | 创建资源 → 公共 IP | L1 微软硬要求 |
| 7 | 创建 VM | 创建资源 → Windows Server / Linux | L1 微软硬要求 |
| 8 | 选择 VM 大小 | F2s_v2 等 | L0 版本事实(大小集随版本变化) |
| 9 | 连接 VM | RDP / SSH + NSG 入站规则 | L1 微软硬要求 |
| 10 | 创建 VMSS | 创建资源 → 虚拟机规模集 | L1 微软硬要求 |
| 11 | 监控 VM 指标 | 注册 Microsoft.Insights |
L1 微软硬要求 |
| 12 | ARM 模板部署 | 模板部署 → 快速入门 | L1 微软硬要求 |
核心工程取舍 :以上八类操作可以全部通过用户门户完成 ------但频繁操作应当用 ARM 模板或 Operator PowerShell自动化(详见第 14 节)。
2. 租户与管理员的边界:能做什么、不能做什么
Azure Stack Hub 的租户 / 管理员分界通过 RBAC(基于角色的访问控制)和作用域(Subscription / Resource Group)划分:
2.1 租户可以做的 8 类操作
| # | 操作 | 典型工具 |
|---|---|---|
| 1 | 创建 / 删除 / 修改自己订阅下的资源(VM / vNet / 存储 / DB 等) | 用户门户 / ARM 模板 |
| 2 | 在自己订阅下创建 Resource Group | 用户门户 |
| 3 | 申请配额调整(向管理员) | 用户门户 |
| 4 | 查询自己资源的指标 / 监控(依赖 Microsoft.Insights 注册) |
用户门户 → 监视 |
| 5 | 使用 ARM 模板部署复杂资源组合 | 用户门户 → 模板部署 |
| 6 | 在订阅下创建其他用户并分配 RBAC 角色(订阅所有者及以上) | 用户门户 → IAM |
| 7 | 查看自己的使用情况和配额使用 | 用户门户 → 订阅 |
| 8 | 把资源部署到 Marketplace 中已发布的镜像 | 用户门户 |
2.2 租户不能做的 6 类操作
| # | 不可做的操作 | 越界原因 |
|---|---|---|
| 1 | 修改 Azure Stack Hub 基础设施(Stamp / Scale Unit / Capacity 等) | 不在租户订阅范围内 |
| 2 | 修改 ToR / 网络物理配置 | 不在租户订阅范围内 |
| 3 | 直接修改其他租户的订阅 | 跨订阅隔离 |
| 4 | 部署 Marketplace 未发布的镜像 | Marketplace 由管理员控制 |
| 5 | 修改管理员门户的配置 | 入口隔离(不同 URL) |
| 6 | 在自己订阅下做"管理员门户级 plan / offer 变更" | plan/offer 是管理员域的对象 |
L1 微软硬要求:上述边界由微软 RBAC 模型强制执行------租户在门户看不到非自己订阅的资源,尝试访问会被门户自动拒绝(即使是合法访问也会被"友好的"门户 UI 隐藏)。
2.3 不确定时怎么办
L3 最佳实践:当你不确定一个操作是否属于租户权限范围时:
- 看门户可见性:在用户门户看不到的,几乎可以确定不在租户域。
- 看异常消息:尝试操作时被门户 / API 拒绝的,通常超出权限。
- 找管理员:通过 IT 服务台转给 Azure Stack Hub 管理员。
- 不要试错 :不要"通过端口扫描 / SSH 尝试去找基础设施入口"------这是安全事件而非操作。
3. 创建订阅:租户的"入口动作"
3.1 为什么订阅是"入口动作"
在 Azure Stack Hub 上,所有租户操作的资源都是 Subscription 之内的------没有订阅就没有"租户工作空间"。
L1 微软硬要求 :Azure Stack Hub 的 Subscription 与 Azure 公有云 Subscription 概念上等价 ------ 同一个租户可以在 Azure 公有云和 Azure Stack Hub 各有订阅,但两者不互通。
3.2 标准操作步骤
精简:
- 打开 Azure Stack Hub 用户门户并使用用户账户登录。
- 单击"所有服务和订阅"。
- 单击"添加"并为您的订阅命名。
- 选择目标 Offer。
- 创建后,刷新门户。
- "订阅"现在将显示界面中。
3.3 操作示意图
┌────────────────────────────────────────────────┐
│ 1. 打开用户门户 │
│ https://portal.<region>.<FQDN> │
│ 使用租户账户登录 │
└────────────────────────────────────────────────┘
│
▼
┌────────────────────────────────────────────────┐
│ 2. 单击"所有服务" →"订阅" │
└────────────────────────────────────────────────┘
│
▼
┌────────────────────────────────────────────────┐
│ 3. 单击"+"添加按钮 │
│ - 订阅名称:用户自定义 │
│ - 目录:选择 AAD 租户 │
│ - Offer:选择管理员预先创建的 Offer │
└────────────────────────────────────────────────┘
│
▼
┌────────────────────────────────────────────────┐
│ 4. 创建完成 → 刷新门户 → 订阅显示在列表中 │
└────────────────────────────────────────────────┘
3.4 选择 Offer 的工程含义
L3 最佳实践:选择 Offer 不是"随便选"------每个 Offer 由管理员预先定义,包含了:
- 可用资源类型(某些 Offer 可能不含 Kubernetes / SQL 等高级资源)
- 配额上限(订阅下可以创建多少 VM / 多少存储)
- 计费策略(订阅如何被记账)
建议租户在创建前先确认 Offer 与业务需求匹配------例如"业务需要 50 个 VM,但 Offer 配额只允许 10 个",此时需先找管理员调整。
3.5 常见误判
L3 最佳实践 :租户首次接触 Azure Stack Hub 的最容易误判 是:"我能从 Azure 公有云导入订阅吗?"------答案是否定的。每个 Azure Stack Hub 实例的订阅是本地独立的。
4. 创建虚拟网络(vNet):租户网络的"主结构"
4.1 vNet 在 Azure Stack Hub 中的位置
精简:
- 打开 Azure Stack Hub 用户门户并使用用户账户登录。
- 单击"创建资源",键入"虚拟网络",然后单击"虚拟网络"资源的"创建"。
- 填写"创建虚拟网络"边栏选项卡中的必填字段。
4.2 必填字段详解
| 字段 | 填写建议 | L 分类 |
|---|---|---|
| 名称 | 全租户内唯一,遵循团队命名约定 | L3 最佳实践 |
| 地址空间 | 私网段(如 10.x / 172.16-31.x / 192.168.x) | L1 微软硬要求 |
| 资源组 | 同一业务的资源放到同一 RG,便于管理 | L3 最佳实践 |
| 位置 | 通常保持默认 | L2 OEM 实现差异 |
| 子网 | 至少一个;后续可调整 | L1 微软硬要求 |
| 子网地址段 | 比 vNet 地址空间小;首尾预留 | L1 微软硬要求 |
4.3 vNet 与 Azure 公有云的差异
| 维度 | Azure Stack Hub | Azure 公有云 |
|---|---|---|
| 默认地址空间 | 任意 RFC1918 私网段 | 同 |
| 跨 vNet 对等 | 支持有限版本(取决于当期 azs 版本) | 完全支持 |
| vNet-to-vNet VPN | 支持 | 支持 |
| 虚拟 WAN | 通常不支持(L2 OEM 实现差异) | 完全支持 |
| ExpressRoute | 不直接支持(需通过 S2S VPN) | 支持 |
L0 版本事实 :vNet-to-vNet 对等的支持度因 azs 版本变化------以当期 Azure Stack Hub User Documentation 为准。
5. 创建网络安全组(NSG):流量控制的"第一道闸"
5.1 NSG 是什么
NSG(Network Security Group)是租户侧最常用的流量控制对象,包含一组基于规则的访问控制列表(ACL)。每条规则匹配:
- 源 IP / 目标 IP
- 源端口 / 目标端口
- 协议(TCP / UDP / Any)
- 方向(入站 / 出站)
- 动作(允许 / 拒绝)
5.2 标准操作步骤
精简:
- 在 Azure Stack Hub 用户门户上,单击"创建资源",键入并选择"网络安全组",然后单击"创建"。
- 填写"创建网络安全组"边栏选项卡中的必填字段,并选择之前使用的相同资源组名称。
关键点 :NSG 通常和 vNet 放在同一个 Resource Group------便于统一管理。
5.3 NSG 与 vNet / NIC / 子网的关系
┌──────────────────────────┐
│ vNet │
│ ┌──────────────────┐ │
│ │ Subnet │ │
│ │ ┌───────────┐ │ │
│ │ │ VM │ │ │
│ │ │ ┌─────┐ │ │ │
│ │ │ │ NIC │ │ │ │
│ │ │ └──┬──┘ │ │ │
│ │ │ │ │ │ │
│ │ └─────│─────┘ │ │
│ └───────│──────────┘ │
│ │ │
│ ┌─────┴─────┐ │
└─────│ NSG │────────┘
└───────────┘
△ △
│ │
关联到 Subnet 关联到 NIC
(推荐) (可选)
L1 微软硬要求 :NSG 可以关联到子网 (推荐)和/或NIC (可选)。当两者都关联时,规则评估是叠加的------任一层拒绝,都会拒绝流量。
5.4 NSG 默认规则
L1 微软硬要求 :每个新建的 NSG 默认包含 6 条规则------这是微软内置的"基线规则集",未经用户操作不应删除:
| 规则 | 优先级 | 方向 | 动作 | 说明 |
|---|---|---|---|---|
AllowVnetInBound |
65000 | 入站 | Allow | 同 vNet 内互访 |
AllowAzureLoadBalancerInBound |
65001 | 入站 | Allow | LB 健康探测 |
DenyAllInBound |
65500 | 入站 | Deny | 默认全部拒绝 |
AllowVnetOutBound |
65000 | 出站 | Allow | 同 vNet 内出 |
AllowInternetOutBound |
65001 | 出站 | Allow | 出公网默认允许 |
DenyAllOutBound |
65500 | 出站 | Deny | 默认全部拒绝 |
L3 最佳实践 :当远程连接不工作时,先看这 6 条默认规则 ------常见的"连不上"问题是默认
DenyAllInBound没被显式规则覆盖。
6. 子网关联 NSG:让规则"覆盖整个子网"
6.1 操作步骤
精简:
- 返回到 Azure Stack 用户门户主仪表板,然后单击创建的 vNet。
- 选择"子网",然后单击"+子网"按钮。
- 为此子网提供名称,然后选择之前创建的 NSG。
- 单击"确定"后,NSG 将应用于整个子网。
6.2 子网关联 NSG 的"整体效应"
子网 A
┌────────────────────┐
│ VM-01 [NIC A1] │ ← 流量进入 → NSG 检查 → 通过
│ VM-02 [NIC A2] │ ← 流量进入 → NSG 检查 → 通过
│ VM-03 [NIC A3] │ ← 流量进入 → NSG 检查 → 通过
└────────────────────┘
│
▼
NSG-Subnet-A
(规则集 R)
关联到子网后,子网内所有 VM 都受同一组规则约束------这是把 NSG 用作"默认安全门"的推荐方式。
6.3 NSG 规则评估顺序
L1 微软硬要求 :当 VM 收到的流量进入 NSG 时,规则按优先级从低到高评估:
- 优先级数字小 = 优先评估
- 命中第一个匹配规则即停 ------ 不会继续评估后面的规则
- 系统默认规则优先级为 65000-65500,用户规则应使用 100-4096 区间避免和系统规则冲突
L3 最佳实践 :写 NSG 规则时先做"流量清单"------列出所有"应该允许"和"应该禁止"的流量,然后按"小范围允许 → 大范围拒绝"的顺序写规则。
7. 公共 IP 地址:让 VM 拥有"对外可达性"
7.1 操作步骤
精简:
- 在 Azure Stack 用户门户上,单击"创建资源",键入并选择"公共 IP",单击"创建"。
- 填写"创建公共 IP 地址"页面中的必填字段。
7.2 公共 IP 关键参数
| 字段 | 选项 | 含义 |
|---|---|---|
| SKU | Basic / Standard | Basic 用于 Azure Stack Hub(Standard 通常 Azure 公有云专属) |
| 分配 | 静态 / 动态 | 静态 IP 更稳定(推荐) |
| 空闲超时 | 4-30 分钟 | TCP 连接空闲超时 |
| DNS 名称标签 | 可选 | 用于 *.region.FQDN 寻址 |
7.3 与 NSG 的配合
公共 IP 本身不控制流量 ------流量控制由 NIC 上 / 子网上的 NSG 决定。这是常被新租户误解的点:
L3 最佳实践·常见误判 :租户常常认为"创建了公共 IP 就能被外网访问"------事实上必须有 NSG 入站规则允许才能真正可达。
8. 创建虚拟机(VM):完整路径整合
8.1 操作流程
整合:
- 单击"创建资源",键入"Windows Server",选择"Windows Server 2019 Datacenter"映像,然后单击"创建"。
- 在边栏选项卡中填写所需信息,并在准备就绪后单击"确定"。
- 为当前虚拟机选择任意大小 ------ 为简单起见,请使用 F2s_v2 标准大小。
- 选择所需的 VM 大小后,单击"选择"。
- 选择之前创建的虚拟网络、子网(不要使用默认子网,选择之前创建的子网)和公共 IP。
- 对于网络安全组,请单击"高级",然后选择"新建"NSG(以前创建的 NSG 已应用于子网,现在创建的 NSG 将应用于此 VM)。
- 查看"摘要"页,然后单击"确定"以创建 VM。
8.2 创建 VM 的资源关系图
Resource Group(业务 RG)
├── vNet
│ ├── Subnet-A (关联 NSG-Subnet-A)
│ │ ├── VM-01
│ │ │ ├── NIC-A1 (关联 NSG-NIC-A1)
│ │ │ ├── OS Disk (托管磁盘)
│ │ │ ├── Data Disk (可选)
│ │ │ └── Public IP-A1
│ │ └── VM-02
│ │ ├── NIC-A2
│ │ ├── OS Disk
│ │ └── ...
│ └── Subnet-B
└── NSG-Subnet-A (关联到 Subnet-A)
8.3 关键选择
8.3.1 必填字段
| 字段 | 建议 |
|---|---|
| VM 名称 | 命名规范 |
| 资源组 | 与 vNet 一致 |
| 映像 | Windows Server / Linux 各类 |
| 大小 | 见 §9 |
| 身份验证 | 用户名 / 密码 或 SSH 公钥 |
| 磁盘类型 | HDD 标准 / SSD 标准 / Premium SSD |
8.3.2 网络选择(关键)
特别强调 :不要使用默认子网,选择之前创建的子网 。这是一个被很多租户忽略的"陷阱"------默认子网在门户中以灰色显示,如果不主动改,VM 会被放到一个没有任何 NSG 关联的子网。
8.3.3 NSG 选择(关键)
特别强调 :以前创建的 NSG 已应用于子网,现在创建的 NSG 将应用于此 VM。
这是 Azure Stack Hub 推荐的**"双层 NSG"模式**:
- 子网层 NSG:通用规则(如允许 vNet 内部互访)
- VM 层 NSG:特定规则(如允许到该 VM 的 RDP 端口)
L1 微软硬要求 :当流量同时经过两层 NSG 时,每层都允许才允许通过。
9. VM 大小选择:F2s_v2 与所有可选系列的边界
9.1 建议
为当前虚拟机选择任意大小 ------ 为简单起见,请使用 F2s_v2 标准大小。
F2s_v2 是 2 vCPU + 4 GiB RAM 的 Standard 通用系列,对应入门测试 / POC 场景。
9.2 VM 大小集的版本依赖
| 系列 | 类型 | 适用场景 | L 分类 |
|---|---|---|---|
| F / Fs / Fsv2 | 通用 | 通用负载 | L0 版本事实 |
| D / Ds / Dv2 / Dsv2 / Dsv3 | 通用优化 | 中等通用负载 | L0 版本事实 |
| E / Esv3 | 内存优化 | 内存型负载 | L0 版本事实 |
| M | 大内存 | 大内存数据库 | L0 版本事实 |
| H 系列 | 高性能计算 | HPC | L2 OEM 实现差异 |
| N 系列(GPU) | GPU 加速 | AI / 推理 | L2 OEM 实现差异 |
| Lsv2 系列 | 存储优化 | 大 IO 负载 | L2 OEM 实现差异 |
L0 版本事实 :当前主流 azs 版本 支持的 VM 大小集合随版本演进而变化 ------某些早期版本不支持的 SKU 可能在后续版本加入,反之亦然。具体以当期版本 Azure Stack Hub Capacity Planner / Release Notes 为准。
9.3 选型的工程取舍
| 业务场景 | 推荐大小 |
|---|---|
| POC / 验证 | F2s_v2 / F4s_v2 |
| 通用 Web | Dsv3 / Dsv4 |
| 数据库 | Esv3 / Esv4 |
| 大内存缓存 | E_v3 系列 |
| AI 推理 | N 系列(GPU,受限于 OEM) |
| HPC | H 系列 |
10. 连接到 VM:RDP 与 NSG 端口的联动
10.1 标准流程
精简:
- 单击 VM 的"网络"选项卡并检查两个 NSG,请注意应用于子网的 NSG 未打开端口 3389。
- 单击"添加入站端口规则",然后按照边栏选项卡中的向导将端口 3389 添加为入站端口。
- 单击"连接"并下载 RDP 文件。
10.2 RDP 流程图
远程桌面客户端
│
▼
(通过公网) → 公共 IP-A1:3389
(static external)
│
▼
NSG-NIC-A1 检查入站
├─ 3389 / TCP → 是否允许?
│ ├─ Yes → 转发到 VM
│ └─ No → 拒绝(连接超时)
▼
NSG-Subnet-A 检查入站
├─ 3389 / TCP → 是否允许?
│ ├─ Yes → 转发到 NIC
│ └─ No → 拒绝
▼
VM-01 NIC-A1
3389 端口监听 → RDP 协议握手
10.3 端口 3389 添加的关键步骤
L3 最佳实践(PPT 未展开详细步骤):添加入站规则时需明确:
- 协议:TCP(不是 UDP)
- 源 :
*或指定 IP 段(如 10.0.0.0/8)- 目标:3389
- 动作:允许
- 优先级:100-200(建议用低优先级覆盖默认 Deny)
安全注意 :生产环境不要把 3389 暴露给*------应限制到运维堡垒机的 IP 段。
10.4 远程连接的工程取舍
| 远程入口 | 协议 | 默认端口 | 适用 OS |
|---|---|---|---|
| RDP | TCP | 3389 | Windows |
| SSH | TCP | 22 | Linux |
| WinRM | TCP | 5985/5986 | Windows 远程 PowerShell |
| Bastion | TCP | 443 | 双 OS(通过 SSL 隧道) |
L3 最佳实践 :Azure Stack Hub 的 Bastion 服务视当期 azs 版本 + OEM 实现------部分版本 / 客户环境不包含 Bastion,租户需自行准备堡垒方案。
11. 创建虚拟机规模集(VMSS):可横向扩展层
11.1 什么是 VMSS
Azure Stack Hub 的 VMSS 是租户最常用的"横向扩展"工具------一组基于同一映像、统一管理、可以统一调实例数的 VM 集合。
11.2 标准流程
精简:
- 打开 Azure Stack 用户门户并使用用户账户登录。
- 单击"创建资源",然后选择"虚拟机规模集"。
- 填写必填字段(将实例计数保留为 2)。
11.3 VMSS vs 多个独立 VM
| 维度 | VMSS | 独立 VM |
|---|---|---|
| 统一管理 | 是 | 否 |
| 横向扩展 | 一键调实例数 | 需要分别操作 |
| 负载均衡 | 自动集成 | 需手动配置 LB |
| 健康探测 | 自动 | 需手动配置 |
| 滚动升级 | 自动 | 需手动镜像替换 |
| 适用场景 | 无状态 Web / 计算 | 有状态 / 数据库 |
11.4 VMSS 的四大工程痛点
L3 最佳实践(PPT 未明说):使用 VMSS 时常见痛点:
- 数据持久化 ------VMSS 设计上假设 VM 是无状态的;新实例不带原数据。需要配合 Azure Files / 外部数据库存储状态。
- 冷启动延迟------横向扩展增加新实例时,新 VM 需要 2-3 分钟启动,业务需要预热或冷启动容忍。
- 手动调 vs 自动伸缩 ------当前 azs 版本的 VMSS 自动伸缩支持有限(视 OEM 实现),很多时候需要手动调实例数或用外部 cron 触发。
- 镜像版本控制------VMSS 用最新的模型,但新实例默认用创建时的镜像版本。修改镜像后需要手动触发升级。
12. VMSS 扩容:手动调实例计数从 2 到 3
12.1 第二步
通过将 VM 计数更改为 3 来纵向扩展 VMSS。
注意原文用了"纵向扩展"------但实际是横向扩展(scale out)。这可能是 PPT 内训材料的措辞不一致;本文按"横向扩展"理解。
12.2 操作
门户 → 找到 VMSS → "缩放" → "手动实例数" → 改为 3 → 保存
12.3 状态变化
扩容过程中会经历多个状态:
| 状态 | 含义 |
|---|---|
Updating |
扩容正在进行 |
Scaling |
正在创建新实例 |
Healthy |
所有实例都健康 |
Unhealthy |
有实例异常(需看警报) |
L1 微软硬要求 :扩容过程不是瞬时的------单实例启动时间取决于 OEM 硬件配置、市场镜像大小、备份恢复策略等。
13. 监控 VM 指标:注册 Microsoft.Insights
13.1 为什么需要注册 RP
精简:
- 打开 Azure Stack 门户并使用用户账户登录。
- 单击"订阅"资源并选择一个订阅。
- 单击"资源提供程序",然后单击"Register Microsoft.Insights"。
- 几分钟后,指标将显示在每个 VM 的"概述"边栏选项卡中。
13.2 Microsoft.Insights 在 Azure Stack Hub 中
| 能力 | Azure Stack Hub 支持 | Azure 公有云 |
|---|---|---|
| VM 基础指标(CPU / 内存 / 网络) | 支持 | 支持 |
| Application Insights | 通常不支持(部分 azs 版本可) | 完全支持 |
| Log Analytics 工作区 | 受限支持(L2 OEM 差异) | 完全支持 |
| Metrics Advisor | 不支持 | 支持 |
| Alerts / Action Groups | 部分支持(取决于 azs 版本) | 完全支持 |
| 诊断设置 | 支持(部分资源类型) | 完全支持 |
L0 版本事实 :上面表格中"M/Microsoft.Insights 可用范围"随当期 azs 版本而变化 ------本文以当前主流版本能力为准。未来版本可能扩展或限制某些 Insights 能力。
13.3 VM 级别的可用指标
注册 Microsoft.Insights 后,VM "概述"页面通常显示以下指标:
| 指标 | 单位 | 含义 |
|---|---|---|
| Percentage CPU | % | CPU 使用率 |
| Available Memory Bytes | GB | 可用内存 |
| Disk Read/Write Bytes | MB/s | 磁盘 I/O |
| Network In/Out | KB/s | 网络流量 |
13.4 监控的局限
L3 最佳实践:
- 租户级监控只覆盖自己订阅内的资源------无法看到 Azure Stack Hub 基础设施级指标。
- 监控数据保留期有限(视 OEM 实现,通常 30-90 天)。
- 高级监控(如 Application Insights)需要 SaaS 服务------通常 Azure Stack Hub 上不部署。
14. ARM 模板部署:使用快速入门模板
14.1 什么是 ARM 模板
ARM(Azure Resource Manager)模板是声明式的 JSON 文件,用于描述"一组资源应该如何被创建"。这是 Azure Stack Hub / Azure 公有云统一的资源描述方式。
14.2 标准流程
精简:
- 打开 Azure Stack 用户门户并使用 aadUserName 用户登录。
- 单击"创建资源",然后选择"模板部署"。
- 选择"编辑模板",然后单击"快速入门模板"。
- 选择"101-vm-windows-create"模板,然后单击"保存"。
- 添加所需的参数并选择新的资源组。
- 单击"通知"和新创建的"正在进行部署"以检查部署的状态。
14.3 模板的工程价值
| 价值 | 描述 |
|---|---|
| 可重复 | 同一模板可在多个环境中部署 |
| 可版本控制 | JSON 文件纳入 Git,享受版本管理 |
| 可审计 | 部署历史可查 |
| 可复合 | 一个模板可包含多种资源(VM + vNet + Disk + NSG) |
14.4 "101-vm-windows-create" 模板来源
L3 最佳实践:
- 这个模板不是 Azure Stack Hub 内置的 ------ 它来自 Microsoft QuickStart Templates(GitHub 上的开源仓库)
- GitHub 路径:
Azure/azure-quickstart-templates(具体路径以当期 GitHub 为准)- 该模板是为 Azure 公有云设计的,在 Azure Stack Hub 上可能需要调整
- 不要假设公有云模板在 Azure Stack Hub 上 100% 可用------某些资源类型(如 Azure Kubernetes Service / Functions)在 Azure Stack Hub 上可能不支持
14.5 部署后的状态检查
部署过程会经历:
| 状态 | 含义 |
|---|---|
Accepted |
接受部署请求 |
Running |
正在创建资源 |
Succeeded |
所有资源创建成功 |
Failed |
部分 / 全部失败(看错误码) |
L1 微软硬要求 :
Failed状态的资源可能已部分创建------失败后不要"再点一次"------这会导致重复创建。需要先删除已创建部分,再重新部署。
14.6 模板 vs 门户的工程取舍
| 维度 | 模板 | 门户 |
|---|---|---|
| 首次部署 | 复杂 | 简单 |
| 重复部署 | 极快 | 慢 |
| CI / CD | 必需 | 不支持 |
| 团队协作 | 通过 Git | 个人本地 |
| 审计 | 完整 | 弱 |
L3 最佳实践 :"模板管基准,门户管临时" ------ 关键基础设施用模板管,临时调试用门户。
15. 四层原则落地:租户操作的全景分层
将租户日常操作按 L0 版本事实 / L1 微软硬要求 / L2 OEM 实现 / L3 最佳实践 四个层级重新梳理:
| 操作 | 层级 | 说明 |
|---|---|---|
| 订阅必须是基于管理员预先定义的 Offer 创建 | L1 微软硬要求 | 这是 RBAC + 计费设计 |
| 租户看到的 VM 大小集合是当期 azs 版本 + OEM 决定的子集 | L0 版本事实 | 跨版本 / 跨 OEM 演化 |
| NSG 规则评估顺序(优先级从小到大,先匹配先终止) | L1 微软硬要求 | 这是 Azure RM 设计 |
| NSG 默认 6 条规则集(AllowVnet/DenyAll 等) | L1 微软硬要求 | 微软内建基线 |
| VMSS 实例启动时间 | L0 版本事实 | 取决于硬件 + 镜像 |
Microsoft.Insights 在 Azure Stack Hub 上的能力边界 |
L0 版本事实 | 跨版本演进 |
| "101-vm-windows-create" 模板来自 Azure QuickStart 仓库 | L2 OEM 实现差异 | 公有云模板,需要适配 |
| 公共 IP 的 SKU(Basic / Standard)可用性 | L2 OEM 实现差异 | 部分 azs / OEM 只支持 Basic |
| 选择"F2s_v2"为简单 POC 起步 | L3 最佳实践 | 不是必须,是推荐 |
| 子网 NSG + NIC NSG 双重防护模型 | L3 最佳实践 | 来自微软安全最佳实践 |
RDP 暴露给 * 仅限测试 |
L3 最佳实践 | 来自安全运维经验 |
| VMSS 数据持久化需要外部存储 | L3 最佳实践 | VMSS 是无状态设计 |
| ARM 模板应纳入 Git 版本控制 | L3 最佳实践 | 来自 Azure 架构最佳实践 |
15.1 跨版本的演进风险
L0 版本事实:以下特性随 azs 版本演进而可能变化:
- 用户门户中 "创建资源" 的搜索 / 推荐逻辑
- VMSS 自动伸缩支持的指标 / 触发器
Microsoft.Insights暴露的指标集合- Marketplace 镜像清单
- 公共 IP SKU 集合
16. 三大误判信号:租户最容易踩的坑
16.1 误判 #1:F2s_v2 不够用就怪 Azure Stack Hub
现象:租户用 F2s_v2 跑数据库,发现性能不够,认为 Azure Stack Hub 性能差。
原因:
- F 系列是通用基础------适合 POC / 调试。
- 数据库等内存型负载应该用 Esv3 / Esv4 系列(内存优化)。
处理方法 :先选型再选大小,不要用 F2s_v2 跑全生产。
16.2 误判 #2:NSG 创建了就有规则
现象:租户创建 NSG 后,连接不上 VM。
原因:
- 新建 NSG 的默认 6 条规则中没有"允许 RDP 3389 入站"------只允许 vNet 内部。
- 必须手动添加入站规则才能从外网 RDP。
处理方法:连接不上 VM 时,先检查 NSG 是否显式放行了 3389。
16.3 误判 #3:VMSS 扩容后数据"应该"还在
现象:VMSS 从 2 扩到 3 后,业务发现新实例没有之前的缓存 / 数据。
原因:
- VMSS 设计上实例之间不共享本地存储。
- 持久化必须用外部 Azure Stack Hub 存储服务(如 Blob / Files / 数据库)。
处理方法 :业务代码必须无状态化------状态放到外部存储。
16.4 误判 #4:监控未注册 Insights 就看不到指标
现象:租户在 VM "概述"页面看到 "Metrics not available"。
原因:
- Azure Stack Hub 的 VM 监控依赖
Microsoft.InsightsRP 注册。 - 未注册时该 RP 时,VM 指标不显示。
处理方法 :订阅 → 资源提供程序 → 注册 Microsoft.Insights(等几分钟)。
16.5 误判 #5:使用了 Azure 公有云模板就一定能跑
现象:租户从 GitHub 上 copy 了 Azure 公有云的 ARM 模板,部署失败。
原因:
- Azure Stack Hub 不是 Azure 公有云的镜像------某些资源类型 / API 版本不支持。
- 模板中的
apiVersion字段必须在 Azure Stack Hub 上可用。
处理方法 :使用 Azure Stack Hub 官方验证过的模板 或自行测试过的模板。
17. 三条操作红线:租户绝对不能越的边界
L1 微软硬要求 + L3 最佳实践 。以下三条是 Azure Stack Hub 租户在日常运维中绝对不能越的边界。
17.1 红线 #1:不绕过 RBAC 访问其他租户的订阅
| 越界行为 | 后果 |
|---|---|
| 借用其他租户账户访问非自己订阅 | 触发安全审计事件 |
| 修改 RBAC 角色为自己赋 Owner | 不可逆(管理员才能回退) |
| 通过后门 API 调用非自己资源 | 通常被 API 自动拒绝 |
17.2 红线 #2:不在生产时段做大范围删除
| 越界行为 | 后果 |
|---|---|
| 删除活跃订阅 | 立即回收所有资源(VM / 磁盘 / IP 等) |
| 删除 Resource Group | 同上(更广) |
| 删除关键 NSG 规则 | 短暂业务中断 |
L3 最佳实践 :所有"大范围变更"应在维护窗口 执行,并预留恢复时间。
17.3 红线 #3:不在自己的 Azure Stack Hub 订阅中放敏感数据
| 越界行为 | 风险 |
|---|---|
| 把生产数据库密钥嵌入代码 / 模板 | 一旦模板外泄,密钥失控 |
RDP 3389 暴露给 * |
暴露给全互联网,攻击面极大 |
| 在 VM 上禁用 Windows Update | 失去 OEM 安全补丁通道 |
L3 最佳实践 :敏感数据走 Key Vault (Azure Stack Hub 支持),RDP 限制到堡垒 IP ,遵循 OEM 安全基线。
17.4 与第 1 / 第 3 篇的衔接
- 第 1 篇(管理员篇):覆盖管理员如何管理租户可见的全局资源(plan / offer / 容量等)。
- 第 3 篇(报修篇):当租户操作触发支持需求(如 VM 性能异常 / 容量触顶 / Marketplace 问题)时如何报修。
18. 租户篇小结:八类典型操作的工程化整合
18.1 操作清单速查
| # | 操作 | 入口 | 自动化建议 |
|---|---|---|---|
| 1 | 创建订阅 | 用户门户 | 脚本创建(PowerShell / CLI) |
| 2 | 创建 vNet | 创建资源 | 推荐 ARM 模板 |
| 3 | 创建 NSG | 创建资源 | 推荐 ARM 模板 |
| 4 | 子网关联 NSG | vNet → 子网 | 推荐 ARM 模板 |
| 5 | 创建公共 IP | 创建资源 | 推荐 ARM 模板 |
| 6 | 创建 VM | 创建资源 | 推荐 ARM 模板 + 镜像库 |
| 7 | 远程连接 VM | RDP / SSH | Bastion / 堡垒 |
| 8 | 创建 VMSS | 创建资源 | 推荐 ARM 模板 |
| 9 | 监控 VM | 资源提供程序 + 概述 | 自动化 RP 注册 |
| 10 | ARM 模板部署 | 模板部署 | CI / CD 流水线 |
18.2 推荐的操作工程模型
一次配置 重复操作
┌──────────────┐ ┌──────────────────┐
│ │ │ │
│ ARM 模板 │ ───→ │ CI / CD 流水线 │
│ (JSON + Git) │ │ (GitHub Actions) │
│ │ │ │
└──────────────┘ └──────────────────┘
│
▼
Azure Stack Hub 用户门户
Operator PowerShell
模板部署
L3 最佳实践:
- 基线设施用模板------vNet / NSG / Subnet 等"创建一次、长期不变"的基础设施,用 ARM 模板管理,纳入 Git 版本控制。
- 重复操作走流水线------CI / CD(GitHub Actions / Azure DevOps 等)触发 ARM 模板部署。
- 临时调试走门户------单次试验 / 调试用用户门户。
- 监控走 RP ------
Microsoft.Insights注册后用门户 / API 看指标。
18.3 跨篇衔接
- 基础设施变更:超出租户权限的(如创建 plan / offer),找管理员------见第 1 篇。
- 故障 / 性能问题:超出文档范围的,找 OEM + 微软支持------见第 3 篇。
附录 A:本文核心模板 / 命令快速参考
A.1 创建订阅(PowerShell 示例)
# 登录(注意:当前主流 azs 版本可能需要用 -EnvironmentName AzureStackHub 之类参数)
Connect-AzAccount -EnvironmentName "AzureStackHubUser"
# 创建订阅
New-AzSubscription `
-OfferName "<管理员预定义的 Offer 名>" `
-Name "我的订阅" `
-TenantId "<当前 AAD 租户 ID>"
A.2 注册 Microsoft.Insights RP
Register-AzResourceProvider -ProviderNamespace "Microsoft.Insights"
A.3 通过 ARM 模板部署(CLI 示例)
az stack-hub deployment create \
--resource-group <RG> \
--template-file <template.json> \
--parameters @<parameters.json>
L1 微软硬要求 :上述命令语法以当期 azs 版本对应的"Azure Stack Hub User Documentation" 为准;azs CLI / PowerShell 模块的版本依赖较强。
附录 B:本文相关资源链接参考
L0 版本事实 :以下链接随微软 docs 演进可能变化------应以当期 azs 版本对应的"Azure Stack Hub User Documentation" 为准。
- Azure Stack Hub User Documentation 入口:
https://learn.microsoft.com/en-us/azure-stack/user/(具体页面以当期微软文档树为准) - ARM 模板参考:
https://learn.microsoft.com/en-us/azure/azure-resource-manager/templates/(Azure 公有云参考;Azure Stack Hub 上需验证 API 版本可用性) - Azure QuickStart Templates(GitHub):
https://github.com/Azure/azure-quickstart-templates(公有云模板,需要适配)
本文版本 :v1.0(首发 · 2026-07-30) 维护 :Azure Stack Hub 运维管理三篇系列 · 租户篇 写作依据 :内训演示材料《Azure Stack Hub 运维管理》(用户操作章节)整理 + 微软 User Documentation + 实操经验 下次修订触发:azs 重大版本升级、Marketplace 镜像集合重大变化、Microsoft.Insights 在 Azure Stack Hub 能力边界变化