AKS(Azure Kubernetes Service)에서 OpenAI를 사용하는 애플리케이션 배포
이 문서에서는 AKS에서 Azure OpenAI 또는 OpenAI를 사용하는 애플리케이션을 배포하는 방법을 알아봅니다. OpenAI를 사용하면 콘텐츠 생성, 요약, 의미 체계 검색, 자연어에서 코드 생성에 이르는 같은 다양한 AI 모델을 특정 작업에 맞게 쉽게 조정할 수 있습니다. Azure 구독에 AKS 클러스터를 배포하는 것으로 시작합니다. 그런 다음 OpenAI 서비스 및 샘플 애플리케이션을 배포합니다.
샘플 클라우드 네이티브 애플리케이션은 실제 구현을 대표합니다. 다중 컨테이너 애플리케이션은 다음과 같은 여러 언어와 프레임워크로 작성된 애플리케이션으로 구성됩니다.
- Gin을 사용하는 Golang
- Actix-Web을 사용하는 Rust
- Vue.js 및 Fastify를 사용하는 JavaScript
- FastAPI를 사용하는 Python
이러한 애플리케이션은 고객 및 스토어 관리자를 위한 프런트 엔드, RabbitMQ 메시지 큐 및 MongoDB 데이터베이스로 데이터를 보내기 위한 REST API, 트래픽을 시뮬레이션하기 위한 콘솔 앱을 제공합니다.
참고 항목
프로덕션을 위한 영구 스토리지 없이 MongoDB 및 Rabbit MQ와 같은 상태 저장 컨테이너를 실행하지 않는 것이 좋습니다. 여기서는 간소화를 위해 이를 사용하지만 Azure CosmosDB 또는 Azure Service Bus와 같은 관리형 서비스를 사용하는 것이 좋습니다.
샘플 애플리케이션의 GitHub 코드베이스에 액세스하려면 AKS 스토어 데모를 참조하세요.
시작하기 전에
- 활성 구독이 있는 Azure 계정이 필요합니다. 계정이 없으면 무료 계정을 만듭니다.
- 이 데모에서는 Azure OpenAI 서비스 또는 OpenAI 서비스를 사용할 수 있습니다.
- Azure OpenAI 서비스를 사용하려는 경우 Azure OpenAI 서비스에 대한 액세스 요청 양식을 사용하여 Azure 구독에서 이를 사용하도록 설정하기 위한 액세스를 요청해야 합니다.
- OpenAI를 사용하려는 경우 OpenAI 웹 사이트에 등록합니다.
사전 요구 사항
Azure Cloud Shell에서 Bash 환경을 사용합니다. 자세한 내용은 Azure Cloud Shell의 Bash에 대한 빠른 시작을 참조하세요.
CLI 참조 명령을 로컬에서 실행하려면 Azure CLI를 설치합니다. Windows 또는 macOS에서 실행 중인 경우 Docker 컨테이너에서 Azure CLI를 실행하는 것이 좋습니다. 자세한 내용은 Docker 컨테이너에서 Azure CLI를 실행하는 방법을 참조하세요.
로컬 설치를 사용하는 경우 az login 명령을 사용하여 Azure CLI에 로그인합니다. 인증 프로세스를 완료하려면 터미널에 표시되는 단계를 수행합니다. 다른 로그인 옵션은 Azure CLI를 사용하여 로그인을 참조하세요.
메시지가 표시되면 처음 사용할 때 Azure CLI 확장을 설치합니다. 확장에 대한 자세한 내용은 Azure CLI에서 확장 사용을 참조하세요.
az version을 실행하여 설치된 버전과 종속 라이브러리를 찾습니다. 최신 버전으로 업그레이드하려면 az upgrade를 실행합니다.
리소스 그룹 만들기
Azure 리소스 그룹은 Azure 리소스를 배포하고 관리하는 논리 그룹입니다. 리소스 그룹을 만들 때 위치를 지정하라는 메시지가 표시됩니다. 이 위치는 리소스 그룹 메타데이터의 스토리지 위치이며 리소스를 만드는 중에 다른 지역을 지정하지 않은 경우 Azure에서 리소스가 실행되는 위치입니다.
다음 예제에서는 eastus 위치에 myResourceGroup이라는 리소스 그룹을 만듭니다.
az group create
명령을 사용하여 리소스 그룹을 만듭니다.az group create --name myResourceGroup --location eastus
다음 예제 출력은 리소스 그룹의 성공적인 만들기를 보여 줍니다.
{ "id": "/subscriptions/<guid>/resourceGroups/myResourceGroup", "location": "eastus", "managedBy": null, "name": "myResourceGroup", "properties": { "provisioningState": "Succeeded" }, "tags": null, "type": "Microsoft.Resources/resourceGroups" }
AKS 클러스터 만들기
다음 예제에서는 myResourceGroup에 myAKSCluster라는 클러스터를 만듭니다.
az aks create
명령을 사용하여 AKS 클러스터를 만듭니다.az aks create --resource-group myResourceGroup --name myAKSCluster --generate-ssh-keys
몇 분 후 명령이 완료되면 클러스터에 대한 JSON 형식 정보가 반환됩니다.
클러스터에 연결
Kubernetes 클러스터를 관리하려면 Kubernetes 명령줄 클라이언트인 kubectl을 사용합니다. Azure Cloud Shell을 사용하는 경우 kubectl
이 이미 설치되어 있습니다.
az aks install-cli
명령을 사용하여kubectl
을 로컬로 설치합니다.az aks install-cli
참고 항목
Linux 기반 시스템에 높은 권한이 필요한 경우
sudo az aks install-cli
명령을 사용할 수 있습니다.az aks get-credentials
명령을 사용하여 Kubernetes 클러스터에 연결하도록kubectl
을 구성합니다.이 명령은 다음 작업을 실행합니다.
- 자격 증명을 다운로드하고 이를 사용하도록 Kubernetes CLI를 구성합니다.
- Kubernetes 구성 파일의 기본 위치인
~/.kube/config
를 사용합니다. --file 인수를 사용하여 Kubernetes 구성 파일의 다른 위치를 지정합니다.
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
kubectl get
명령을 사용하여 클러스터에 대한 연결을 확인합니다. 이 명령은 클러스터 노드 목록을 반환합니다.kubectl get nodes
다음 예제 출력은 이전 단계에서 만든 노드를 보여줍니다. 노드 상태가 준비인지 확인합니다.
NAME STATUS ROLES AGE VERSION aks-nodepool1-31469198-vmss000000 Ready agent 3h29m v1.25.6 aks-nodepool1-31469198-vmss000001 Ready agent 3h29m v1.25.6 aks-nodepool1-31469198-vmss000002 Ready agent 3h29m v1.25.6
참고 항목
프라이빗 클러스터의 경우 공용 IP 주소를 통해 연결하려고 하면 노드에 연결하지 못할 수도 있습니다. 이 문제를 해결하려면 연결할 클러스터와 동일한 VNET 내에 엔드포인트를 만들어야 합니다. 지침에 따라 프라이빗 AKS 클러스터를 만든 다음 연결합니다.
애플리케이션 배포
AKS 스토어 애플리케이션 매니페스트에는 다음과 같은 Kubernetes 배포와 서비스가 포함되어 있습니다.
- 제품 서비스: 제품 정보를 표시합니다.
- 주문 서비스: 주문을 합니다.
- Makeline 서비스: 큐에서 주문을 처리하고 해당 주문을 완료합니다.
- 스토어 프런트: 고객이 제품을 보고 주문을 할 수 있는 웹 애플리케이션입니다.
- 스토어 관리자: 스토어 직원이 큐에서 주문을 보고 제품 정보를 관리할 수 있는 웹 애플리케이션입니다.
- 가상 고객: 예약 기준으로 주문 생성을 시뮬레이션합니다.
- 가상 작업자: 예약 기준으로 주문 완료를 시뮬레이션합니다.
- Mongo DB: 지속형 데이터에 대한 NoSQL 인스턴스입니다.
- Rabbit MQ: 주문 큐에 대한 메시지 큐입니다.
참고 항목
프로덕션을 위한 영구 스토리지 없이 MongoDB 및 Rabbit MQ와 같은 상태 저장 컨테이너를 실행하지 않는 것이 좋습니다. 여기서는 간소화를 위해 이를 사용하지만 Azure CosmosDB 또는 Azure Service Bus와 같은 관리형 서비스를 사용하는 것이 좋습니다.
애플리케이션에 대한 YAML 매니페스트를 검토합니다.
kubectl apply
명령을 사용하여 애플리케이션을 배포하고 YAML 매니페스트의 이름을 지정합니다.kubectl apply -f https://raw.githubusercontent.com/Azure-Samples/aks-store-demo/main/aks-store-all-in-one.yaml
다음 예제 출력은 성공적으로 만들어진 배포 및 서비스를 보여 줍니다.
deployment.apps/mongodb created service/mongodb created deployment.apps/rabbitmq created service/rabbitmq created deployment.apps/order-service created service/order-service created deployment.apps/makeline-service created service/makeline-service created deployment.apps/product-service created service/product-service created deployment.apps/store-front created service/store-front created deployment.apps/store-admin created service/store-admin created deployment.apps/virtual-customer created deployment.apps/virtual-worker created
OpenAI 배포
Azure OpenAI 또는 OpenAI를 사용하고 AKS에서 애플리케이션을 실행할 수 있습니다.
- Azure OpenAI 서비스에 대한 액세스 요청 양식을 작성하여 Azure 구독에서 Azure OpenAI를 사용하도록 설정합니다.
- Azure Portal에서 Azure OpenAI 인스턴스를 만듭니다.
- 만든 Azure OpenAI 인스턴스를 선택합니다.
- 키 및 엔드포인트를 선택하여 키를 생성합니다.
- 모델 배포>관리형 배포를 선택하여 Azure OpenAI 스튜디오를 엽니다.
- gpt-35-turbo 모델을 사용하여 새 배포를 만듭니다.
Azure OpenAI에서 배포를 만드는 방법에 대한 자세한 내용은 Azure OpenAI 서비스를 사용하여 텍스트 생성 시작하기를 참조하세요.
AI 서비스 배포
이제 애플리케이션이 배포되었으므로 OpenAI를 사용하여 스토어 카탈로그에 추가되는 새 제품에 대한 설명을 자동으로 생성하는 Python 기반 마이크로 서비스를 배포할 수 있습니다.
파일
ai-service.yaml
을 만들고 다음 매니페스트에 복사합니다.apiVersion: apps/v1 kind: Deployment metadata: name: ai-service spec: replicas: 1 selector: matchLabels: app: ai-service template: metadata: labels: app: ai-service spec: nodeSelector: "kubernetes.io/os": linux containers: - name: ai-service image: ghcr.io/azure-samples/aks-store-demo/ai-service:latest ports: - containerPort: 5001 env: - name: USE_AZURE_OPENAI value: "True" - name: AZURE_OPENAI_DEPLOYMENT_NAME value: "" - name: AZURE_OPENAI_ENDPOINT value: "" - name: OPENAI_API_KEY value: "" resources: requests: cpu: 20m memory: 50Mi limits: cpu: 50m memory: 128Mi --- apiVersion: v1 kind: Service metadata: name: ai-service spec: type: ClusterIP ports: - name: http port: 5001 targetPort: 5001 selector: app: ai-service
USE_AZURE_OPENAI
환경 변수를"True"
로 설정합니다.Azure OpenAI 스튜디오에서 Azure OpenAI 배포 이름을 가져와서
AZURE_OPENAI_DEPLOYMENT_NAME
값을 입력합니다.리소스의 왼쪽 블레이드에서 키 및 엔드포인트를 선택하여 Azure Portal에서 Azure OpenAI 엔드포인트 및 Azure OpenAI API 키를 가져옵니다. 그에 따라 YAML의
AZURE_OPENAI_ENDPOINT
및OPENAI_API_KEY
를 업데이트합니다.kubectl apply
명령을 사용하여 애플리케이션을 배포하고 YAML 매니페스트의 이름을 지정합니다.kubectl apply -f ai-service.yaml
다음 예제 출력은 성공적으로 만들어진 배포 및 서비스를 보여 줍니다.
deployment.apps/ai-service created service/ai-service created
참고 항목
API 키와 같은 중요한 정보를 Kubernetes 매니페스트 파일에 직접 추가하는 것은 안전하지 않으며 실수로 코드 리포지토리에 커밋될 수 있습니다. 여기서는 간소화하기 위해 추가했습니다. 프로덕션 워크로드의 경우 관리 ID를 사용하여 대신 Azure OpenAI 서비스에 인증하거나 Azure Key Vault에 비밀을 저장합니다.
애플리케이션 테스트
배포된 Pod의 상태는 kubectl get pods 명령을 사용하여 확인합니다.
kubectl get pods
다음 단계로 진행하기 전에 모든 Pod가 실행 중인지 확인합니다.
NAME READY STATUS RESTARTS AGE makeline-service-7db94dc7d4-8g28l 1/1 Running 0 99s mongodb-78f6d95f8-nptbz 1/1 Running 0 99s order-service-55cbd784bb-6bmfb 1/1 Running 0 99s product-service-6bf4d65f74-7cbvk 1/1 Running 0 99s rabbitmq-9855984f9-94nlm 1/1 Running 0 99s store-admin-7f7d768c48-9hn8l 1/1 Running 0 99s store-front-6786c64d97-xq5s9 1/1 Running 0 99s virtual-customer-79498f8667-xzsb7 1/1 Running 0 99s virtual-worker-6d77fff4b5-7g7rj 1/1 Running 0 99s
kubectl get service
명령을 사용하여 스토어 관리 웹 애플리케이션의 IP를 가져오고 스토어 프런트 웹 애플리케이션을 가져옵니다.kubectl get service store-admin
애플리케이션은 Kubernetes 서비스에서 프로비전된 퍼블릭 부하 분산 장치를 통해 스토어 관리자 사이트를 인터넷에 노출합니다. 이 프로세스를 완료하는 데 몇 분이 걸릴 수 있습니다. 외부 IP는 처음에 서비스가 나타나고 IP 주소를 표시할 때까지 보류 중으로 표시됩니다.
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE store-admin LoadBalancer 10.0.142.228 40.64.86.161 80:32494/TCP 50m
'store-front``라는 이름의 서비스에 대해 동일한 단계를 반복합니다.
웹 브라우저를 열고 서비스의 외부 IP 주소를 찾습니다. 여기에 표시된 예제에서는 40.64.86.161을 열어 브라우저에서 스토어 관리자를 확인합니다. 스토어 프런트에 대해 동일한 단계를 반복합니다.
스토어 관리자에서 제품 탭을 선택한 다음 제품 추가를 선택합니다.
`ai-service``가 성공적으로 실행되면 설명 필드 옆에 OpenAI에 질문 단추가 표시됩니다. 이름, 가격, 키워드를 입력한 다음 OpenAI에 질문>제품 저장을 선택하여 제품 설명을 생성합니다.
이제 판매자가 사용하는 스토어 관리자에서 만든 새 상품을 확인할 수 있습니다. 사진에서 정글 몽키 츄 토이가 추가된 것을 볼 수 있습니다.
또한 구매자가 사용하는 스토어 프런트에서 만든 새 제품을 볼 수 있습니다. 사진에서 정글 몽키 츄 토이가 추가된 것을 볼 수 있습니다.
kubectl get service
명령을 사용하여 스토어 프런트의 IP 주소를 가져와야 합니다.
다음 단계
이제 AKS 애플리케이션에 OpenAI 기능을 추가했으므로 AKS(Azure Kubernetes Service)에서 Azure OpenAI에 대한 액세스를 보호할 수 있습니다.
생성 AI 사용 사례에 대한 자세한 내용은 다음 리소스를 참조하세요.
Azure Kubernetes Service