빠른 시작: AKS(Azure Kubernetes Service) 또는 Arc 지원 Kubernetes용 Dapr 클러스터 확장을 사용하여 애플리케이션 배포
이 빠른 시작에서는 AKS 또는 Arc 지원 Kubernetes 클러스터에서 Dapr 클러스터 확장을 사용합니다. 메시지를 생성하는 Python 애플리케이션과 메시지를 사용하고 유지하는 노드 애플리케이션으로 구성된 hello world
예제를 배포합니다.
필수 구성 요소
- Azure 구독 Azure 구독이 없는 경우 무료 계정을 만들 수 있습니다.
- Azure CLI 또는 Azure PowerShell 설치.
- Dapr 클러스터 확장이 사용하도록 설정된 AKS 또는 Arc 지원 Kubernetes 클러스터입니다.
리포지토리 복제
git clone
명령을 사용하여 Dapr 빠른 시작 리포지토리를 복제합니다.git clone https://github.com/dapr/quickstarts.git
cd
를 사용하여hello-kubernetes
디렉터리로 변경합니다.cd quickstarts/tutorials/hello-kubernetes/
상태 저장소를 만들고 구성
Dapr은 Redis, Azure Cosmos DB, DynamoDB 및 Cassandra와 같은 다양한 상태 저장소를 사용하여 상태를 유지 및 검색할 수 있습니다. 이 예제에서는 Redis를 사용합니다.
Redis 저장소 만들기
Azure Portal을 열어 Azure Cache for Redis 만들기 흐름을 시작합니다.
필요한 정보를 입력합니다.
만들기를 선택하여 Redis 인스턴스 배포를 시작합니다.
Azure의 개요 섹션에서 검색할 수 있는 Redis 인스턴스의 호스트 이름을 기록해 둡니다. 호스트 이름은
xxxxxx.redis.cache.windows.net:6380
예제와 유사할 수 있습니다.설정에서 액세스 키로 이동하여 액세스 키를 가져옵니다.
kubectl create secret generic redis
명령을 사용하여 Redis 암호를 저장하는 Kubernetes 비밀을 만듭니다.kubectl create secret generic redis --from-literal=redis-password=<your-redis-password>
Dapr 구성 요소 구성
저장소를 만든 후에는 Hello World 리포지토리의 배포 디렉터리에 있는 redis.yaml
파일에 키를 추가해야 합니다. 여기에서 자세히 알아볼 수 있습니다.
redisHost
값을 고유한 Redis 마스터 주소로 바꿉니다.redisPassword
를 고유한 비밀로 바꿉니다.TLS를 통해 연결을 사용하도록 설정하려면
redisPassword
아래에 다음 두 줄을 추가합니다.- name: redisPassword secretKeyRef: name: redis key: redis-password - name: enableTLS value: true
구성 적용
kubectl apply
명령을 사용하여redis.yaml
파일을 적용합니다.kubectl apply -f ./deploy/redis.yaml
kubectl get components.redis
명령을 사용하여 상태 저장소가 성공적으로 구성되었는지 확인합니다.kubectl get components.redis -o yaml
다음 예제 출력과 유사한 출력이 표시됩니다.
component.dapr.io/statestore created
Dapr 사이드카를 사용하여 Node.js 앱 배포
kubectl apply
명령을 사용하여 클러스터에 Node.js 앱 배포를 적용합니다.kubectl apply -f ./deploy/node.yaml
참고 항목
Kubernetes 배포는 비동기이므로 다음 단계로 넘어가기 전에 배포가 완료되기를 기다려야 합니다. 이렇게 하려면 다음 명령을 사용합니다.
kubectl rollout status deploy/nodeapp
그러면 Node.js 앱이 Kubernetes에 배포됩니다. Dapr 컨트롤 플레인은 Dapr 사이드카를 Pod에 자동으로 주입합니다.
node.yaml
파일을 살펴보면 해당 배포에 대해 Dapr을 사용하는 방법을 확인할 수 있습니다.dapr.io/enabled: true
: 이 배포에 사이드카를 삽입하도록 Dapr 컨트롤 플레인에 지시합니다.dapr.io/app-id: nodeapp
: 다른 Dapr 앱으로 메시지를 보내고 통신할 수 있도록 Dapr 애플리케이션에 고유한 ID 또는 이름을 할당합니다.
kubectl get svc
명령을 사용하여 서비스에 액세스합니다.kubectl get svc nodeapp
출력의
EXTERNAL-IP
를 기록해 둡니다.
서비스 확인
EXTERNAL-IP
에서curl
을 사용하여 서비스를 호출합니다.curl $EXTERNAL_IP/ports
다음 예제 출력과 유사한 출력이 표시됩니다.
{"DAPR_HTTP_PORT":"3500","DAPR_GRPC_PORT":"50001"}
curl
을 사용하여 애플리케이션에 주문을 제출합니다.curl --request POST --data "@sample.json" --header Content-Type:application/json $EXTERNAL_IP/neworder
curl
을 통해 요청하여 주문이 유지되었는지 확인합니다.curl $EXTERNAL_IP/order
다음 예제 출력과 유사한 출력이 표시됩니다.
{ "orderId": "42" }
Dapr 사이드카를 사용하여 Python 앱 배포
hello-kubernetes
빠른 시작에서 Python 앱 디렉터리로 이동하여app.py
파일을 엽니다.이 예제는 JSON 메시지를 Dapr의 기본 수신 대기 포트인
localhost:3500
에 게시하는 기본 Python 앱입니다.v1.0/invoke/nodeapp/method/neworder
에 게시하여 Node.js 애플리케이션의neworder
엔드포인트를 호출할 수 있습니다. 메시지에는 다음과 같이 1초에 한 번씩 증가하는orderId
가 포함된 데이터가 있습니다.n = 0 while True: n += 1 message = {"data": {"orderId": n}} try: response = requests.post(dapr_url, json=message) except Exception as e: print(e) time.sleep(1)
kubectl apply
명령을 사용하여 Kubernetes 클러스터에 Python 앱을 배포합니다.kubectl apply -f ./deploy/python.yaml
참고 항목
이전 명령과 마찬가지로 다음 단계로 넘어가기 전에 배포가 완료되기를 기다려야 합니다. 이렇게 하려면 다음 명령을 사용합니다.
kubectl rollout status deploy/pythonapp
메시지 관찰 및 지속성 확인
이제 Node.js와 Python 애플리케이션이 모두 배포되었으므로 메시지가 전달되는 것을 볼 수 있습니다.
kubectl logs
명령을 사용하여 Node.js 앱의 로그를 가져옵니다.kubectl logs --selector=app=node -c node --tail=-1
배포에 성공하면 다음 예제 로그와 같은 로그가 표시됩니다.
Got a new order! Order ID: 1 Successfully persisted state Got a new order! Order ID: 2 Successfully persisted state Got a new order! Order ID: 3 Successfully persisted state
Node.js 앱의 주문 엔드포인트를 호출하여
curl
을 통해 최신 주문을 가져옵니다.curl $EXTERNAL_IP/order {"orderID":"42"}
응답에 최신 JSON이 표시됩니다.
리소스 정리
az group delete 명령을 사용하여 리소스 그룹, 클러스터, 네임스페이스 및 모든 관련 리소스를 제거합니다.
az group delete --name MyResourceGroup
다음 단계
Azure Kubernetes Service