다음을 통해 공유


빠른 시작: AKS(Azure Kubernetes Service) 또는 Arc 지원 Kubernetes용 Dapr 클러스터 확장을 사용하여 애플리케이션 배포

이 빠른 시작에서는 AKS 또는 Arc 지원 Kubernetes 클러스터에서 Dapr 클러스터 확장을 사용합니다. 메시지를 생성하는 Python 애플리케이션과 메시지를 사용하고 유지하는 노드 애플리케이션으로 구성된 hello world 예제를 배포합니다.

필수 구성 요소

리포지토리 복제

  1. git clone 명령을 사용하여 Dapr 빠른 시작 리포지토리를 복제합니다.

    git clone https://github.com/dapr/quickstarts.git
    
  2. cd를 사용하여 hello-kubernetes 디렉터리로 변경합니다.

    cd quickstarts/tutorials/hello-kubernetes/
    

상태 저장소를 만들고 구성

Dapr은 Redis, Azure Cosmos DB, DynamoDB 및 Cassandra와 같은 다양한 상태 저장소를 사용하여 상태를 유지 및 검색할 수 있습니다. 이 예제에서는 Redis를 사용합니다.

Redis 저장소 만들기

  1. Azure Portal을 열어 Azure Cache for Redis 만들기 흐름을 시작합니다.

  2. 필요한 정보를 입력합니다.

  3. 만들기를 선택하여 Redis 인스턴스 배포를 시작합니다.

  4. Azure의 개요 섹션에서 검색할 수 있는 Redis 인스턴스의 호스트 이름을 기록해 둡니다. 호스트 이름은 xxxxxx.redis.cache.windows.net:6380 예제와 유사할 수 있습니다.

  5. 설정에서 액세스 키로 이동하여 액세스 키를 가져옵니다.

  6. kubectl create secret generic redis 명령을 사용하여 Redis 암호를 저장하는 Kubernetes 비밀을 만듭니다.

    kubectl create secret generic redis --from-literal=redis-password=<your-redis-password>
    

Dapr 구성 요소 구성

저장소를 만든 후에는 Hello World 리포지토리의 배포 디렉터리에 있는 redis.yaml 파일에 키를 추가해야 합니다. 여기에서 자세히 알아볼 수 있습니다.

  1. redisHost 값을 고유한 Redis 마스터 주소로 바꿉니다.

  2. redisPassword를 고유한 비밀로 바꿉니다.

  3. TLS를 통해 연결을 사용하도록 설정하려면 redisPassword 아래에 다음 두 줄을 추가합니다.

    - name: redisPassword
        secretKeyRef:
          name: redis
          key: redis-password
    - name: enableTLS
      value: true
    

구성 적용

  1. kubectl apply 명령을 사용하여 redis.yaml 파일을 적용합니다.

    kubectl apply -f ./deploy/redis.yaml
    
  2. kubectl get components.redis 명령을 사용하여 상태 저장소가 성공적으로 구성되었는지 확인합니다.

    kubectl get components.redis -o yaml
    

    다음 예제 출력과 유사한 출력이 표시됩니다.

    component.dapr.io/statestore created
    

Dapr 사이드카를 사용하여 Node.js 앱 배포

  1. 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 또는 이름을 할당합니다.
  2. kubectl get svc 명령을 사용하여 서비스에 액세스합니다.

    kubectl get svc nodeapp
    
  3. 출력의 EXTERNAL-IP를 기록해 둡니다.

서비스 확인

  1. EXTERNAL-IP에서 curl을 사용하여 서비스를 호출합니다.

    curl $EXTERNAL_IP/ports
    

    다음 예제 출력과 유사한 출력이 표시됩니다.

    {"DAPR_HTTP_PORT":"3500","DAPR_GRPC_PORT":"50001"}
    
  2. curl을 사용하여 애플리케이션에 주문을 제출합니다.

    curl --request POST --data "@sample.json" --header Content-Type:application/json $EXTERNAL_IP/neworder
    
  3. curl을 통해 요청하여 주문이 유지되었는지 확인합니다.

    curl $EXTERNAL_IP/order
    

    다음 예제 출력과 유사한 출력이 표시됩니다.

    { "orderId": "42" }
    

Dapr 사이드카를 사용하여 Python 앱 배포

  1. 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)
    
  2. kubectl apply 명령을 사용하여 Kubernetes 클러스터에 Python 앱을 배포합니다.

    kubectl apply -f ./deploy/python.yaml
    

    참고 항목

    이전 명령과 마찬가지로 다음 단계로 넘어가기 전에 배포가 완료되기를 기다려야 합니다. 이렇게 하려면 다음 명령을 사용합니다.

    kubectl rollout status deploy/pythonapp
    

메시지 관찰 및 지속성 확인

이제 Node.js와 Python 애플리케이션이 모두 배포되었으므로 메시지가 전달되는 것을 볼 수 있습니다.

  1. 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
    
  2. Node.js 앱의 주문 엔드포인트를 호출하여 curl을 통해 최신 주문을 가져옵니다.

    curl $EXTERNAL_IP/order
    {"orderID":"42"}
    

    응답에 최신 JSON이 표시됩니다.

리소스 정리

  • az group delete 명령을 사용하여 리소스 그룹, 클러스터, 네임스페이스 및 모든 관련 리소스를 제거합니다.

    az group delete --name MyResourceGroup
    

다음 단계