다음을 통해 공유


MQTT 브로커와 통신하는 분산 애플리케이션 워크로드를 개발하려면 Dapr 사용

MQTT 브로커 Dapr 플러그형 구성 요소를 사용하려면 Dapr 애플리케이션과 함께 애플리케이션 배포에 pub/sub 및 state store 구성 요소를 모두 배포해야 합니다. 이 가이드에서는 Dapr SDK와 MQTT 브로커 플러그형 구성 요소를 사용하여 애플리케이션을 배포하는 방법을 보여 줍니다.

필수 조건

Dapr 애플리케이션 만들기

애플리케이션 빌드

첫 번째 단계는 Dapr SDK를 사용하여 게시/구독하거나 상태 관리를 수행하는 애플리케이션을 작성하는 것입니다.

애플리케이션 패키징

Dapr 애플리케이션 작성이 끝나면 컨테이너를 빌드합니다.

  1. 다음 명령을 사용하여 애플리케이션을 컨테이너에 패키지합니다.

    docker build . -t my-dapr-app
    
  2. 다음과 같이 원하는 Container Registry에 애플리케이션을 푸시합니다.

Dapr 애플리케이션 배포

다음 배포 정의에는 SAT 인증 및 TLS 인증서 체인에 대한 볼륨이 포함되어 있으며 Dapr 사이드카 주입을 사용하여 플러그형 구성 요소를 Pod에 자동으로 추가합니다.

다음 정의 구성 요소는 특정 애플리케이션에 대한 사용자 지정이 필요할 수 있습니다.

구성 요소 설명
template:metadata:annotations:dapr.io/inject-pluggable-components IoT Operations 플러그형 구성 요소를 Pod에 자동으로 삽입할 수 있습니다.
template:metadata:annotations:dapr.io/app-port 애플리케이션이 수신 대기 중인 포트를 Dapr에 알릴 수 있습니다. 애플리케이션에서 이 기능을 사용하지 않는 경우(예: pubsub 구독) 이 줄을 제거합니다.
volumes:mqtt-client-token MQTT 브로커를 사용하여 Dapr 플러그형 구성 요소를 인증하는 데 사용되는 시스템 인증 토큰
volumes:aio-ca-trust-bundle MQTT 브로커 TLS 인증서의 유효성을 검사하는 신뢰 체인. 기본값은 Azure IoT Operations를 사용하여 배포된 테스트 인증서입니다.
containers:name 애플리케이션 컨테이너에 지정된 이름
containers:image 배포하려는 애플리케이션 컨테이너

주의

Dapr 애플리케이션이 Dapr 사이드카에서 트래픽을 수신 대기하지 않는 경우 주석 및 dapr.io/app-protocol 주석을 제거 dapr.io/app-port 합니다. 그렇지 않으면 Dapr 사이드카가 초기화되지 않습니다.

  1. 다음 yaml을 dapr-app.yaml 파일에 저장합니다.

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: dapr-client
      namespace: azure-iot-operations
      annotations:
        aio-broker-auth/group: dapr-workload
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: my-dapr-app
      namespace: azure-iot-operations
    spec:
      selector:
        matchLabels:
          app: my-dapr-app
      template:
        metadata:
          labels:
            app: my-dapr-app
          annotations:
            dapr.io/enabled: "true"
            dapr.io/inject-pluggable-components: "true"
            dapr.io/app-id: "my-dapr-app"
            dapr.io/app-port: "6001"
            dapr.io/app-protocol: "grpc"
        spec:
          serviceAccountName: dapr-client
    
          volumes:
          # SAT used to authenticate between Dapr and the MQTT broker
          - name: mqtt-client-token
            projected:
              sources:
                - serviceAccountToken:
                    path: mqtt-client-token
                    audience: aio-internal
                    expirationSeconds: 86400
    
          # Certificate chain for Dapr to validate the MQTT broker
          - name: aio-ca-trust-bundle
            configMap:
              name: azure-iot-operations-aio-ca-trust-bundle
    
          containers:
          # Container for the Dapr application 
          - name: mq-dapr-app
            image: <YOUR_DAPR_APPLICATION>
    
  2. 다음 명령을 실행하여 구성 요소를 배포합니다.

    kubectl apply -f dapr-app.yaml
    kubectl get pods -w
    

    Pod는 다음 예제 출력과 같이 짧은 간격 후에 실행되는 세 개의 컨테이너를 보고해야 합니다.

    NAME                          READY   STATUS              RESTARTS   AGE
    ...
    my-dapr-app                   3/3     Running             0          30s
    

문제 해결

애플리케이션이 시작되지 않거나 컨테이너가 상태인 CrashLoopBackoff 경우 컨테이너에 daprd 대한 로그에 유용한 정보가 포함된 경우가 많습니다.

다음 명령을 실행하여 daprd 구성 요소에 대한 로그를 봅니다.

kubectl logs -l app=my-dapr-app -c daprd

다음 단계

이제 Dapr 애플리케이션을 개발하는 방법을 알았으므로 자습서를 통해 Dapr을 사용하여 이벤트 기반 앱 빌드를 실행할 수 있습니다.