Kubernetes クラスタに Argo Workflows をインストールしてワークフローを動かす
kubernetesArgo Workflows は Kubernetes でワークフローを実行するエンジン。
CRD や UI などをクラスタにインストールする。
$ ARGO_WORKFLOWS_VERSION="v3.5.12"
$ kubectl create namespace argo
$ kubectl apply -n argo -f "https://github.com/argoproj/argo-workflows/releases/download/${ARGO_WORKFLOWS_VERSION}/quick-start-minimal.yaml"
customresourcedefinition.apiextensions.k8s.io/clusterworkflowtemplates.argoproj.io created
customresourcedefinition.apiextensions.k8s.io/cronworkflows.argoproj.io created
customresourcedefinition.apiextensions.k8s.io/workflowartifactgctasks.argoproj.io created
customresourcedefinition.apiextensions.k8s.io/workfloweventbindings.argoproj.io created
customresourcedefinition.apiextensions.k8s.io/workflows.argoproj.io created
customresourcedefinition.apiextensions.k8s.io/workflowtaskresults.argoproj.io created
customresourcedefinition.apiextensions.k8s.io/workflowtasksets.argoproj.io created
customresourcedefinition.apiextensions.k8s.io/workflowtemplates.argoproj.io created
serviceaccount/argo created
...
priorityclass.scheduling.k8s.io/workflow-controller created
deployment.apps/argo-server created
deployment.apps/workflow-controller created
deployment.apps/httpbin created
deployment.apps/minio created
Argo CLI をインストールする。
$ wget "https://github.com/argoproj/argo-workflows/releases/download/v3.6.0-rc4/argo-darwin-amd64.gz"
$ gunzip "argo-darwin-amd64.gz"
$ chmod +x "argo-darwin-amd64"
$ mv "./argo-darwin-amd64" /usr/local/bin/argo
$ argo version
argo: v3.6.0-rc4
BuildDate: 2024-10-31T12:47:01Z
GitCommit: b26ed4aa4dee395844531efa4a76a022183bec22
GitTreeState: clean
GitTag: v3.6.0-rc4
GoVersion: go1.23.2
Compiler: gc
Platform: darwin/amd64
ワークフローは単発で実行する場合は Workflow、複数回実行する場合は WorkflowTemplate、定期実行する場合は CronWorkflow リソースで定義する。Step Functions のように step を並べていくほか、Airflow のような dependencies による DAG を記述することもできる。
CDKでStep Functionsによるワークフローを構築する - sambaiz-net
Docker Compose で Apache Airflow を起動しワークフローを実行する - sambaiz-net
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: hello-world-
labels:
workflows.argoproj.io/archive-strategy: "false"
annotations:
workflows.argoproj.io/description: |
This is a simple hello world example.
spec:
entrypoint: hello-hello-hello
templates:
- name: hello-hello-hello
steps:
- - name: hello1
template: print-message
arguments:
parameters:
- name: message
value: "hello1"
- - name: hello2a
template: print-message
arguments:
parameters:
- name: message
value: "hello2a"
- name: hello2b
template: print-message
arguments:
parameters:
- name: message
value: "hello2b"
- name: print-message
inputs:
parameters:
- name: message
container:
image: busybox
command: [echo]
args: ["{{inputs.parameters.message}}"]
WorkflowTemplate の templates は templateRef で再利用することができる。
apiVersion: argoproj.io/v1alpha1
kind: WorkflowTemplate
metadata:
name: hello-world-template-global-arg
spec:
templates:
- name: hello-world
container:
image: busybox
command: [echo]
args: ["{{workflow.parameters.global-parameter}}"]
---
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: hello-world-wf-global-arg-
spec:
entrypoint: print-message
arguments:
parameters:
- name: global-parameter
value: hello
templates:
- name: print-message
steps:
- - name: hello-world
templateRef:
name: hello-world-template-global-arg
template: hello-world
argo submit で送信する。
$ argo submit -n argo test.yaml
# argo submit -n argo --from workflowtemplate/test-template
$ argo list -n argo
NAME STATUS AGE DURATION PRIORITY MESSAGE
hello-world-lxt42 Succeeded 1m 21s 0
UI からもワークフローのステータスや、
$ kubectl -n argo port-forward service/argo-server 2746:2746
task ごとの結果も確認できる。