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 환경입니다.
Azure Cloud Shell 을 사용하면 브라우저에서 작업할 수 있습니다. 자세한 내용은 Azure Cloud Shell의 Bash에 대한 빠른 시작을 참조하세요.
로컬 설치를 사용하는 경우 az login 명령을 사용하여 Azure CLI에 로그인합니다. 인증 프로세스를 완료하려면 터미널에 표시되는 단계를 수행합니다. 다른 로그인 옵션은 Azure CLI를 사용하여 로그인을 참조하세요.
Azure CLI를 처음 사용할 때 메시지가 표시되면 Azure CLI 확장을 설치해야 합니다. 확장에 대한 자세한 내용은 Azure CLI에서 확장 사용을 참조하세요.
kubectl Kubernetes 명령줄 도구입니다. 사용자 환경에서 아직 사용할 수 없는 경우 다음 명령을 실행하여 설치할 수 있습니다.
az aks install-cli
마이그레이션 단계
첫 번째 단계는 Kubernetes에서 Windows 노드 풀을 빌드하는 데 필요한 리소스를 설정하는 것입니다. 이렇게 하려면 AKS 클러스터에서 Windows Server 컨테이너 만들기의 지침을 따르지만 "애플리케이션 배포" 섹션에 도달하면 중지해야 합니다. 이 시점에서 이 문서의 지침을 따릅니다.
Service Fabric 구성 매니페스트를 AKS 매니페스트로 변환하는 것은 중요한 단계입니다. 다음 섹션에서는 다음을 보여줍니다.
- 기본 Service Fabric 배포에 사용할 수 있는 서비스 매니페스트 XML입니다.
- Kubernetes 배포 및 서비스 개체를 만드는 기능적으로 동등한 AKS 매니페스트입니다.
두 매니페스트는 각 서비스와 관련된 기능 패러다임을 기반으로 하지만 의도는 동일하기 때문에 일대일로 매핑되지 않습니다. (이러한 샘플에서 변수는 형식 <VARIABLE DESCRIPTION>
을 사용합니다.)
AKS 매니페스트 Deployment
에서 개체는 Pod 및 ReplicaSets에 대한 선언적 업데이트를 제공합니다. 개체는 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에서 이 문서를 유지 관리합니다. 원래 다음 기여자가 작성했습니다.
주요 작성자:
기타 기여자:
- Mick Alberts | 테크니컬 라이터
- Ayobami Ayodeji | 선임 프로그램 관리자
- Moumita Dey Verma | 선임 클라우드 솔루션 설계자
비공개 LinkedIn 프로필을 보려면 LinkedIn에 로그인합니다.
다음 단계
- AKS 릴리스 정보, AKS 로드맵 및 Azure 업데이트를 사용하여 AKS를 최신 상태로 유지합니다.
- 최신 Windows Server 이미지를 사용하여 보안을 유지하고 성능을 개선하며 오버헤드를 줄일 수 있습니다.
- AKS 릴리스 추적기를 사용하여 최신 버전의 Kubernetes를 최신 상태로 유지합니다.
- .NET 워크로드에 최신 SDK를 사용합니다.
- 부하 테스트 및 성능 튜닝을 수행하고 AKS Pod 에 적용되는 CPU 및 메모리 할당량을 주기적으로 평가하는 것이 좋습니다. Azure Monitor를 사용하여 AKS를 모니터링합니다.
- AKS 랜딩 존 가속기를 사용하여 AKS에서 워크로드를 구현하고 모범 사례를 적용합니다.