Dkronとは何か
概要
Dkronは、分散ジョブスケジューリングシステムであり、クラスタ全体でスケジュールされたジョブを分散して実行することができます
これは耐障害性とスケーラビリティを提供し、クラウドネイティブな環境や大規模な分散システムで適しています
また、スケジュールされたジョブであるcron
をGUIで管理することができます
(公式ページから引用)
Dkronのインストール方法
バイナリの実行
- ダウンロード
- プラットフォームに適したパッケージ化されたアーカイブをダウンロードページからダウンロードし、/opt/local/binなどの共有場所にパッケージを展開します
- Dkronの実行
dkron agent --server --bootstrap-expect=1
- UIへのアクセス
- http://localhost:8080/ui にアクセスします
Dockerでの実行
Dkronは公式のDockerイメージを提供しており、Docker Hubからダウンロードして任意のシステムでデプロイできます
新しいコンテナとしてのDkronの起動
- クイックスタート
docker run -d -p 8080:8080 --name dkron dkron/dkron agent --server --bootstrap-expect=1 --node-name=node1
- ログの確認
docker logs -f dkron
- アクセス
- Dkronの起動が完了したら、http://localhost:8080 でアプリケーションにアクセスできます
基本的な使い方とコマンド例
Dkronの設定ファイル
Dkronの設定はYAMLファイルで行います
以下はサンプルの設定ファイルです
backend: "etcd"
backend_machine:
- "127.0.0.1:2379"
log_level: "debug"
server: true
ジョブの作成と管理
ジョブの作成
公式のサンプルジョブを作成します
GUIから作成するよりcurl
を使ってHTTPからAPI叩いた方が楽でした
curl localhost:8080/v1/jobs -XPOST -d '{
"name": "job1",
"schedule": "@every 10s",
"timezone": "Europe/Berlin",
"owner": "Platform Team",
"owner_email": "platform@example.com",
"disabled": false,
"tags": {
"server": "true:1"
},
"metadata": {
"user": "12345"
},
"concurrency": "allow",
"executor": "shell",
"executor_config": {
"command": "date"
}
}'
ジョブの一覧表示
こちらで作成したジョブを確認できます
チェックボックスをクリックすると実行や削除などのアイコンが表示されます
具体的なユースケースと実例
データベースのバックアップ
企業ではデータベースの定期的なバックアップが重要です
以下は毎日深夜にバックアップを実行するジョブの例です
curl localhost:8080/v1/jobs -XPOST -d '{
"name": "db-backup",
"schedule": "@daily",
"timezone": "Asia/Tokyo",
"owner": "YourName",
"owner_email": "youremail@example.com",
"disabled": false,
"tags": {
"server": "true:1"
},
"metadata": {
"user": "12345"
},
"concurrency": "allow",
"executor": "shell",
"executor_config": {
"command": "pg_dump -U user -h db_host mydatabase > /backup/db_backup.sql"
}
}'
ログローテーション
ログファイルが大きくなるのを防ぐために、ログの回転を定期的に実行します
以下は毎週ログローテーションをするジョブの例です
curl localhost:8080/v1/jobs -XPOST -d '{
"name": "logrotate",
"schedule": "@weekly",
"timezone": "Asia/Tokyo",
"owner": "YourName",
"owner_email": "youremail@example.com",
"disabled": false,
"tags": {
"server": "true:1"
},
"metadata": {
"user": "12345"
},
"concurrency": "allow",
"executor": "shell",
"executor_config": {
"command": "logrotate /etc/logrotate.conf"
}
}'
まとめ
cron
も良いですがCLI上での操作になるので理解が遅れることがありますよね
Dkron
ならGUI上での操作なので見た目が良いしわかりやすいです
上記のようにコマンドでも実行できるのでそこはお好みですが、一覧での確認やステータスの確認ならGUIの方が理解しやすいと思うのでDkron
の使用がおすすめです
参考リンク