全部產品
Search
文件中心

Container Service for Kubernetes:通過輕量訊息佇列(原 MNS)觸發工作流程

更新時間:Sep 24, 2025

工作流程叢集支援整合阿里雲輕量訊息佇列(原 MNS),利用輕量訊息佇列(原 MNS)作為中介接入豐富的事件來源,利用事件驅動觸發工作流程運行。當有新的事件觸發(如OSS事件觸發、EventBridge事件觸發)時,輕量訊息佇列(原 MNS)會收到相應的訊息,Argo會根據事件觸發的條件自動觸發工作流程的運行,實現自動化的工作流程處理。

前提條件

步驟一:建立Event Bus

Event Bus可以被命名空間中的事件驅動工作流程共用,您可以通過NATS和輕量訊息佇列(原 MNS)兩種方式建立,如果已經建立,請直接執行步驟二:建立Event Source

通過NATS建立

  1. 建立event-bus.yaml檔案。Event Bus範例程式碼如下所示:

    apiVersion: argoproj.io/v1alpha1
    kind: EventBus
    metadata:
      name: default
    spec:
      nats:
        native:
          replicas: 3
          auth: token
  2. 執行以下命令,建立EventBus。

    kubectl apply -f event-bus.yaml
    說明

    命令執行成功後,會在default命名空間下建立Event Bus Pod。後續操作需在同一命名空間下。

  3. 執行以下命令,查看Event Bus Pod是否正常啟動。

    kubectl get pod

通過輕量訊息佇列(原 MNS)建立

  1. 登入輕量訊息佇列(原 MNS)控制台

  2. 主題列表頁面建立主題argoeventbus,並在主題詳情頁面的存取點地區擷取Endpoint。

  3. 使用Resource Access Management員登入RAM控制台

  4. 建立RAM使用者,為RAM使用者授予AliyunMNSFullAccess許可權,並擷取RAM使用者的AK和SK。

    具體操作,請參見建立RAM使用者為RAM使用者授權建立AccessKey查看RAM使用者的AccessKey資訊

  5. 執行以下命令,建立Secret用於儲存AK和SK。

    kubectl create secret generic mns-secret\
      --from-literal=accesskey=*** \
      --from-literal=secretkey=***
  6. 建立event-bus-mns.yaml檔案,將樣本中的參數修改為實際使用的參數值。

    • topic:需替換為步驟2中建立的輕量訊息佇列(原 MNS)中的主題名稱。

    • endpoint:需替換為步驟2中擷取的Endpoint。

    apiVersion: argoproj.io/v1alpha1
    kind: EventBus
    metadata:
      name: default
    spec:
      alimns:
        accessKey:
          key: accesskey
          name: mns-secret
        secretKey:
          key: secretkey
          name: mns-secret
        topic: argoeventbus  # 對應輕量訊息佇列(原 MNS)中的主題名稱。
        endpoint: http://165***368.mns.<region>.aliyuncs.com  # 對應輕量訊息佇列(原 MNS)的Endpoint。
  7. 執行以下命令,應用event-bus-mns.yaml檔案建立Event Bus資源。

    kubectl apply -f event-bus-mns.yaml

步驟二:建立Event Source

  1. 登入輕量訊息佇列(原 MNS)控制台

  2. 隊列列表頁面建立隊列test-event-queue,並在隊列詳情頁面的存取點地區擷取Endpoint。

    說明

    若您是通過輕量訊息佇列(原 MNS)建立的Event Bus,則步驟3~步驟5可直接跳過,直接執行步驟6

  3. 使用Resource Access Management員登入RAM控制台

  4. 建立RAM使用者,為RAM使用者授予AliyunMNSFullAccess許可權,並擷取RAM使用者的AK和SK。

    具體操作,請參見建立RAM使用者為RAM使用者授權建立AccessKey查看RAM使用者的AccessKey資訊

  5. 執行以下命令,建立Secret用於儲存AK和SK。

    kubectl create secret generic mns-secret\
      --from-literal=accesskey=*** \
      --from-literal=secretkey=***
  6. 建立event-source.yaml檔案,將樣本中的參數修改為實際使用的參數值。

    • topic:需替換為步驟2中建立的輕量訊息佇列(原 MNS)中的主題名稱。

    • endpoint:需替換為步驟2中擷取的Endpoint。

    apiVersion: argoproj.io/v1alpha1
    kind: EventSource
    metadata:
      name: ali-mns
    spec:
      mns:
        example:
          jsonBody: true
          accessKey:
            key: accesskey
            name: mns-secret
          secretKey:
            key: secretkey
            name: mns-secret
          queue: test-event-queue # 對應輕量訊息佇列(原 MNS)中的隊列名稱。
          waitTimeSeconds: 20
          endpoint: http://165***368.mns.<region>.aliyuncs.com # 對應輕量訊息佇列(原 MNS)的Endpoint。
  7. 執行以下命令,應用event-source.yaml檔案建立Event Source。

    kubectl apply -f event-source.yaml
  8. 執行以下命令,查看Event Source Pod是否正常啟動。

    kubectl get pod

步驟三:建立Event Sensor

  1. 建立event-sensor.yaml檔案,在Event Sensor中嵌入待執行的工作流程定義。Event Sensor範例程式碼如下所示:

    展開查看範例程式碼

    apiVersion: argoproj.io/v1alpha1
    kind: Sensor
    metadata:
      name: ali-mns
    spec:
      template:
        serviceAccountName: default
      dependencies:
        - name: test-dep
          eventSourceName: ali-mns    # 匹配eventsource名稱。
          eventName: example          # 匹配eventsource中的事件名稱定義。
      triggers:
        - template:
            name: mns-workflow
            k8s:
              operation: create
              source:
                resource:
                  apiVersion: argoproj.io/v1alpha1    # 嵌入工作流程定義。
                  kind: Workflow
                  metadata:
                    generateName: ali-mns-workflow-
                  spec:
                    entrypoint: whalesay
                    arguments:
                      parameters:        # 參數傳遞事件內容。
                        - name: message
                          # this is the value that should be overridden
                          value: hello world
                    templates:
                      - name: whalesay
                        inputs:
                          parameters:
                            - name: message
                        container:
                          image: docker/whalesay:latest
                          command: [cowsay]
                          args: ["{{inputs.parameters.message}}"]
              parameters:
                - src:        # 解析事件內容,傳遞給工作流程。
                    dependencyName: test-dep
                    dataKey: body
                  dest: spec.arguments.parameters.0.value
  2. 應用event-sensor.yaml檔案建立Event Sensor。

    kubectl apply -f event-sensor.yaml
  3. 查看Event Sensor Pod是否正常啟動。

    kubectl get pod
說明

通過輕量訊息佇列(原 MNS)建立Eventbus時,在Event Sensor建立完成後,會自動建立一個輕量訊息佇列(原 MNS)與之對應,隊列命名格式為:ackone-argowf-<namespace>-<sensor-name>-<sensor-uid>

步驟四:驗證通過向輕量訊息佇列(原 MNS)發送訊息觸發工作流程

  1. 登入輕量訊息佇列(原 MNS)控制台

  2. 隊列列表頁面中,找到隊列test-event-queue,在其操作列單擊收發訊息

  3. 在收發訊息快速體驗頁面中,輸入訊息內容test trigger argo workflow,然後單擊發送訊息

  4. 在工作流程叢集中查看工作流程的運行情況。

    argo list

    預期輸出如下:

    NAME                     STATUS    AGE   DURATION   PRIORITY
    ali-mns-workflow-5prz7   Running   6s    6s         0
  5. 擷取工作流程日誌,查看訊息內容。

    argo logs ali-mns-workflow-5prz7
    重要
    • 該命令中的工作流程名稱必須和上一步驟中返回的工作流程名稱一致,ali-mns-workflow-5prz7僅為樣本值,請您修改為實際環境中的傳回值。

    • 訊息內容使用Base64編碼。

    預期輸出如下:image.png

步驟五:清除Event相關資源

  1. 清除相關資源。

    • 清除Event Sensor

      kubectl delete sensor ali-mns
    • 清除Event Source

      kubectl delete eventsource ali-mns
    • 清除Event Bus

      kubectl delete eventbus default
  2. 查看Pod狀態,確認所有資源已清除。

    kubectl get pod