Partilhar via


Migrar um aplicativo simples do Service Fabric para o AKS

Este artigo fornece um exemplo de migração de carga de trabalho para ajudá-lo a implementar algumas das informações conceituais fornecidas em Migrar sua carga de trabalho do Service Fabric para o AKS. Esse artigo fornece informações sobre o Serviço Kubernetes do Azure (AKS) e uma comparação do AKS com o Azure Service Fabric. Ele também descreve considerações a serem levadas em conta ao migrar suas cargas de trabalho.

Este exemplo se concentra em aplicativos do Service Fabric baseados no Windows que já foram conteinerizados. O Azure Service Fabric e o Azure Kubernetes Service oferecem suporte a contêineres Windows e Linux. Se seu aplicativo não estiver em contêineres, considere investigar se você pode conteinerizá-lo. Criar uma imagem de contêiner para seu aplicativo é um pré-requisito para implantar o aplicativo no Serviço Kubernetes do Azure. Se o aplicativo depender de modelos de programação do Service Fabric (Serviços Confiáveis, Atores Confiáveis, ASP.NET Core e executáveis convidados), você provavelmente precisará fazer alguma refatoração.

Para obter informações sobre como colocar seu aplicativo em contêineres, consulte Preparar um aplicativo para o AKS. Para obter informações sobre como colocar em contêiner um aplicativo ASP.NET, consulte ASP.NET a conteinerização e migração de aplicativos para o AKS.

Pré-requisitos

Antes de iniciar a migração, você precisa:

  • Uma imagem de contêiner de aplicativo armazenada no Registro de Contêiner do Azure.

  • Um ambiente Bash que você pode usar para configurar seus recursos do Azure.

  • A ferramenta de linha de comando kubectl Kubernetes. Se ele ainda não estiver disponível em seu ambiente, você poderá instalá-lo executando este comando:

    az aks install-cli
    

Passos da Migração

A primeira etapa é configurar os recursos necessários para criar um pool de nós do Windows no Kubernetes. Para fazer isso, siga as orientações em Criar um contêiner do Windows Server em um cluster AKS, mas certifique-se de parar quando chegar à seção "Implantar o aplicativo". Nesse ponto, siga as instruções neste artigo.

A tradução do manifesto de configuração do Service Fabric para um manifesto AKS é uma etapa importante. As seções a seguir mostram:

  • XML de manifesto de serviço que você pode usar para uma implantação básica do Service Fabric.
  • Um manifesto AKS funcionalmente equivalente que cria objetos Kubernetes Deployment and Service .

Os dois manifestos não mapeiam um para um porque se baseiam nos paradigmas funcionais que são específicos de cada serviço, mas suas intenções são as mesmas. (Nesses exemplos, as variáveis usam o formato <VARIABLE DESCRIPTION>.)

No manifesto AKS, um Deployment objeto fornece atualizações declarativas para Pods e ReplicaSets. Um Service objeto expõe um aplicativo que está sendo executado em um conjunto de pods como um serviço de rede.

Exemplo de manifesto de serviço do 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>

Exemplo de manifesto 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>

O Kubernetes fornece um grande conjunto de opções de configuração, o que é útil para desenvolvedores experientes. Mas os manifestos podem se tornar grandes e complexos quando você usa muitos deles. Para saber mais sobre como implementar uma migração simples, recomendamos que você revise Implantações e manifestos YAML.

Depois de ter seu manifesto, você só precisa aplicá-lo e você pode assistir ao seu aplicativo:

kubectl apply -f <YOUR MANIFEST>.yaml
kubectl get deploy <APP NAME>
kubectl get service <SERVICE NAME> --watch

Nota

Este exemplo usa o namespace Kubernetes padrão, que geralmente é usado apenas para cenários básicos. No Kubernetes, os namespaces fornecem um mecanismo para isolar grupos de recursos em um único cluster. Os namespaces são importantes para impor limites de segurança, rede e recursos. Para determinar uma configuração que funcione melhor para seu aplicativo, consulte a documentação de namespaces Kuberetes.

Contribuidores

Este artigo é mantido pela Microsoft. Foi originalmente escrito pelos seguintes contribuidores.

Principais autores:

Outros contribuidores:

Para ver perfis não públicos do LinkedIn, inicie sessão no LinkedIn.

Próximos passos