導入
このチュートリアルでは、サービスとノードの検出のために Consul を使用して HashiCorp Nomad クラスターをセットアップします。.
3 つのサーバー ノードと任意の数のクライアント ノードを備えたこのセットアップは、成長するプロジェクトの基盤として機能します。.
また、クライアント向けに Hetzner Cloud のスナップショットも作成します。これにより、手動で構成しなくてもクライアントを追加できるようになります。.
クラスターはサーバー間のプライベート ネットワーク上で実行され、サービス検出やボリューム管理など、Nomad と Consul のすべての機能をすぐに使用できます。.
このチュートリアルは、Consul および Nomad の公式デプロイメント ガイドの推奨手順に部分的に従います。.
前提条件
- Hetzner Cloudアカウント
- Linuxとシェルコマンドの基礎知識
- SSHでサーバーに接続する機能
- Hetznerサーバーを所有する
このチュートリアルは、Nomad バージョン 1.9.3 および Consul 1.20.1 を搭載した Ubuntu 24.04 Hetzner Cloud サーバーでテストされています。.
用語と記号
コマンド
local$ <command> این دستور باید روی ماشین محلی اجرا شود.
server$ <command> این دستور باید بهعنوان root روی سرور اجرا شود.
ステップ1 – ベースイメージを作成する
このステップでは次のリソースが使用されます。
- ヘッツナークラウドサーバータイプCX22 1台
まず、新しいCX22サーバー上にConsul/Nomadサーバーをセットアップします。作成されたスナップショットは、以降の手順ですべてのクラスターサーバーとクライアントのベースイメージとして使用されます。.
このガイドでは、3台のサーバーをセットアップする方法を説明します。これにより、クラスターの可用性が高まりますが、コストはそれほど高くなりません。1台のサーバーをセットアップすることは推奨されませんが、可能です。このチュートリアルでは、関連する手順において、3台のサーバーのうち1台または複数台に必要な変更について解説します。.
Hetzner Cloud Web インターフェイスに移動し、Ubuntu 24.04 を使用して新しい CX22 サーバーを作成します。.
ステップ1.1 – Consulのインストール
Consulをインストールする
利用可能なバージョンの詳細については、公式 Web サイトをご覧ください。.
server$ wget -O- https://apt.releases.hashicorp.com/gpg | gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
server$ echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/hashicorp.list
server$ apt update && apt install consulConsulにオートコンプリート機能を追加できるようになりました(オプション)
server$ consul -autocomplete-installConsul用のTLS証明書の準備
server$ consul tls ca create
server$ consul tls cert create -server -dc dc1
server$ consul tls cert create -server -dc dc1
server$ consul tls cert create -server -dc dc1
server$ consul tls cert create -client -dc dc1Consulクラスタで3台より少ない、または3台より多いサーバーを実行したい場合は、コマンドを繰り返します。 コンサルタント tls 証明書作成 -server -dc dc1 適応する。.
クラスター サーバーの場合は 1 つの証明書のみが必要ですが、5 つのサーバーの場合は 5 つの証明書が必要です。.
これらのコマンドは、3 つのサーバー証明書と 1 つのクライアント証明書を作成します。.
フォルダ /根/ 少なくとも次のファイルが含まれているはずです。
server$ ls
consul-agent-ca.pem
consul-agent-ca-key.pem
dc1-server-consul-0.pem
dc1-server-consul-0-key.pem
dc1-server-consul-1.pem
dc1-server-consul-1-key.pem
dc1-server-consul-2.pem
dc1-server-consul-2-key.pem
dc1-client-consul-0.pem
dc1-client-consul-0-key.pemステップ1.2 – Nomadバイナリのインストール
Nomadをインストールする
利用可能なバージョンの詳細については、公式 Web サイトをご覧ください。.
server$ wget -O- https://apt.releases.hashicorp.com/gpg | gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
server$ echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/hashicorp.list
server$ apt update && apt install nomadNomad のオートコンプリートを追加する (オプション):
server$ nomad -autocomplete-install次の設定ファイルは /etc/nomad.d/nomad.hcl 追加:
datacenter = "dc1"
data_dir = "/opt/nomad"ステップ1.3 - systemdサービスの準備
ConsulとNomadは再起動後に自動的に起動するはずです。そのためには、それぞれにsystemdサービスを作成してください。.
まず、すべての権限を設定します。
server$ chown consul:consul dc1-server-consul*
server$ chown consul:consul dc1-client-consul*
server$ chown -R consul:consul /opt/consul
server$ chown -R nomad:nomad /opt/nomad
server$ mkdir -p /opt/alloc_mounts && chown -R nomad:nomad /opt/alloc_mounts次の設定ファイルは /etc/systemd/system/consul.service 追加:
[Unit]
Description="HashiCorp Consul - A service mesh solution"
Documentation=https://www.consul.io/
Requires=network-online.target
After=network-online.target
ConditionFileNotEmpty=/etc/consul.d/consul.hcl
[Service]
EnvironmentFile=-/etc/consul.d/consul.env
User=consul
Group=consul
ExecStart=/usr/bin/consul agent -config-dir=/etc/consul.d/
ExecReload=/bin/kill --signal HUP $MAINPID
KillMode=process
KillSignal=SIGTERM
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.targetそして次の設定ファイルを /etc/systemd/system/nomad.service 追加:
[Unit]
Description=Nomad
Documentation=https://www.nomadproject.io/docs/
Wants=network-online.target
After=network-online.target
[Service]
User=nomad
Group=nomad
ExecReload=/bin/kill -HUP $MAINPID
ExecStart=/usr/bin/nomad agent -config /etc/nomad.d
KillMode=process
KillSignal=SIGINT
LimitNOFILE=65536
LimitNPROC=infinity
Restart=on-failure
RestartSec=2
OOMScoreAdjust=-1000
TasksMax=infinity
[Install]
WantedBy=multi-user.targetセットアップが完了していないため、これらのサービスをまだ有効にしないでください。.
ステップ1.5 – ベーススナップショットを作成する
最後に、Hetzner Cloud コンソールでサーバーを停止し、スナップショットを作成します。このスナップショットは、サーバーとクラスタークライアントの設定のベースとして使用されます。.
スナップショットの作成が成功したら、この手順から CX22 インスタンスを削除します。.
ステップ2 – クラスターサーバーの設定
この手順では、手順 1 で作成したベース イメージから 3 つのクラスター サーバーを作成します。.
これらのサーバーはクラスターの基盤を形成し、クラスター リーダーを動的に選出します。.
- 1 ヘッツナークラウドネットワーク
- 3台のHetznerクラウドサーバータイプCX22
Hetzner クラウド コンソールで、手順 1 で作成したスナップショットと共有クラウド ネットワークから 3 台の CX22 サーバーを作成します。.
このガイドでは 10.0.0.0/8 ネットワークを使用しますが、より小規模なネットワークでも同様に動作します。.
次の手順では、チュートリアルでは内部アドレスが 10.0.0.2、10.0.0.3、および 10.0.0.4 であるサーバーについて説明します。.
サーバーの内部アドレスが異なる場合は、次の手順でそれらを置き換えます。.
ステップ2.1 – 対称暗号化キーを作成する
まず、すべてのサーバーで共有する対称暗号化キーを作成します。このキーは安全な場所に保管してください。次の手順で必要になります。.
server$ consul keygenステップ2.2 – Consulの設定
各サーバーごとにConsul設定ファイルを作成します。このファイルには、他のサーバーの内部IPアドレスが含まれます。.
パス内の各サーバーについて /etc/consul.d/consul.hcl 次のファイルを作成します。
datacenter = "dc1" data_dir = "/opt/consul" encrypt = "" ca_file = "/root/consul-agent-ca.pem" cert_file = "/root/dc1-server-consul-0.pem" key_file = "/root/dc1-server-consul-0-key.pem" verify_incoming = true verify_outgoing = true verify_server_hostname = true performance { raft_multiplier = 1 } retry_join = ["10.0.0.2", "10.0.0.3", "10.0.0.4"] bind_addr = "0.0.0.0" client_addr = "0.0.0.0" server = true bootstrap_expect = 3 ui = true
交換する <CONSUL_KEY> コマンドから生成されたキーを使用して 領事キージェン.
その他のサーバーの場合、 証明書ファイル そして キーファイル そのサーバーの証明書と一致するように変更します。.
ステップ2.3 – Nomadの設定
各サーバーごとにNomad設定ファイルを作成します。このファイルはパスにあります。 /etc/nomad.d/nomad.hcl そうなる:
datacenter = "dc1"
data_dir = "/opt/consul"
encrypt = "your-symmetric-encryption-key"
tls {
defaults {
ca_file = "/etc/consul.d/consul-agent-ca.pem"
cert_file = "/etc/consul.d/dc1-server-consul-0.pem"
key_file = "/etc/consul.d/dc1-server-consul-0-key.pem"
verify_incoming = true
verify_outgoing = true
},
internal_rpc {
verify_server_hostname = true
}
}
retry_join = ["10.0.0.2"]
bind_addr = "{{ GetPrivateInterfaces | include \"network\" \"10.0.0.0/8\" | attr \"address\" }}"
acl = {
enabled = true
default_policy = "allow"
enable_token_persistence = true
}
performance {
raft_multiplier = 1
}アドレスを置き換える 10.0.0.x 各サーバーの内部アドレス。.
ステップ2.4 – サービスの有効化と起動
設定ファイルを作成したら、Consul と Nomad を systemd サービスとして有効にして起動します。
server$ systemctl enable consul server$ systemctl start consul server$ systemctl enable nomad server$ systemctl start nomad次のコマンドを使用して、各サービスのステータスを確認します。
server$ systemctl status consul
server$ systemctl status nomadステップ2.5 – Consulクラスタの確認
Consul クラスターのステータスを確認するには、次のコマンドを実行します。
server$ consul membersクラスター内のすべてのサーバーとクライアントのリストが表示されます。問題がある場合は、設定ファイルを再度確認し、ログを確認してください。
server$ journalctl -u consulステップ2.6 – Nomadクラスタの検証
次のコマンドを使用して、Nomad クラスターのステータスを確認します。
server$ nomad server membersクラスター内のNomadサーバーのリストが表示されます。問題がある場合は、設定ファイルを確認し、ログを確認してください。
server$ journalctl -u nomadステップ2.7 – Webインターフェースを確認する
Consul と Nomad の Web インターフェースが利用できるようになります。
- 領事:
http:// :8500 - ノマド:
http:// :4646
交換する <SERVER_IP> サーバーのパブリックまたはプライベート IP アドレスを使用します。.
ステップ3 – クライアントを追加する
これで、Nomadクライアントを追加できます。この手順はサーバーの設定と似ていますが、クライアントの役割を担います。.
ステップ3.1 – クライアントのインストールと構成
Nomadクライアントのインストール手順はサーバーの場合と同様です。まず、クライアントマシンにConsulとNomadをインストールします。.
これらの手順には、パッケージのダウンロードとインストールが含まれます。.
ステップ3.2 – クライアント向けConsulの設定
パス内のConsul設定ファイル /etc/consul.d/consul.hcl 作成します。クライアントの場合、設定はより簡単になります。
client {
enabled = true
network_interface = "{{ GetPrivateInterfaces | include \"network\" \"10.0.0.0/8\" | attr \"name\" }}"
}
acl {
enabled = true
}IPアドレスは 再試行参加 これらは Consul サーバーの内部アドレスです。.
証明書ファイルとキー ファイル (cert と key) はクライアント固有である必要があります。.
ステップ3.3 – クライアント向けNomadの設定
Nomad設定ファイルをパスに配置する /etc/nomad.d/nomad.hcl 作成します。クライアントの場合、この構成には次の設定が含まれます。
datacenter = "dc1" data_dir = "/opt/nomad" bind_addr = "0.0.0.0" advertise { http = "10.0.1.2:4646" rpc = "10.0.1.2:4647" serf = "10.0.1.2:4648" } client { enabled = true network_interface = "eth0" servers = ["10.0.0.2:4647", "10.0.0.3:4647", "10.0.0.4:4647"] } tls { http = true rpc = true ca_file = "/root/consul-agent-ca.pem" cert_file = "/root/dc1-client-consul-0.pem" key_file = "/root/dc1-client-consul-0-key.pem" verify_server_hostname = true }住所 広告する このクライアントの内部アドレスを指している必要があります。また、アドレスは サーバー これらは Nomad サーバーと同様です。.
ステップ3.4 – サービスの有効化と起動
サーバーと同様に、クライアントに対して Consul および Nomad サービスを有効にして構成します。
client$ systemctl enable consul
client$ systemctl start consul
client$ systemctl enable nomad
client$ systemctl start nomadサービスのステータスを確認します。
client$ systemctl status consul
client$ systemctl status nomadステップ3.5 – クライアントの接続を確認する
クライアントがConsulクラスタに接続されていることを確認してください。サーバーから次のコマンドを実行します。
server$ consul membersクライアントがリストに表示されるはずです。また、Nomadの場合:
server$ nomad node statusクライアントは「準備完了」状態になっているはずです。問題が発生した場合は、設定ファイルを確認し、ログを確認してください。
client$ journalctl -u consul
client$ journalctl -u nomadステップ4 – Nomadでタスクを実行する
適切なセットアップが完了したら、Nomad でジョブを定義して実行できます。.
タスク構成ファイルを作成します。例:
job "example" { datacenters = ["dc1"] group "example-group" { task "example-task" { driver = "docker" config { image = "nginx:latest" } resources { cpu = 500 memory = 256 } } } }上記のファイルに名前を付ける 例.nomad 次のコマンドで保存して実行します。
server$ nomad job run example.nomadタスク実行のステータスを確認します。
server$ nomad job status example結果
Consul と Nomad のクラスタのセットアップが完了しました。このインフラストラクチャを使用して、タスクとサービスを管理できます。.









