nomad

A collection of 12 posts
Manage jobs from Nomad UI
nomad

Manage jobs from Nomad UI

このブログは Ghost というブログプラットフォームを使用し Nomad クラスター上で動作しています。 Nomad クラスター上で Ghost ブログを動作させるこのブログは数年間単一のサーバーで稼働していました。 学習も兼ねてわざわざ自前でサーバーを運用していたのですが、最近新しい構成に移したくなり、Kubernetes の流行もあってクラスターやマイクロサービスといった時代の流れに乗るべく、Nomad クラスターへの移行を行いました。 Nomad クラスターの作成までは下記記事にまとめています (インフラやクラスターの設定等はここからさらに変更しています)。 * Nomad クラスターを作成する 今回はこの Nomad クラスター上で Ghost を動かすところまでをまとめます。 構成 以下の通り、DigitalOcean のマネー…ゆるふわキャンパーLorentzca 色々悩んだ結果、Docker イメージ上にブログのコンテンツを全て収めており、これを Nomad ジョブとして動かす形で運用しています。 これはメリットもあるのですが、一番大きなデメリットとして更新が面倒と
4 min read
Use Container Storage Interface (CSI) with Nomad
nomad

Use Container Storage Interface (CSI) with Nomad

今まで Nomad で DB 等のステートフルなワークロードを実行したい場合、以下のような選択肢がありました。 * host_volume スタンザを使用し、ホストのボリュームを使用する。 * Docker を使用したタスクの場合は volumes パラメータを使用し同様にホストのボリュームをマウントして使用する。 しかし、上記の方法はホスト間でのデータを同期しないため、例えばタスクが終了後他のノードでタスクが再起動された場合にデータを保持することができません。 また、ephemeral_disk スタンザというものがあります。こちらの migrate パラメータを有効にすると、タスクを元のノードに配置できない場合にデータをホストを越えて移行することができます。しかし、以下の制約があります。 * データの移行はベストエフォートで行われるため、データは失われる可能性がある。 * 大きいサイズのデータには適していない。 * そもそも想定された使い方はホスト間でのデータの共有ではなく、その名前の通りグループ内で一時的な共有スペースを持つことである。 従って永続的
9 min read
Get data from Vault with Nomad task
vault

Get data from Vault with Nomad task

最近 Vault クラスターの作成と Nomad と Vault の統合を行いました。 Vault を HA モードで使うこのブログの SSL/TLS 証明書を Vault [https://www.vaultproject.io/] で管理しようと考えています。 * Let’s Encrypt のクライアントを Nomad ジョブとして実行し SSL 証明書を取得してみた [https://blog.lorentzca.me/run-letsencrypt-client-with-nomad-job/] 現在サーバーは 3 台でクラスターを組んでおり、 Nomad [https://www.nomadproject.io/…ゆるふわキャンパーLorentzcaNomad と Vault を統合する現在 Nomad [https://www.nomadproject.io/
3 min read
Integrate Nomad and Vault
nomad

Integrate Nomad and Vault

現在 Nomad と Consul を使用してこのブログを動かしています。 * nomad - ゆるふわキャンパー * consul - ゆるふわキャンパー 例えば DB のパスワード等の機密情報を Nomad のジョブで扱いたい場合があります。Nomad は環境変数から機密情報を取得することもできますが、Vault と連携することで Vault の暗号化された KVS から機密情報を取得することが可能になります。 * Vault Integration | Nomad by HashiCorp 今回、Nomad と Vault の統合を設定してみたのでメモします。 Nomad の設定 Nomad の設定としては以下のように vault スタンザを追加するだけです。 ※今回、簡単のため Vault 側で TLS の設定を無効にしていますが TLS を有効にしている場合は以下に証明書等の設定が追加されます。 vault { enabled
5 min read
Provide dependencies to between Nomad tasks with lifecycle stanza
nomad

Provide dependencies to between Nomad tasks with lifecycle stanza

Nomad のタスク間に依存関係を持たせるには何らかの工夫が必要でした。 * Nomad ジョブのタスク間の依存関係をどのように実現するか考える が、 v0.11 beta で依存関係を持たせることのできる機能が追加されました! 🎉 * Announcing HashiCorp Nomad 0.11 Beta Key highlights of this release: ・Container Storage Interface (CSI): Deploy stateful applications on Nomad using storage volumes from any third-party provider of choice. Read more here. ・Autoscaling: Dynamically scale application instances based on real-time load
2 min read
Mounting Docker volumes into Nomad tasks allocation directory
nomad

Mounting Docker volumes into Nomad tasks allocation directory

Nomad はグループ (タスクの集まり) 内で共有可能なディレクトリを提供しておりタスクからは環境変数 NOMAD_ALLOC_DIR または /alloc ディレクトリを直接参照することで使用可能です。 * Environment - Runtime | Nomad by HashiCorp また Nomad のタスクは Docker が使用できます。 * Drivers: Docker | Nomad by HashiCorp そこで、Docker コンテナの生成物をタスク間で共有できないか試したのですがすんなりできなかったのでメモ。 構成 以下のようなバッチジョブの構成で試します。 * Docker ドライバーを使用したタスクで成果物を作成。 * 後続の Exec ドライバーを使用したタスクで成果物を使用 なおこのようなタスク間に依存関係を持たせたい場合、現在 Nomad の機能としては存在しないので以下のように何かしらの工夫をする必要があります。 * Nomad ジョブのタスク間の依存関係をどのように実現するか考える 課題
2 min read
Provide dependencies to between Nomad tasks
nomad

Provide dependencies to between Nomad tasks

最近 Nomad をチマチマ触っています。 * nomad - ゆるふわキャンパー Nomad のジョブとしてバッチジョブを実行できるのですが、ジョブ内に複数タスクがある場合、タスクは並列で実行されます。 このためタスク間に依存関係がある場合、下流のタスクが失敗してしまうことに気付きました…。また、現在 Nomad にタスク間の依存関係を表現する機能はありません。 既存の議論 タスク間の依存関係を表現できるようにしたいという機能要望は数年前からあり、以下の Issue で議論されています。 * Provide for dependencies between tasks in a group · Issue #419 · hashicorp/nomad · GitHub 今後の予定としては依存関係の機能を追加予定とのことですがまだ目立った動きはなさそう。 Issue でワークアラウンドとして以下が紹介されていますが、よくわからない…。AST is 何?抽象構文木?Consul でタスクのヘルスチェックを行い依存関係を表現しているようですがちょっとよくわ
3 min read
System job is suitable for running mackerel-agent with Nomad
nomad

System job is suitable for running mackerel-agent with Nomad

現在 Nomad クラスターを展開しこのブログを運用しています。 * nomad - ゆるふわキャンパー Nomad クラスターは現在 3 台のサーバーから構成されており、それぞれのサーバーは Mackerel でモニタリングしています。Mackerel へサーバーのメトリクスを送るためには mackerel-agent が必要ですが、mackerel-agent は Docker イメージが用意されているので、これを Nomad のジョブとして動かし Nomad クラスターの各サーバーを監視しています。 * mackerel/mackerel-agent ジョブのタイプは Service タイプを使っており、各サーバに対し 1 つの mackerel-agent が動いている状態であって欲しいので以下の工夫をしていました。 * Nomad クラスターのサーバーは 3 台なので group 節で count を 3 に設定する。 * 1 つのサーバー上に複数の mackerel-agent が実行されてしまっては意味がないので、
2 min read
Run Let's Encrypt client with Nomad job
nomad

Run Let's Encrypt client with Nomad job

SSL 証明書の取得の自動化を可能とするプロトコルとして ACME (Automated Certificate Management Environment) がありこれの実装として Let’s Encrypt というサービスがあります。 Let’s Encrypt のクライアントとしては certbot や lego があります。どちらも以下のように Docker イメージが公開されており、つまり Nomad のジョブとして簡単に動かすことが可能です。 * Docker Hub - certbot * Docker Hub - lego certbot と lego の大きな違いは lego は Go で書かれておりバイナリ一つという手軽さがあるという点です。Docker を使うなら関係ないですが…。 今回 Nomad のバッチジョブとして lego を動かしてみたのでメモします。 モチベーション
6 min read
Run mackerel-agent as a Nomad job
nomad

Run mackerel-agent as a Nomad job

最近ブログを動かしている環境を単一のサーバーから Nomad クラスターへと変更しました。 * Nomad クラスター上で Ghost ブログを動作させる 以前からサーバーの監視を Mackerel を用いて行なっており、今回もクラスターを構成するノード上で mackerel-agent を起動し、監視を行います。 ただし、 Nomad のジョブとして動かしてみます。 Nomad のジョブとして mackerel-agent を動かす 今までは単一の VPS を使っていたので mackerel-agent は普通にサーバーにインストールしていました。 * CentOS / RedHat にインストールする - Mackerel ヘルプ 今回 Nomad を使うにあたりどのように mackerel-agent をインストールするか考えていて、普通にサーバーにインストールしても良いのですが、サーバーには Nomad とその関連パッケージ以外は入れないのが筋が良いと思うので、Nomad ジョブとして mackerel-agent を動かすことにしました。 macker
2 min read
Running Ghost blog on Nomad Cluster
nomad

Running Ghost blog on Nomad Cluster

このブログは数年間単一のサーバーで稼働していました。 学習も兼ねてわざわざ自前でサーバーを運用していたのですが、最近新しい構成に移したくなり、Kubernetes の流行もあってクラスターやマイクロサービスといった時代の流れに乗るべく、Nomad クラスターへの移行を行いました。 Nomad クラスターの作成までは下記記事にまとめています (インフラやクラスターの設定等はここからさらに変更しています)。 * Nomad クラスターを作成する 今回はこの Nomad クラスター上で Ghost を動かすところまでをまとめます。 構成 以下の通り、DigitalOcean のマネージドロードバランサー配下に Droplet を 3台配置し、クラスターを構成しています。 クラスターを構成するノードではそれぞれ Nomad と Consul が稼働しており、Consul でサービスディスカバリーを、Nomad でワークロードオーケストレーションを行なっています。 稼働しているジョブ Nomad はジョブという単位でワークロードを定義します。ジョブの中にさらに複数のグルー
7 min read
Create Nomad Cluster on DigitalOcean
nomad

Create Nomad Cluster on DigitalOcean

Nomad 上にこのブログ (Ghost) を移そうと考えています。 * Nomad by HashiCorp そこで、まずは Nomad クラスターを DigitalOcean 上に作成してみました。 この記事の一番最後にクラスター作成に使用している Terraform のファイルを貼っておきます。 Nomad とは Nomad とは Docker コンテナや Qemu 仮想マシン、 Java アプリケーション等のデプロイ、それらによる処理の実行の管理を自動的に行うツールです。 つまり、ワークロードオーケストレーターです。 * Introduction - Nomad by HashiCorp ラーメン二郎で言えばロット・マエストロやロット・マイスターが該当するかもしれません。 ※ロット・マエストロ/マイスターはラーメンが一定のペースで効率よく置かれるように、ラーメンのデプロイ (カウンターへの配置) を管理し、リソースの調整 (少食っぽい人に大を食わせない、食べるのが遅い人を急かす・手伝う) や他のマエストロ/マイスターとの協業 (広い店舗
9 min read