Skip to content
This repository has been archived by the owner on Sep 7, 2022. It is now read-only.

Attsun1031/jobnetes

Repository files navigation

jobnetes

Kubernetes上で稼働するワークフローエンジンを作ってみた。趣味プロジェクトです。

ワークフローとは

ある特定のバッチ処理などの単一のジョブを連鎖させたものがワークフロー。 airflowやdigdagで扱うものと同じ。

他との違い

ジョブはすべてkubernetesのJobリソースとして起動されるようになっている。 すべてをkubernetes上で完結させることで、リソース管理や実行管理を統一的に管理できる。

(Argo workflowがこれの最終進化版なイメージ)

overview

architecture

各種コンポーネント説明

webadmin

ワークフローの実行状況の可視化等を行うためのウェブアプリケーション。

manager

ワークフロー管理を行うアプリケーション。 一定の間隔でワークフロー状況をポーリングし、各ジョブ・ワークフローの起動やステータス管理を行う。

jobapi

ワークフローの起動リクエストを受け付けたり、各ジョブが後続ジョブのために結果を書き込むために利用する。 外部アプリケーションからの利用を想定したため、gRPCでやりとりを行うようにすることでクライアントライブラリ生成を簡素化している。

ワークフロー定義

jsonでワークフローを定義する。 スキーマや例は以下参照。

https://github.com/Attsun1031/jobnetes/blob/master/schema/workflow-schema.json https://github.com/Attsun1031/jobnetes/blob/master/schema/test_schema.py

その他

RDBで管理しているワークフロー情報をカスタムリソースとして登録し、managerやjobapiをcontrollerとして実装すれば、よりKubertenesの恩恵が受けられそう。

Develop

Setup dev env

  1. set GOROOT
  2. set GOPATH
  3. clone this repository in $GOPATH/src/github.com/Attsun1031/jobnetes
  4. go get -u github.com/golang/dep/cmd/dep
  5. cd to jobnetes dir
  6. dep ensure
  7. add config.yaml and kube-config to $HOME/.jobnetes
  8. start local mysql container docker run --name jobnetes-db -p3333:3306 -e MYSQL_ALLOW_EMPTY_PASSWORD=yes -v ~/jobnetes-db:/var/lib/mysql -d mysql --character-set-server=utf8 --collation-server=utf8_unicode_ci
  9. execute cmd/dbmigration/dbmigration.go

Setup local k8s env

  1. start local kubernetes
  2. apply setting/k8s/deploy-mysql.yaml
  3. apply setting/k8s/cm-config.yaml
  4. apply setting/k8s/job-migration.yaml