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

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

필수 구성 요소

  • Azure 구독 Azure 구독이 없는 경우 무료 계정을 만들 수 있습니다.
  • Azure CLI 또는 Azure PowerShell 설치.
  • Dapr 클러스터 확장을 사용하도록 설정된 AKS 또는 Arc 지원 Kubernetes 클러스터입니다.

리포지토리 복제

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

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

    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 구성 요소 구성

저장소가 만들어지면 헬로 월드 리포지토리의 배포 디렉터리에 있는 파일에 키를 redis.yaml 추가해야 합니다. 여기에서 자세히 알아볼 수 있습니다.

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

  2. 사용자 고유의 redisPassword 비밀로 바꿉니다.

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

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

구성 적용

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

    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. 명령을 사용하여 클러스터에 Node.js 앱 배포를 적용합니다 kubectl apply .

    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 애플리케이션에 고유한 ID 또는 이름을 할당하므로 다른 Dapr 앱에 메시지를 보내고 통신할 수 있습니다.
  2. 명령을 사용하여 서비스에 액세스합니다 kubectl get svc .

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

서비스 확인

  1. 와 함께 서비스를 curl 호출합니다 EXTERNAL-IP.

    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 파일을 엽니다.

    이 예제는 Dapr의 기본 수신 대기 포트인 JSON 메시지를 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. 명령을 사용하여 Kubernetes 클러스터에 Python 앱을 배포합니다 kubectl apply .

    kubectl apply -f ./deploy/python.yaml
    

    참고 항목

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

    kubectl rollout status deploy/pythonapp
    

메시지 관찰 및 지속성 확인

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

  1. 명령을 사용하여 Node.js 앱의 로그를 가져옵니다 kubectl logs .

    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이 표시됩니다.

리소스 정리

다음 단계