大きなデータを Argo の webhook に POST できるようにしたいと考えています。私のセンサー定義では、リクエストからデータを取得し、それをワークフローの「未加工」アーティファクトに入れます。データは base64 でエンコードされているため、Sprig テンプレートを使用してエンコードされたデータをデコードします。
残念ながら、大量のデータを使用すると、Kubernetes は生成されたワークフロー定義の処理を拒否します。
生データの例
この例は、少量のデータに有効です。
apiVersion: argoproj.io/v1alpha1
kind: Sensor
metadata:
name: webhook
spec:
template:
serviceAccountName: argo-events-sa
dependencies:
- name: input-dep
eventSourceName: webhook-datapost
eventName: datapost
triggers:
- template:
name: webhook-datapost-trigger
k8s:
group: argoproj.io
version: v1alpha1
resource: workflows
operation: create
source:
resource:
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: webhook-datapost-
spec:
entrypoint: basefile
imagePullSecrets:
- name: regcred
arguments:
artifacts:
- name: filecontents
raw:
data: ""
templates:
- name: basefile
serviceAccountName: argo-events-sa
inputs:
artifacts:
- name: filecontents
path: /input.file
container:
image: alpine:latest
command: ["ls"]
args: ["/input.file"]
parameters:
- src:
dependencyName: input-dep
dataTemplate: "{{ .Input.body.basedata | b64dec }}"
dest: spec.arguments.artifacts.0.raw.data
大きなデータセットでのエラー
小さなデータセットで上記の例をトリガーすると、これは期待どおりに機能します。しかし、大規模なデータセットを使用すると、エラーが発生します。
Pod "webhook-datapost-7rwsm" is invalid: metadata.annotations: Too long: must have at most 262144 bytes
これは生データ全体をワークフロー テンプレートにコピーしたためだと理解しています。その後、この大きなテンプレートは Kubernetes によって拒否されます。
ペイロード全体をワークフロー テンプレートにコピーせずに、Webhook POST リクエストからアーティファクトにデータをコピーする方法を探しています。Argoに可能性はありますか?