Linux 앱 배포
적용 대상: Azure Stack HCI 22H2의 AKS, Windows Server의 AKS
이 가이드에서는 Azure Arc에서 사용하도록 설정된 AKS의 Kubernetes 클러스터에 웹 프런트 엔드 및 Redis 데이터베이스 인스턴스를 포함하는 다중 컨테이너 앱을 배포하는 방법을 설명합니다. 또한 앱을 테스트하고 크기를 조정하는 방법도 알아봅니다.
이 방법 가이드에서는 Kubernetes 개념에 대한 기본적인 이해를 가정합니다. 자세한 내용은 Kubernetes 핵심 개념을 참조 하세요.
시작하기 전에
다음 필수 조건을 갖추고 있는지 확인합니다.
- 실행 중인 Linux 작업자 노드가 하나 이상 있는 AKS 클러스터입니다.
- 클러스터에 액세스할 kubeconfig 파일입니다.
- AksHci PowerShell 모듈이 설치됩니다. 자세한 내용은 Install-AksHci를 참조하세요.
절차를 수행하는 경우:
- 관리자 권한으로 열린 PowerShell 창에서 명령을 실행합니다.
- OS 관련 워크로드가 적절한 컨테이너 호스트에 있는지 확인합니다. Kubernetes 클러스터에 Linux 및 Windows 작업자 노드가 혼합되어 있는 경우 노드 선택기 또는 taint 및 toleration을 사용할 수 있습니다. 자세한 내용은 노드 선택기 및 taint 및 tolerations 사용을 참조 하세요.
참고 항목
네트워크를 다른 대상 클러스터와 공유하는 대상 클러스터를 배포하면 부하 분산 장치 IP 주소 충돌이 발생할 수 있습니다.
동일한 AksHciClusterNetwork
개체를 공유하는 대상 클러스터에서 서로 다른 포트를 사용하는 두 개의 워크로드를 배포하는 경우 IP 주소 충돌이 발생할 수 있습니다. IP 주소 및 포트 매핑이 HA 프록시 내에서 할당되는 방식으로 인해 중복 IP 주소가 할당될 수 있습니다. 이 경우 워크로드를 다시 배포할 때까지 하나 또는 두 워크로드에서 임의 네트워크 연결 문제가 발생할 수 있습니다. 워크로드를 다시 배포할 때 각 워크로드에 서비스 IP 주소를 할당하는 동일한 포트를 사용하거나 다른 AksHciClusterNetwork
개체를 사용하는 대상 클러스터에 워크로드를 다시 배포할 수 있습니다.
앱 배포하기
Kubernetes 매니페스트 파일은 실행할 컨테이너 이미지 등 원하는 클러스터 상태를 정의합니다. 이 자습서에서는 매니페스트를 사용하여 Azure 투표 앱을 실행하는 데 필요한 모든 개체를 만듭니다. 이 매니페스트에는 두 개의 Kubernetes 배포가 포함됩니다. 하나는 샘플 Azure Vote Python 앱용이고 다른 하나는 Redis 인스턴스용입니다. Redis 인스턴스에 대한 내부 서비스 및 인터넷에서 Azure Vote 앱에 액세스하는 외부 서비스라는 두 개의 Kubernetes 서비스도 만들어집니다.
azure-vote.yaml이라는 파일을 만들고 다음 YAML 정의를 복사하여 붙여넣습니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: azure-vote-back
spec:
replicas: 1
selector:
matchLabels:
app: azure-vote-back
template:
metadata:
labels:
app: azure-vote-back
spec:
nodeSelector:
"beta.kubernetes.io/os": linux
containers:
- name: azure-vote-back
image: redis
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 250m
memory: 256Mi
ports:
- containerPort: 6379
name: redis
---
apiVersion: v1
kind: Service
metadata:
name: azure-vote-back
spec:
ports:
- port: 6379
selector:
app: azure-vote-back
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: azure-vote-front
spec:
replicas: 1
selector:
matchLabels:
app: azure-vote-front
template:
metadata:
labels:
app: azure-vote-front
spec:
nodeSelector:
"beta.kubernetes.io/os": linux
containers:
- name: azure-vote-front
image: <path to image>/azure-vote-front:v1
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 250m
memory: 256Mi
ports:
- containerPort: 80
env:
- name: REDIS
value: "azure-vote-back"
---
apiVersion: v1
kind: Service
metadata:
name: azure-vote-front
spec:
type: LoadBalancer
ports:
- port: 80
selector:
app: azure-vote-front
명령을 사용하여 kubectl apply
앱을 배포하고 YAML 매니페스트의 이름을 지정합니다.
kubectl apply -f azure-vote.yaml
다음 예제 출력은 성공적으로 생성된 배포 및 서비스를 보여 줍니다.
deployment "azure-vote-back" created
service "azure-vote-back" created
deployment "azure-vote-front" created
service "azure-vote-front" created
앱 테스트
앱이 실행되면 Kubernetes 서비스는 앱 프런트 엔드를 인터넷에 노출합니다. 이 프로세스를 완료하는 데 몇 분이 걸릴 수 있습니다.
진행률을 모니터링하려면 인수와 kubectl get service
함께 --watch
명령을 사용합니다.
kubectl get service azure-vote-front --watch
처음에는 azure-vote-front 서비스에 대한 EXTERNAL-IP가 보류 중인 것으로 표시됩니다.
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
azure-vote-front LoadBalancer 10.0.37.27 <pending> 80:30572/TCP 22m
EXTERNAL-IP 주소가 보류 중인 실제 공용 IP 주소로 변경되면 Ctrl-C를 사용하여 조사식 프로세스를 중지 kubectl
합니다. 다음 예제 출력은 서비스에 할당된 유효한 공용 IP 주소를 보여줍니다.
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
azure-vote-front LoadBalancer 10.0.37.27 52.179.23.131 80:30572/TCP 24m
Azure Vote 앱이 실제로 작동하는 모습을 보려면 웹 브라우저를 서비스의 외부 IP 주소로 엽니다.
애플리케이션 Pod 크기 조정
Azure Voting App 프런트 엔드 및 Redis 인스턴스의 단일 복제본을 만들었습니다. 클러스터에서 Pod의 수와 상태를 보려면 다음 kubectl get
명령을 사용합니다.
kubectl get pods -n default
다음 예제 출력은 프런트 엔드 Pod 1개와 백 엔드 Pod 1개를 보여줍니다.
NAME READY STATUS RESTARTS AGE
azure-vote-back-6bdcb87f89-g2pqg 1/1 Running 0 25m
azure-vote-front-84c8bf64fc-cdq86 1/1 Running 0 25m
azure-vote-front 배포에서 Pod 수를 변경하려면 이 kubectl scale
명령을 사용합니다. 다음 예제에서는 프런트 엔드 Pod 수를 5로 늘입니다.
kubectl scale --replicas=5 deployment/azure-vote-front
다시 실행 kubectl get pods
하여 추가 Pod가 생성되었는지 확인합니다. 1분 정도 지나면 클러스터에서 추가 Pod를 사용할 수 있습니다.
kubectl get pods -n default
Name READY STATUS RESTARTS AGE
azure-vote-back-6bdcb87f89-g2pqg 1/1 Running 0 31m
azure-vote-front-84c8bf64fc-cdq86 1/1 Running 0 31m
azure-vote-front-84c8bf64fc-56h64 1/1 Running 0 80s
azure-vote-front-84c8bf64fc-djkp8 1/1 Running 0 80s
azure-vote-front-84c8bf64fc-jmmvs 1/1 Running 0 80s
azure-vote-front-84c8bf64fc-znc6z 1/1 Running 0 80s