コンテンツにスキップ

Dkron

https://dkron.io/basics/installation/

install

sudo sh -c "echo 'deb [trusted=yes] https://apt.fury.io/victorcoder/ /' > /etc/apt/sources.list.d/dkron.list"
sudo apt -y update
sudo apt -y install dkron
sudo vim /lib/systemd/system/dkron.service

/lib/systemd/system/dkron.service の ExecStart に --server を追加

[Service]
User=root
ExecStart=/usr/bin/dkron agent --server
ExecReload=/bin/kill -HUP $MAINPID
sudo systemctl start dkron

Agentの追加

https://dkron.io/usage/clustering/

serverノードのコンフィグに、追加したいAgentのIPを追加する。

$ grep -v "^#" /etc/dkron/dkron.yml 
join:
  - 192.168.122.201
$ sudo systemctl restart dkron

Jobの追加

curl http://localhost:8080/v1/jobs -XPOST -d '{
  "name": "job1",
  "schedule": "@every 60s",
  "timezone": "Asia/Tokyo",
  "owner": "root",
  "owner_email": "root@example.com",
  "disabled": false,
  "tags": {
    "location": "jp_osaka:1"
  },
  "concurrency": "allow",
  "executor": "shell",
  "executor_config": {
    "command": "/opt/sensu-plugins-ruby/embedded/bin/metrics-curl.rb -u 'http://localhost'"
  }
}'

適当に10000ジョブくらい突っ込んだら重くて死にそうになった。

暫定評価

  • シンプルにコマンドを実行する作りなので、1000件未満のcronなら使えそう
  • sensu-pluginをそのまま実行したが、問題なく動作した
  • 分散動作するので、Nodesを増やすことで処理はスケールできる
    • 例えば 10000 ジョブを60秒インターバルだと、1件当たり 6[ms] の時間しか与えられていない。4並列でも 24[ms] である。
  • API経由で取得できるジョブの結果はbase64でエンコードされている
  • namespaceのようにテナントを区切れないので、ユーザー単位の管理ができない
  • APIのフィルタが貧弱過ぎるので、一部ジョブ結果だけを検索するようなことができない

最終更新日: 2021-06-06 09:29:57