다음을 통해 공유


Service Fabric에서 AKS로 간단한 앱 마이그레이션

이 문서에서는 워크로드를 Service Fabric에서 AKS로 마이그레이션하는 데 제공되는 일부 개념 정보를 구현하는 데 도움이 되는 워크로드 마이그레이션 예제를 제공합니다. 이 문서에서는 AKS(Azure Kubernetes Service)에 대한 정보와 AKS와 Azure Service Fabric의 비교를 제공합니다. 또한 워크로드를 마이그레이션할 때 고려해야 할 고려 사항도 설명합니다.

이 예제에서는 이미 컨테이너화된 Windows 기반 Service Fabric 애플리케이션에 중점을 둡니다. Azure Service Fabric과 Azure Kubernetes Service는 모두 Windows 및 Linux 컨테이너를 지원합니다. 애플리케이션이 컨테이너화되지 않은 경우 컨테이너화할 수 있는지 여부를 조사하는 것이 좋습니다. 애플리케이션에 대한 컨테이너 이미지를 빌드하는 것은 Azure Kubernetes Service에 애플리케이션을 배포하기 위한 필수 구성 요소입니다. 애플리케이션이 Service Fabric 프로그래밍 모델(Reliable Services, Reliable Actors, ASP.NET Core 및 게스트 실행 파일)에 의존하는 경우 일부 리팩터링을 수행해야 할 수 있습니다.

애플리케이션을 컨테이너화하는 방법에 대한 자세한 내용은 AKS용 애플리케이션 준비를 참조하세요. ASP.NET 애플리케이션을 컨테이너화하는 방법에 대한 자세한 내용은 ASP.NET 앱 컨테이너화 및 AKS로의 마이그레이션을 참조하세요.

필수 조건

마이그레이션을 시작하기 전에 다음이 필요합니다.

  • Azure Container Registry에 저장된 애플리케이션 컨테이너 이미지입니다.

  • Azure 리소스를 구성하는 데 사용할 수 있는 Bash 환경입니다.

  • kubectl Kubernetes 명령줄 도구입니다. 사용자 환경에서 아직 사용할 수 없는 경우 다음 명령을 실행하여 설치할 수 있습니다.

    az aks install-cli
    

마이그레이션 단계

첫 번째 단계는 Kubernetes에서 Windows 노드 풀을 빌드하는 데 필요한 리소스를 설정하는 것입니다. 이렇게 하려면 AKS 클러스터에서 Windows Server 컨테이너 만들기의 지침을 따르지만 "애플리케이션 배포" 섹션에 도달하면 중지해야 합니다. 이 시점에서 이 문서의 지침을 따릅니다.

Service Fabric 구성 매니페스트를 AKS 매니페스트로 변환하는 것은 중요한 단계입니다. 다음 섹션에서는 다음을 보여줍니다.

  • 기본 Service Fabric 배포에 사용할 수 있는 서비스 매니페스트 XML입니다.
  • Kubernetes 배포서비스 개체를 만드는 기능적으로 동등한 AKS 매니페스트입니다.

두 매니페스트는 각 서비스와 관련된 기능 패러다임을 기반으로 하지만 의도는 동일하기 때문에 일대일로 매핑되지 않습니다. (이러한 샘플에서 변수는 형식 <VARIABLE DESCRIPTION>을 사용합니다.)

AKS 매니페스트 Deployment 에서 개체는 PodReplicaSets에 대한 선언적 업데이트를 제공합니다. 개체는 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에 로그인합니다.

다음 단계