MinikubeでArgo Workflowsと戯れてみた

Minikube上で[Argo Workflows](https://argoproj.github.io/argo-workflows/)をインストールしてHello worldを実行するまでメモです。爆速でローカル(Minikube)で動かすことだけを目的にしているので、商用環境での利用とか全く考慮してない＋説明も最小限なので悪しからず。


# セットアップ手順

## Minikubeのセットアップ

以下のページを参照。

https://minikube.sigs.k8s.io/docs/start/

## Argo CLIのセットアップ

以下のページを参照（バージョンは適宜読み替えて！）。

https://github.com/argoproj/argo-workflows/releases/tag/v3.2.6

## Argo用のネームスペースの作成

```:コマンド
kubectl create namespace argo
```

## 権限の付与

```:コマンド
kubectl create rolebinding default-admin --clusterrole=admin --serviceaccount=default:default
```

## Argo Workflowsのインストール

```:コマンド
kubectl apply -n argo -f https://raw.githubusercontent.com/argoproj/argo-workflows/master/manifests/install.yaml
```

# UIの表示手順

## UIポートの解放

```:コマンド例
kubectl -n argo port-forward deployment/argo-server 2746:2746 &
```

## トップ画面へのアクセス

https://localhost:2746/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117313/05f6b5ca-2d7c-97f1-528f-f2934caa9ddb.png)

## 認証情報の取得

```:コマンド
kubectl -n argo exec -it $(kubectl get --no-headers=true pods -n argo -o name -l app=argo-server) -- argo auth token
```

```:トークン出力例
Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6Il9yLU5CUURSXzNPN1JYcXFSWlAzU2hKRTE4R2hyMnFKQlc2UnRQQkxqLW8ifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiXSwiZXhwIjoxNjcxNzQ5MDE2LCJpYXQiOjE2NDAyMTMwMTYsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJhcmdvIiwicG9kIjp7Im5hbWUiOiJhcmdvLXNlcnZlci03OWJmNDViNWI3LW16OHBiIiwidWlkIjoiZjViM2UwYjctYmU0OC00OWFmLTk4NjYtMGRmY2JiYWNjM2U2In0sInNlcnZpY2VhY2NvdW50Ijp7Im5hbWUiOiJhcmdvLXNlcnZlciIsInVpZCI6ImY5N2ExODEwLTE0M2UtNDBmZS1iYjQzLTkyNjdmYmNjYTJkNiJ9LCJ3YXJuYWZ0ZXIiOjE2NDAyMTY2MjN9LCJuYmYiOjE2NDAyMTMwMTYsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDphcmdvOmFyZ28tc2VydmVyIn0.tE_Hdm8HEsC5gGSAXO-v1Q-3SqIXBQJ2QsQwqKGXNy3k185TRF99Tr2wdPHzginMUfEHex9FunW5GlefHBVf6BI5OCPUgHFaFqq6OBuXZe_TiRz6W1ASrDQHQB1FlJHV5awGNwoiKM6fRYsMKncdIBxjlONHiaRsfTKlueY_YBOaF_VjlxXX3KyoTXZizs_-dMttf7_EwNxyZkS2Fw4MDmsSX_XO6hsV5bpuG0wq-iHjJd9wq_oljGjnsCY7Is9wUjNfLoNz7RnpQUi8lvZGofWJLFipWTGsITWQeNHfSJineuqCGbWrwFrTlgUUViKP4ByCA2cdqyMrh_uGvmc40w
```

## ログイン

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117313/55dd7273-09a7-9d91-646b-2dd6098ba1a1.png)

ログイン成功するとこんな画面になる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117313/c9a8df5d-4eea-9459-b17a-037b897bd257.png)

# Workflowの実行手順

公式サンプルのWorkflow(Hello World)を実行してみる。

```:コマンド例
argo submit --watch https://raw.githubusercontent.com/argoproj/argo-workflows/master/examples/hello-world.yaml
```

```:Workflow実行完了時点のコンソール出力例
Name:                hello-world-hlc9q
Namespace:           default
ServiceAccount:      default
Status:              Succeeded
Conditions:          
 PodRunning          False
 Completed           True
Created:             Thu Dec 23 08:44:31 +0900 (20 seconds ago)
Started:             Thu Dec 23 08:44:31 +0900 (20 seconds ago)
Finished:            Thu Dec 23 08:44:51 +0900 (now)
Duration:            20 seconds
Progress:            1/1
ResourcesDuration:   4s*(1 cpu),4s*(100Mi memory)

STEP                  TEMPLATE  PODNAME            DURATION  MESSAGE
 ✔ hello-world-hlc9q  whalesay  hello-world-hlc9q  11s         

This workflow does not have security context set. You can run your workflow pods more securely by setting it.
Learn more at https://argoproj.github.io/argo-workflows/workflow-pod-security-context/
```

UIで実行結果を確認してみる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117313/5a31459f-1a61-918e-4f2c-c938731ae4be.png)

詳細画面に遷移すると・・・

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117313/b9dc5e82-748f-bdff-ead3-b5bd4251c5c4.png)

ログを見てみると・・・

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117313/30d06c34-1414-b3f0-9426-806bcecd3b13.png)

# CronWorkflowの実行手順

公式サンプルのCronWorkflow(Hello World)を実行してみる。

```:コマンド例
argo cron create https://raw.githubusercontent.com/argoproj/argo-workflows/master/examples/cron-workflow.yaml
```

```:Workflow作成時点のコンソール出力例
Name:                          hello-world
Namespace:                     default
Created:                       Thu Dec 23 08:58:38 +0900 (now)
Schedule:                      * * * * *
Suspended:                     false
Timezone:                      America/Los_Angeles
StartingDeadlineSeconds:       0
ConcurrencyPolicy:             Replace
NextScheduledTime:             Thu Dec 23 08:59:00 +0900 (21 seconds from now) (assumes workflow-controller is in UTC)
```

UIでWorkflowの作成状態を確認してみる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117313/8f8b3d3f-b85b-f1ca-5964-0cb0858c645e.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117313/054c0969-50b1-963f-3cd8-e0f802b8b1d9.png)

UIでWorkflowの実行状態を確認してみる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117313/2b7e455a-8b6f-f735-b143-6e1fc3a56780.png)

## スケジュール実行の中断と再開

スケジュール実行の中断および再開も可能。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117313/f5d2a578-902c-47df-48e5-23ef26b2ab37.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117313/339e7631-6f18-4969-a9c2-32bf3297cbde.png)

## 即時実行

スケジュールした日時以外での即時実行も可能。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117313/a8ebcf1b-da8a-9b4c-71b9-053f2f03e23f.png)

# 付録

## アンインストール手順

### Argo Workflowsのアンインストール

```:コマンド例
kubectl delete -n argo -f https://raw.githubusercontent.com/argoproj/argo-workflows/master/manifests/install.yaml
```

### 権限の削除

必要に応じて実施。

```:コマンド例
kubectl delete rolebinding default-admin
```

### Argo用のネームスペースの削除

```:コマンド例
kubectl delete namespace argo
```


# 参考ページ

* https://argoproj.github.io/argo-workflows/
* https://github.com/argoproj/argo-workflows
* https://argoproj.github.io/argo-workflows/quick-start/
* https://speakerdeck.com/makocchi/how-to-use-argo-workflows
* https://github.com/argoproj/argo-workflows/tree/master/examples