你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
将简单应用从 Service Fabric 迁移到 AKS
本文提供了一个工作负载迁移示例,可帮助你实现将工作负载从 Service Fabric 迁移到 AKS 中提供的一些概念信息。 本文提供有关 Azure Kubernetes 服务 (AKS) 的信息,并对 AKS 与 Azure Service Fabric 进行了比较。 它还介绍了迁移工作负载时要考虑的注意事项。
此示例重点介绍已容器化的基于 Windows 的 Service Fabric 应用程序。 Azure Service Fabric 和 Azure Kubernetes 服务都支持 Windows 和 Linux 容器。 如果应用程序未容器化,请考虑调查是否可以将其容器化。 为应用程序生成容器映像是将应用程序部署到 Azure Kubernetes 服务的先决条件。 如果应用程序依赖于 Service Fabric 编程模型(Reliable Services、Reliable Actors、ASP.NET Core 和来宾可执行文件),则可能需要进行一些重构。
有关容器化应用程序的信息,请参阅为 AKS 准备应用程序。 有关容器化 ASP.NET 应用程序的信息,请参阅将 ASP.NET 应用容器化并迁移到 AKS。
先决条件
开始迁移之前,你需要:
存储在 Azure 容器注册表中的应用程序容器映像。
可用于配置 Azure 资源的 Bash 环境。
利用 Azure Cloud Shell 可以从浏览器中工作。 有关详细信息,请参阅 Azure Cloud Shell 中的 Bash 快速入门。
如果使用的是本地安装,请使用 az login 命令登录到 Azure CLI。 若要完成身份验证过程,请遵循终端中显示的步骤。 有关其他登录选项,请参阅使用 Azure CLI 登录。
首次使用 Azure CLI 时,需要根据提示安装 Azure CLI 扩展。 有关扩展详细信息,请参阅使用 Azure CLI 的扩展。
Kubernetes 命令行工具 kubectl。 如果环境中还没有该软件,则可以运行此命令进行安装:
az aks install-cli
迁移步骤
第一步是设置在 Kubernetes 中生成 Windows 节点池所需的资源。 为此,请按照在在 AKS 群集上创建 Windows Server 容器中的指南操作,但务必在到达“部署应用程序”部分时停止。 此时,请按照本文中的说明进行操作。
将 Service Fabric 配置清单转换为 AKS 清单是一个重要步骤。 以下部分介绍以下内容:
这两个清单不一一映射,因为它们基于特定于每个服务的功能范例,但其意图是相同的。 (在这些示例中,变量使用格式 <VARIABLE DESCRIPTION>
。)
在 AKS 清单中,Deployment
对象为 Pod 和 ReplicaSet 提供声明性更新。 Service
对象会将一组 Pod 上所运行的应用程序公开为网络服务。
示例 Service Fabric 服务清单
<?xml version="1.0" encoding="utf-8"?>
<ServiceManifest Name="<APP NAME>"
Version="1.0.0"
xmlns="http://schemas.microsoft.com/2011/01/fabric"
xmlns:xsd="https://www.w3.org/2001/XMLSchema"
xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance">
<ServiceTypes>
<StatelessServiceType ServiceTypeName="<SERVICE NAME>" UseImplicitHost="true" />
</ServiceTypes>
<!-- Code package is your service executable file. -->
<CodePackage Name="code" Version="1.0.0">
<EntryPoint>
<ContainerHost>
<ImageName><YOUR IMAGE></ImageName>
<Commands></Commands>
</ContainerHost>
</EntryPoint>
<!-- Pass environment variables to your container. -->
<EnvironmentVariables>
<EnvironmentVariable Name="HttpGatewayPort" Value=""/>
<EnvironmentVariable Name="BackendServiceName" Value=""/>
</EnvironmentVariables>
</CodePackage>
<ConfigPackage Name="Config" Version="1.0.0" />
<Resources>
<Endpoints>
<Endpoint Name="<HTTP ENDPOINT NAME>" UriScheme="http" Port="80" Protocol="http"/>
</Endpoints>
</Resources>
</ServiceManifest>
示例 AKS 清单
apiVersion: apps/v1
kind: Deployment
metadata:
name: <APP NAME>
labels:
app: <APP NAME>
spec:
replicas: 1
template:
metadata:
name: <APP NAME>
labels:
app: <APP NAME>
spec:
nodeSelector:
"kubernetes.io/os": windows
containers:
- name: <SERVICE NAME>
image: <YOUR IMAGE>
resources:
limits:
cpu: 1
memory: 800M
ports:
- containerPort: 80
- env:
- name: HttpGatewayPort
value: ""
- name: BackendServiceName
value: ""
selector:
matchLabels:
app: <APP NAME>
---
apiVersion: v1
kind: Service
metadata:
name: <SERVICE NAME>
spec:
type: LoadBalancer
ports:
- protocol: TCP
port: 80
selector:
app: <SERVICE NAME>
Kubernetes 提供了大量配置选项,这对经验丰富的开发人员非常有用。 但是,如果使用的清单太多,清单可能会变得庞大而复杂。 若要了解如何实现简单迁移,建议查看部署和 YAML 清单。
获得清单后,只需应用清单即可监视应用:
kubectl apply -f <YOUR MANIFEST>.yaml
kubectl get deploy <APP NAME>
kubectl get service <SERVICE NAME> --watch
注意
此示例使用默认 Kubernetes 命名空间,该命名空间通常仅用于基本方案。 在 Kubernetes 中,命名空间提供了一种机制,用于隔离单个群集中的资源组。 命名空间对于强制实施安全性、网络和资源边界非常重要。 若要确定最适合应用程序的配置,请参阅 Kuberetes 命名空间文档。
作者
本文由 Microsoft 维护, 它最初是由以下贡献者撰写的。
主要作者:
- Ally Ford | 产品经理 II
- Paolo Salvatori | 首席客户工程师
- Brandon Smith | 项目经理 II
其他参与者:
- Mick Alberts | 技术文档撰写人
- Ayobami Ayodeji | 高级项目经理
- Moumita Dey Verma | 高级云解决方案架构师
若要查看非公开的 LinkedIn 个人资料,请登录到 LinkedIn。
后续步骤
- 通过 AKS 发行说明、Azure 路线图和 AKS 更新了解 AKS 的最新动态。
- 使用最新的 Windows Server 映像帮助维护安全性、提高性能并减少开销。
- 使用 AKS 发布跟踪器随时了解 Kubernetes 的最新版本。
- 使用适用于 .NET 工作负载的最新 SDK。
- 考虑执行负载测试和性能优化,并定期评估应用于 AKS Pod 的 CPU 和内存配额:使用 Azure Monitor 监视 AKS。
- 使用 AKS 登陆区域加速器在 AKS 上实现工作负载并应用最佳做法。