Argo(events) 使用 Sensor 触发现有 ClusterWorkflowTemplate

Use*_*716 4 argo-workflows argo-events

我正在尝试ClusterWorkflowTemplate从 argo/ argo-events 中的发布请求触发预先存在的事件。

\n

我一直在遵循此处的示例,但我不想在传感器中定义工作流程 - 我想将其分开。

\n

我无法导入传感器并触发工作流程,有什么问题吗?

\n
# kubectl apply -n argo-test -f templates/whalesay/workflow-template.yml\napiVersion: argoproj.io/v1alpha1\nkind: ClusterWorkflowTemplate\nmetadata:\n  name: workflow-template-submittable\nspec:\n  entrypoint: whalesay-template\n  arguments:\n    parameters:\n      - name: message\n        value: hello world\n  templates:\n    - name: whalesay-template\n      inputs:\n        parameters:\n          - name: message\n      container:\n        image: docker/whalesay\n        command: [cowsay]\n        args: ["{{inputs.parameters.message}}"]\n
Run Code Online (Sandbox Code Playgroud)\n
# kubectl apply -n argo-events templates/whalesay/event-source.yml\napiVersion: argoproj.io/v1alpha1\nkind: EventSource\nmetadata:\n  name: webhook\nspec:\n  service:\n    ports:\n      - port: 12000\n        targetPort: 12000\n  webhook:\n    # event-source can run multiple HTTP servers. Simply define a unique port to start a new HTTP server\n    example:\n      # port to run HTTP server on\n      port: "12000"\n      # endpoint to listen to\n      endpoint: /example\n      # HTTP request method to allow. In this case, only POST requests are accepted\n      method: POST\n
Run Code Online (Sandbox Code Playgroud)\n
# kubectl apply -n argo-events -f templates/whalesay/sensor.yml\napiVersion: argoproj.io/v1alpha1\nkind: Sensor\nmetadata:\n  name: workflow\n  namespace: argo-events\n  finalizers:\n    - sensor-controller\nspec:\n  template:\n    serviceAccountName: operate-workflow-sa\n  dependencies:\n    - name: http-post-trigger\n      eventSourceName: webhook\n      eventName: example\n  triggers:\n    - template:\n        name: workflow-trigger-1\n        argoWorkflow:\n          group: argoproj.io\n          version: v1alpha1\n          kind: Workflow\n          operation: submit\n          metadata:\n            generateName: cluster-workflow-template-hello-world-\n          spec:\n            entrypoint: whalesay-template\n            workflowTemplateRef:\n              name: cluster-workflow-template-submittable\n              clusterScope: true\n
Run Code Online (Sandbox Code Playgroud)\n
# to launch\ncurl -d \'{"message":"this is my first webhook"}\' -H "Content-Type: application/json" -X POST http://argo-events-51-210-211-4.nip.io/example\n
Run Code Online (Sandbox Code Playgroud)\n
# error\n{\n    "level": "error",\n    "ts": 1627655074.716865,\n    "logger": "argo-events.sensor-controller",\n    "caller": "sensor/controller.go:69",\n    "msg": "reconcile error",\n    "namespace": "argo-events",\n    "sensor": "workflow",\n    "error": "temp \xe2\x94\x82\xe2\x94\x82 late workflow-trigger-1 is invalid: argoWorkflow trigger does not contain an absolute action",\n}\n
Run Code Online (Sandbox Code Playgroud)\n

参考:

\n\n

Use*_*716 10

我不得不:

  • 确保我的服务帐户operate-workflow-sa具有集群权限
  • 更正我的sensor.yml语法规范

集群权限:

# kubectl apply -f ./k8s/workflow-service-account.yml
apiVersion: v1
kind: ServiceAccount
metadata:
  namespace: argo-events
  name: operate-workflow-sa
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: operate-workflow-role
  # namespace: argo-events
rules:
  - apiGroups:
      - argoproj.io
    verbs:
      - "*"
    resources:
      - workflows
      - clusterworkflowtemplates
      - workflowtemplates
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: operate-workflow-role-binding
  namespace: argo-events
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: operate-workflow-role
subjects:
  - kind: ServiceAccount
    name: operate-workflow-sa
    namespace: argo-events
Run Code Online (Sandbox Code Playgroud)

serviceAccountNamesensor.yml(请注意还为工作流程添加了):

apiVersion: argoproj.io/v1alpha1
kind: Sensor
metadata:
  name: workflow
  namespace: argo-events
  finalizers:
    - sensor-controller
spec:
  template:
    serviceAccountName: operate-workflow-sa
  dependencies:
    - name: http-post-trigger
      eventSourceName: webhook
      eventName: example
  triggers:
    # https://github.com/argoproj/argo-events/blob/master/api/sensor.md#triggertemplate
    - template:
        name: workflow-trigger-1
        argoWorkflow:
          # https://github.com/argoproj/argo-events/blob/master/api/sensor.md#argoproj.io/v1alpha1.ArgoWorkflowTrigger
          group: argoproj.io
          version: v1alpha1
          resource: Workflow
          operation: submit
          metadata:
            generateName: cluster-workflow-template-hello-world-
          source:
            resource:
              apiVersion: argoproj.io/v1alpha1
              kind: Workflow
              metadata:
                name: special-trigger
              spec:
                serviceAccountName: operate-workflow-sa
                entrypoint: whalesay-template
                workflowTemplateRef:
                  name: whalesay-template
                  clusterScope: true
Run Code Online (Sandbox Code Playgroud)