Argo Workflowを試してみる

投稿日:January 26, 2025
Hero Image

検証がてらArgo Workflowを試してみることにしたので,その備忘録を残しておく.

Argo Workflowとは

いい感じにジョブを管理してくれるツール. (公式サイトや他のサイトを参照してください...)

構築環境

  • kubernetes: v1.32
  • helm: v3.17.0
  • Argo Workflow: v3.6.2

構築手順

1. helmのリポジトリ追加

helm repo add argo https://argoproj.github.io/argo-helm

2. Argo Workflowのインストール

kubectl create namespace argo
helm install --namespace argo argo-workflow argo/argo-workflows

3. Argo Workflowのweb UIを他のマシンからアクセスする

本当はロードバランサとかいろいろあるハズだが,とりあえずポートフォワーディングでアクセスする.

kubectl -n argo port-forward svc/argo-workflow-argo-workflows-server 2746:2746 --address='0.0.0.0'

ブラウザで,http://<ip>:2746にアクセスする.

ここで,login画面が表示される.

4. webUIのlogin用tokenを発行

一行めのコマンドで「argo-workflows-server」のpod名を取得し,二行めでtokenを取得する.

kubectl get pods -n argo
kubectl exec -it <pod名> -n argo -- argo auth token
(tokenが表示される)

表示されたtokenを全てコピーし,login画面中央のテキストボックスへ貼り付けログイン.

5. workflowの実行

コマンドでworkflowを実行してみる.

argo submit -n argo https://raw.githubusercontent.com/argoproj/argo-workflows/master/examples/hello-world.yaml

自分の環境では,argo listで表示すると以下のエラーが出た

Error (exit code 64): workflowtaskresults.argoproj.io is forbidden: User "system:serviceaccount:argo:default" cannot create resource "workflowtaskresults" in API group "argoproj.io" in the namespace "argo"

権限まわりのエラーだが,自分の知識ではすぐに解決できなかったので,今回はChatGPT先生の提案方法を実行した.
一応動作は確認できたが,自己責任で.
以下の内容のyamlファイルを作成し,kubectl apply -f <ファイル名>で適用する.

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: argo-default-clusterrolebinding
subjects:
- kind: ServiceAccount
  name: default
  namespace: argo
roleRef:
  kind: ClusterRole
  name: argo-workflow-argo-workflows-workflow-controller
  apiGroup: rbac.authorization.k8s.io

以上,こんな感じで構築できたので,これからいろいろ試してみる.

参考にさせていただいたサイト