k8sでのJob管理にargoで動かしてみる

Programming

argo を調査してみた

argoとは

Job を順次実行可能なk8s LikeなOSS

背景

シンプルなCronJob程度ならk8sのCronJobで十分だが、 A Job -> B Job -> C Job のような依存する順次処理は複雑になりがちで管理ができなくなる。

向いている環境

k8sでアプリを管理、立ち上げており、複雑なJob実行に困っている場合

まずは Quick Start

  1. namespace, controller の作成
kubectl create namespace argo
kubectl apply -n argo -f https://raw.githubusercontent.com/argoproj/argo/stable/manifests/install.yaml
  1. 権限の追加
kubectl create rolebinding default-admin --clusterrole=admin --serviceaccount=default:default
  1. Workflow の実行
argo submit --watch https://raw.githubusercontent.com/argoproj/argo/master/examples/hello-world.yaml
argo submit --watch https://raw.githubusercontent.com/argoproj/argo/master/examples/coinflip.yaml
argo submit --watch https://raw.githubusercontent.com/argoproj/argo/master/examples/loops-maps.yaml
argo list
argo get xxx-workflow-name-xxx
argo logs xxx-pod-name-xxx #from get command above
  1. argo ui の起動(Port-forward)
kubectl -n argo port-forward deployment/argo-server 2746:2746

2746ポートにつながったので http://localhost:2746/ にアクセスしてみる

HTTP アクセスで任意のワークフローを起動

  1. OpenAPIのドキュメントを参照
  2. https://raw.githubusercontent.com/argoproj/argo/master/api/openapi-spec/swagger.json を開いてコピー・ペースト
  3. https://editor.swagger.io/ でドキュメントを参照

OpenAPIというAPIドキュメントがあるのでまずはどんなAPIが叩けるのか確認すると良い。

認証が必要な場合

token=$(argo auth token)
curl -H "Authorization: $token" http://localhost:2746/api/v1/workflows/argo
  1. ワークフローの確認 (適当なワークフローを登録しておく)
curl http://localhost:2746/api/v1/workflows/default
  1. ワークフローの実行
curl -X PUT http://localhost:2746/api/v1/workflows/default/coinflip-XXX/resubmit

実行される!!

参考

まとめ

マイクロサービスの時代と言っても切っても切り離せないのがバッチ処理。k8sでもCronJobが乱立してきた環境にはなかなか向いているのではないでしょうか。

まだ成長中のOSSなので今後に期待ですね。

#Dev Ops#Web Development#argo#k8s

Related Links


dockerのイメージをLatestにしたらあかん
Yoshiki Ohashi
2x歳の個人事業主エンジニア。SI企業1年, Webベンチャー企業2年で上流から下流の経験を経て独立。 エンジニアらしく性格は温和。プロジェクトチームに心理的安全性を求める。go gin | Spring | Java | Kotlin | Vue | Python | 筋トレ | キャンプ | 個人開発 | 新潟出身

よく読まれている記事


Gatsbyでブログを始めるまで
GatsbyにShare機能、OGPタグをつける
Gatsbyにタグ機能、カテゴリ機能をつける(基礎編)
DL実装するときに理解すること
多機能なGatsbyJSのThemeをつくってnpmに公開した話
© 2020 Yoshiki Ohashi All rights reserved.