你当前正在访问 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 环境。

  • Kubernetes 命令行工具 kubectl。 如果环境中还没有该软件,则可以运行此命令进行安装:

    az aks install-cli
    

迁移步骤

第一步是设置在 Kubernetes 中生成 Windows 节点池所需的资源。 为此,请按照在在 AKS 群集上创建 Windows Server 容器中的指南操作,但务必在到达“部署应用程序”部分时停止。 此时,请按照本文中的说明进行操作。

将 Service Fabric 配置清单转换为 AKS 清单是一个重要步骤。 以下部分介绍以下内容:

  • 可用于基本 Service Fabric 部署的服务清单 XML。
  • 一个功能等效的 AKS 清单,用于创建 Kubernetes 部署服务对象。

这两个清单不一一映射,因为它们基于特定于每个服务的功能范例,但其意图是相同的。 (在这些示例中,变量使用格式 <VARIABLE DESCRIPTION>。)

在 AKS 清单中,Deployment 对象为 PodReplicaSet 提供声明性更新。 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 维护, 它最初是由以下贡献者撰写的。

主要作者:

其他参与者:

若要查看非公开的 LinkedIn 个人资料,请登录到 LinkedIn。

后续步骤