本方案演示如何为 Azure Stack HCI 上运行的 Microsoft Azure Kubernetes 服务 (AKS) 设计和实现基线体系结构。
本文包括根据组织的业务需求对群集进行网络、安全、标识、管理和监视设置的建议。 它是由两篇文章组成的体系结构基线指南集的一部分。 请参阅此处的网络设计建议。
重要
本文中的信息适用于 Azure Stack HCI 版本 22H2 上的 AKS 和 Windows Server 上的 AKS-HCI。 最新版本的 AKS 在 Azure Stack HCI 23H2 上运行。 有关最新版本的详细信息,请参阅 Azure Stack HCI 版本 23H2 上的 AKS 文档。
体系结构
下图显示了 Azure Stack HCI 或 Windows Server 2019/2022 Datacenter 故障转移群集上 Azure Kubernetes 服务的基线体系结构:
下载此体系结构的 Visio 文件。
该体系结构包括以下组件和功能:
- Azure Stack HCI (22H2)。 这是一种超融合基础设施 (HCI) 群集解决方案,它在混合的本地环境中托管虚拟化的 Windows 和 Linux 工作负载及其存储。 Azure Stack HCI 群集实现为 2-8 节点群集。
- Azure Stack HCI 上的 Azure Kubernetes 服务 (AKS)。 这是 AKS 的一种本地实现,可大规模自动运行容器化应用程序。
- Azure Arc。这是一项基于云的服务,它将基于 Azure 资源管理器的管理模型扩展到非 Azure 资源,包括非 Azure 虚拟机 (VM)、Kubernetes 群集和容器化数据库。
- Azure Policy。 这是一种基于云的服务,可通过评估 Azure 资源(包括已启用 Arc 的资源)、这些资源的属性和业务规则来帮助实施组织标准并大规模评估合规性。 这些标准还包括适用于 Kubernetes 的Azure Policy,它将策略应用于群集内运行的工作负载。
- Azure Monitor。 一项基于云的服务,它提供用于收集、分析和处理来自云与本地环境的遥测数据的综合解决方案,可将应用程序和服务的可用性和性能最大化。
- Microsoft Defender for Cloud。 这是一个统一的基础结构安全管理系统,可增强数据中心的安全态势,并跨云和本地中的混合工作负载提供高级威胁防护。
- Azure 自动化。 提供基于云的自动化和配置服务,用于支持 Azure 环境和非 Azure 环境之间的一致管理。
- Velero。 这是一个开源工具,支持按需备份和计划备份,并可还原 Kubernetes 群集中的所有对象。
- Azure Blob 存储。 大规模可缩放且安全的对象存储,适用于云原生工作负载、存档、Data Lake、高性能计算和机器学习。
组件
- Azure Stack HCI (22H2)
- Azure Stack HCI 上的 Azure Kubernetes 服务 (AKS)
- Windows 管理中心
- Azure 订阅
- Azure Arc
- Azure 基于角色的访问控制 (Azure RBAC)
- Azure Monitor
- Microsoft Defender for Cloud
方案详细信息
可能的用例
- 在 AKS 的本地 Kubernetes 实现中实施基于容器的高度可用的工作负载。
- 大规模自动运行容器化应用程序。
- 通过 Microsoft 认证的解决方案、基于云的自动化、集中管理和集中监视来降低总拥有成本 (TCO)。
认证硬件
使用 Azure Stack HCI 认证的硬件,该硬件提供安全启动、统一可扩展固件接口 (UEFI) 以及现成的受信任的平台模块 (TPM) 设置。 计算要求取决于在群集上的 AKS 中运行的应用程序和工作器节点数。 使用多个物理节点部署 Azure Stack HCI 或至少使用双节点 Windows Server Datacenter 故障转移群集来实现高可用性。 要求所有服务器都具有相同的制造商和型号,使用 64 位 Intel Nehalem 级别、AMD EPYC 级别或具有二级地址转换 (SLAT) 的更高级兼容处理器。
群集部署策略
AKS 通过提供向导或 PowerShell cmdlet 简化了本地 Kubernetes 部署,你可以使用它们来设置 Kubernetes 和必要的 Azure Stack HCI 加载项。 AKS 群集在 Azure Stack HCI 上具有以下组件:
- 管理群集。 在 Azure Stack HCI 或 Windows Server 2019/2022 Datacenter 故障转移群集上运行的高度可用的虚拟机 (VM) 上部署管理群集。 管理群集负责部署和管理多个工作负载群集,它包括以下组件:
- API 服务器。 与管理工具交互。
- 负载均衡器。 管理管理群集的 API 服务器的负载均衡规则。
- 工作负载群集。 实现高度可用的控制平面组件和工作器节点组件。 容器化应用程序在工作负载群集上运行。 要实现应用程序隔离,最多可以部署八个工作负载群集。 工作负载群集由以下组件构成:
- 控制平面。 在 Linux 发行版上运行,并且包含用于与 Kubernetes API 交互的 API 服务器组件,以及用于存储群集的所有配置和数据的分布式键值存储 (etcd)。
- 负载均衡器。 在 Linux VM 上运行,并为工作负载群集提供负载均衡服务。
- 工作器节点。 在托管容器化应用程序的 Windows 或 Linux 操作系统上运行。
- Kubernetes 资源。 Pod 表示应用程序的单个实例,通常与容器具有 1:1 的映射关系,但某些 Pod 可以包含多个容器。 部署表示一个或多个相同的 Pod。 Pod 和部署以逻辑方式分组到一个命名空间中,该命名空间控制对资源管理的访问。
网络要求
Kubernetes 通过将 Kubernetes 节点连接到虚拟网络,为虚拟网络提供了抽象层。 它还通过 kube-proxy 组件为 Pod 提供入站和出站连接。 Azure Stack HCI 平台通过配置 HAProxy 负载均衡器 VM 进一步简化了部署。
注意
要了解如何设计和实现用于在 Azure Stack HCI 和 Windows Server 群集上部署 AKS 节点的网络概念,请参阅本系列中的第二篇文章网络体系结构。
体系结构使用虚拟网络,该虚拟网络通过以下网络选项之一分配 IP 地址:
- 静态 IP 网络。 对部署中的所有对象使用已定义的静态地址池。 这增添了额外的优势,并保证工作负载和应用程序始终可供访问。 这是建议的方法。
- DHCP 网络。 使用动态主机配置协议 (DHCP) 服务器将动态 IP 地址分配给 Kubernetes 节点、底层 VM 和负载均衡器。
虚拟 IP 池是一系列预留的 IP 地址,用于向 Kubernetes 群集 API 服务器和 Kubernetes 服务分配 IP 地址。
使用 Project Calico for Kubernetes 获取其他网络功能,例如网络策略和流控制。
存储要求
对于群集中的每个服务器,请使用相同大小、型号和类型的驱动器。 Azure Stack HCI 可使用直接连接的串行高级技术附件 (SATA)、串行连接 SCSI (SAS)、非易失性快速存储器 (NVMe) 或永久性内存驱动器,每个驱动器使用物理方式仅连接到一个服务器。 对于群集卷,HCI 使用软件定义的存储技术(存储空间直通)将存储池中的物理驱动器组合在一起,以实现容错性、可伸缩性和性能。 在 Azure Stack HCI 上的 Kubernetes 中运行的应用程序通常希望以下存储选项可用:
- 卷。 表示一种跨 Pod 和应用程序生命周期存储、检索及保存数据的方法。
- 永久性卷。 这是由 Kubernetes API 创建和管理的存储资源,可以在单个 Pod 的生命周期之外存在。
请考虑为不同的层和位置定义存储类,以优化成本和性能。 存储类支持动态预配永久性卷,并定义 reclaimPolicy 以指定在删除 Pod 时用于管理永久性卷的基础存储资源的操作。
管理 Azure Stack HCI 上的 AKS
可使用以下管理选项管理 Azure Stack HCI 上的 AKS:
- Windows Admin Center。 为 Kubernetes 操作员提供直观的 UI,以管理 Azure Stack HCI 上的 Azure Kubernetes 服务群集的生命周期。
- PowerShell。 使用户可以轻松下载、配置和部署 Azure Stack HCI 上的 AKS。 PowerShell 模块还支持部署和配置其他工作负载群集,并且支持重新配置现有工作负载群集。
Active Directory 要求
将 Azure Stack HCI 或 Windows Server Datacenter 故障转移群集上的 AKS 与 Active Directory 域服务 (AD DS) 环境集成以优化管理。 如果可能,请对 Azure Stack HCI 上的 AKS 的服务器和服务使用单独的组织单位,以提供更精细的访问控制和权限。 Active Directory 与 Azure Stack HCI 上的 Azure Kubernetes 服务集成后,已加入 Windows 域的计算机上的用户可以使用其单一登录 (SSO) 凭据(通过 kubectl)连接到 API 服务器。
建议
以下建议适用于大多数方案。 除非有优先于这些建议的特定要求,否则请遵循这些建议。
将 HCI 部署上的 AKS 与 Azure Arc 集成
要最大限度地降低 TCO,请将 AKS 部署与 Azure Arc 集成。请考虑使用以下 Azure 服务:
- Azure Monitor 容器见解。 监视 Linux 和 Windows 群集上运行的容器工作负载的性能。 此服务通过指标 API 从控制器、节点和容器收集内存与处理器指标。 借助容器见解,可以确定内存和处理器利用率,检测 Pod 的整体性能,了解群集的行为,并配置警报进行主动监视。
- 自动化功能。 AKS 提供了一系列自动化功能,其中 OS 更新与全堆栈更新相结合,包括由 Azure Stack HCI 供应商和合作伙伴提供的固件和驱动程序。 可以从其中一个 Azure Stack HCI 服务器在本地运行 Windows PowerShell,也可从管理计算机远程运行。 与 Azure 自动化和 Azure Arc 的集成为虚拟化和容器化工作负载提供了一系列自动化方案。
- Velero 和 Azure Blob 存储。 Velero 是一个开源工具,支持对以 Kubernetes 自定义资源定义 (CRD) 形式定义并存储在 etcd 数据库中的任何资源的 Kubernetes 群集中的所有对象进行按需备份、计划备份和还原。 该工具使用命名空间或标签选择器,提供整个群集或群集的一部分的 Kubernetes 资源和卷的备份。 将使用 Velero 工具创建的备份集存储在 Blob 容器中的 Azure 存储帐户中。
- 已启用 Azure Arc 的 Kubernetes 服务。 提供 Azure Stack HCI 上的 AKS 群集的 Azure 资源管理器表示形式。 在 Kubernetes 命名空间中部署已启用 Azure Arc 的代理来收集日志和指标,收集群集元数据、群集版本和节点数,并确保代理表现出最佳性能。
- Azure Policy。 使用 Azure Policy 在 AKS 群集上部署和强制实施内置安全策略。 还可使用自定义策略定义来强制实施 GitOps,GitOps 是在 Git 存储库中声明 Kubernetes 配置(部署、命名空间等)所需状态的具体实践。
- 适用于 Kubernetes 的 Azure Policy。 管理由 Gatekeeper 实现的内部群集策略,将策略定义作为约束模板部署到群集中,并从某个位置报告 Kubernetes 群集的合规性状态。
- Azure RBAC。 用于角色分配,并用于管理对已启用 Azure Arc 的 Kubernetes 的访问。
注意事项
这些注意事项实施 Azure 架构良好的框架的支柱原则,即一套可用于改善工作负载质量的指导原则。 有关详细信息,请参阅 Microsoft Azure 架构良好的框架。
可靠性
- 为管理群集和 Kubernetes 群集中的多个主机实现高度可用的 VM,以满足工作负载的最低可用性级别。
- 使用 Velero 和 Azure Blob 存储备份和还原工作负载群集。 定义可用性和恢复目标以满足业务要求。
- AKS 部署使用故障转移群集和实时迁移实现高可用性和容错性。 实时迁移是一项 Hyper-V 功能,可用于在无停机的情况下将正在运行的虚拟机从一台 Hyper-V 主机透明地移动到另一台主机。
- 将部署配置为使用 Kubernetes 功能(例如部署、相关性映射和副本集),确保 Pod 在中断场景中具有复原能力。
- 此外,请确保 Azure Arc 部署区域支持体系结构部分中引用的服务。
- 考虑限制公共容器映像的使用,并且只从你可以控制其 SLA 的容器注册表(如 ACR)进行拉取。
安全性
通过保护主机和容器,聚焦整个堆栈。
基础结构安全性
- 使用 Azure Stack HCI 认证的硬件,该硬件提供安全启动、UEFI 和现成的 TPM 设置。 这些技术与基于虚拟化的安全性 (VBS) 相结合,有助于保护安全敏感型工作负载。 请访问 Azure Stack HCI 解决方案获取经验证的解决方案。
- 使用安全启动确保服务器只启动原始设备制造商信任的软件。
- 使用 UEFI 控制服务器的启动过程。
- 使用 TPM 存储加密密钥并隔离所有基于硬件的安全相关功能。
- 使用 BitLocker 驱动器加密,可对存储空间直通卷进行静态加密。
- 配置 Calico 网络策略以定义容器之间的网络隔离规则。
- 对于更高的安全要求,请考虑在专用 Windows Server 上部署工作负载群集。
- 使用 Windows Admin Center 提供的 Microsoft Defender for Cloud 集中管理服务器和群集的安全设置。 它为已启用 Arc 的 Kubernetes 群集提供威胁防护。 Microsoft Defender for Cloud 扩展从群集中的节点收集数据,并将数据发送到云中的 Azure Defender for Kubernetes 后端做进一步分析。
- 使用证书来保护通信。
- 使用密钥管理服务器 (KMS) 插件轮换 Kubernetes 机密存储 (etcd) 的加密密钥。
应用程序安全性
- 在 Azure Stack HCI 上的 AKS 上使用 Azure Key Vault 机密提供程序扩展,通过将不同应用程序使用的机密存储在 Azure Key Vault 服务中,进一步保护这些机密。
- 使用 Open Service Mesh AKS 加载项通过启用相互 TLS (mTLS) 来保护服务间通信。 还可使用此加载项为服务定义和执行精细访问控制策略。
- 使用适用于 Kubernetes 的 Azure Policy 强制实施群集安全策略,例如无特权 Pod。
- 在容器存储库中使用包含漏洞扫描的 Azure 容器注册表。
- 对未加入域的主机的 Windows 工作负载使用组管理的安全帐户。 (仅适用于 Windows Server。)
容器安全性
- 通过删除不必要的服务来强化主机和守护程序环境。
- 将机密保存在映像之外,并只通过容器业务流程引擎装载这些机密。
- 通过支持漏洞扫描和 RBAC 的 Azure 容器注册表保护映像。
- 使用容器隔离并避免在特权模式下运行容器,以防攻击者在容器遭到入侵时提升权限。
成本优化
- 使用 Azure 定价计算器估算体系结构使用的服务的成本。 Microsoft Azure 架构良好的框架中的成本优化部分介绍了其他最佳做法。 有关详细信息,请参阅定价详细信息。
- 考虑在物理计算机上实现超线程来优化成本,因为 AKS 计费单元是一个虚拟核心。
卓越运营
- 创建群集向导。 通过 Windows Admin Center 体验简化的预配和管理体验。 Windows Admin Center 中的“创建群集”向导提供向导驱动的接口,指导你创建 Azure Stack HCI 群集。 创建群集向导是在易用性与创建部署脚本(可对这些脚本进行源代码管理)之间进行权衡的结果,可在多个部署之间实现审核和可重复性。 同样地,Windows Admin Center 简化了管理 Azure Stack HCI VM 的过程。
- Azure Arc。与 Azure Arc 或一系列提供额外的管理、维护和复原功能的 Azure 服务(例如 Azure Monitor 和 Log Analytics)集成。
- GitOps。 由于这些配置已签入源存储库,因此请使用自动化工具将配置应用到 Kubernetes 群集,而不是手动配置 Kubertnets 组件。 此过程通常称为 GitOps,适用于 Kubernetes 的常用 GitOps 解决方案包括 Flux 和 Argo CD。 在此体系结构中,建议使用 Microsoft 提供的 GitOps 扩展,该扩展基于 Flux。
- 已启用 Azure Arc 的 Open Service Mesh (OSM)。 这是一种轻型、可扩展的云原生服务网格,可让用户统一地管理、帮助保护和获取高度动态微服务环境现成的可观测性功能。
性能效率
- 使用 Azure Stack HCI 认证的硬件可提高应用程序运行时间和性能,简化管理和操作,并降低总拥有成本。
- 了解 Azure Stack HCI 上的 AKS 限制。 对于 Azure Stack 上的 AKS 部署,Microsoft 支持最多 8 个 Kubernetes 群集、200 个 VM,并且每个群集最多 8 个物理服务器。
- 缩放 Azure Stack HCI 上的 AKS 取决于工作器节点和目标群集的数量。 要正确确定用于工作器节点的硬件大小,需要预测目标群集中的 Pod、容器和工作器节点的数量。 应确保至少预留 15% 的 Azure Stack HCI 容量用于计划内和计划外故障。 为了提高性能效率,请高效地使用计算资源来满足系统要求,并随着需求变化和技术的发展保持该效率。 一般规则如下:如果一个节点在维护期间或计划外故障期间脱机,剩余的节点可以有足够的容量来管理增加的负载。
- 如果在每个目标群集中运行许多 Kubernetes 服务,请考虑增加负载均衡器 VM 的大小。
- Azure Stack HCI 上的 AKS 使用 Azure Stack HCI 放置逻辑来分配目标群集中每个节点池的工作器节点。
- 规划 IP 地址预留以配置 AKS 主机、工作负载群集、群集 API 服务器、Kubernetes 服务和应用程序服务。 Microsoft 建议为 Azure Stack HCI 上的 AKS 部署至少预留 256 个 IP 地址。
- 考虑实现入口控制器,使其在第 7 层工作并使用更智能的规则来分配应用程序流量。
- 实现流量带宽分配的网络性能优化。
- 对大量工作负载使用图形处理单元 (GPU) 加速。
作者
本文由 Microsoft 维护, 它最初是由以下贡献者撰写的。
主要作者:
- Lisa DenBeste | 项目管理计划经理
- Kenny Harder | 项目经理
- Mike Kostersitz | 主要项目经理领导
- Meg Olsen | 负责人
- Nate Waters | 产品营销经理
其他参与者:
- Walter Oliver | 高级项目经理