jobnetes

module
v0.0.0-...-0de2bea Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 4, 2019 License: Apache-2.0

README

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

Directories

Path Synopsis
cmd
dao
db
example
proto
Package jobapi is a generated protocol buffer package.
Package jobapi is a generated protocol buffer package.
mock
dao
Package mock_dao is a generated GoMock package.
Package mock_dao is a generated GoMock package.
manager/workflowstate
Package mock_workflowstate is a generated GoMock package.
Package mock_workflowstate is a generated GoMock package.
pkg
apis/jobnetes/v1beta
Package v1beta is the v1beta version of the API.
Package v1beta is the v1beta version of the API.
client/clientset/versioned
This package has the automatically generated clientset.
This package has the automatically generated clientset.
client/clientset/versioned/fake
This package has the automatically generated fake clientset.
This package has the automatically generated fake clientset.
client/clientset/versioned/scheme
This package contains the scheme of the automatically generated clientset.
This package contains the scheme of the automatically generated clientset.
client/clientset/versioned/typed/jobnetes/v1beta
This package has the automatically generated typed clients.
This package has the automatically generated typed clients.
client/clientset/versioned/typed/jobnetes/v1beta/fake
Package fake has the automatically generated clients.
Package fake has the automatically generated clients.
utils
log
webadmin

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL