介绍
在本教程中,我们将使用控制台设置一个 HashiCorp Nomad 集群,以发现服务和节点。本教程使用 3 个服务器节点和任意数量的客户端节点,可作为扩展项目的良好基础。我们还将在 Hetzner Cloud 上为客户端创建一个快照,这样我们就可以在无需手动配置的情况下添加更多客户端。该集群将在服务器之间的私有网络中运行,并支持所有 Nomad 和控制台的默认功能,例如服务发现和卷。.
本教程部分遵循 Consul 和 Nomad 官方安装指南中推荐的步骤。.
先决条件
- Hetzner Cloud 帐户
- Linux 和终端命令入门
- 能够通过 SSH 连接到服务器。
本教程已在 Hetzner Cloud 的 Ubuntu 24.04 服务器上测试过,版本为 Nomad 1.9.3 和 Consul 1.20.1。.
术语和符号
命令:
local$ <دستور> # این دستور باید در ماشین محلی شما اجرا شود
server$ <دستور> # این دستور باید در سرور بهعنوان کاربر root اجرا شود
步骤 1 – 创建基础图像
此步骤将使用以下资源:
- 1. Hetzner 云服务器 CX22 型号
我们将首先在 Hetzner Cloud 中的一台新的 CX22 服务器上搭建 Consul/Nomad 服务器。生成的快照将作为后续步骤中所有集群服务器和客户端的基础镜像。.
步骤 1.1 – 安装 Consul
要安装 Consul,请运行以下命令:
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 consul在 Consul 中添加自动完成功能(可选):
server$ consul -autocomplete-install步骤 1.2 – 安装 Nomad 二进制文件
要安装 Nomad,请运行以下命令:
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 nomad在 Nomad 中添加自动完成功能(可选):
server$ nomad -autocomplete-install步骤 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控制台中停止服务器并创建快照。该快照将作为设置集群服务器和客户端的基础。.
步骤 2 – 设置集群服务器
在此步骤中,您将基于基础镜像创建 3 个集群服务器。这些服务器将作为集群的基础服务器,并会自动选举集群领导者。.
我们将使用以下资源:
- 1 赫兹纳云网络
- 3 台 Hetzner 云服务器 CX22 型
在 Hetzner 云控制台中,根据步骤 1 中创建的快照创建 3 台 CX22 服务器,并将它们连接到共享云网络。本教程将使用 10.0.0.0/8 网络,但较小的网络也适用。.
步骤 2.1 – 生成对称加密密钥
首先,创建一个所有服务器共享的对称加密密钥。将此密钥存储在安全的地方,因为我们将在后续步骤中用到它。.
server$ consul keygen步骤 2.2 – 分发证书
现在我们可以将步骤 1 中的正确证书复制到 Consul 配置目录。在所有服务器上运行以下命令:
server$ cp consul-agent-ca.pem /etc/consul.d/步骤 1 中创建的 3 个服务器证书需要分发,以便每个服务器都能获得具有相应密钥的唯一证书。本教程提供了针对不同服务器的以下命令:
[10.0.0.2] server$ cp -a dc1-server-consul-0* /etc/consul.d/
[10.0.0.3] server$ cp -a dc1-server-consul-1* /etc/consul.d/
[10.0.0.4] server$ cp -a dc1-server-consul-2* /etc/consul.d/步骤 2.3 – 编辑 Consul 配置
在所有服务器上,编辑配置文件 /etc/consul.d/consul.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
}步骤 2.4 – 设置 Consul 和 Nomad
现在配置已正确完成,您可以启动 Consul 和 Nomad 服务了。.
server$ systemctl enable consul
server$ systemctl start consul
server$ systemctl enable nomad
server$ systemctl start nomad要检查服务状态,可以使用以下命令:
server$ systemctl status consul
server$ systemctl status nomad 如果一切正常,Consul 和 Nomad 服务应该正在运行,集群应该已正确设置。.
步骤 2.5 – 将其他节点连接到集群
现在主集群服务器已经启动并运行,接下来需要连接其他节点。要将客户端节点连接到集群,只需将相同的设置应用到新节点的 Consul 和 Nomad 配置中即可。.
在每个客户端节点上,创建与主服务器相同的配置文件,然后启动服务:
client$ cp consul-agent-ca.pem /etc/consul.d
/client$ cp dc1-client-consul-* /etc/consul.d
/client$ systemctl enable consul client$ systemctl start consul
client$ systemctl enable nomad client$ systemctl start nomad步骤 3 – 验证集群和配置
服务器和客户端启动后,您可以使用以下命令检查集群状态:
client$ consul members此命令应显示集群中的节点列表。您还可以使用以下命令检查 Nomad 的状态和设置:
client$ nomad status步骤 4 – 集群管理
现在您的 Consul 和 Nomad 集群已正确设置,您可以对其进行管理并利用其各种功能。.
要查看集群状态并运行管理请求,请使用以下命令:
领事信息使用 # 获取有关 Consul 集群的一般信息游牧职业状态# 查看 Nomad 工作状态游牧者分配状态使用 # 查看 Nomad 集群中的分配状态
使用 Nomad 集群
Nomad 允许您执行各种任务,例如管理作业、部署 pod 以及与 Consul 协调以发现服务。.
使用 Consul 发现服务
Consul 提供自动服务发现功能。您可以使用 Consul Web 界面(默认端口为 8500)查看可用服务,并根据需要进行配置。.
结果
在本教程中,您使用 Hetzner Cloud 在私有云网络中创建了一个由 HashiCorp Nomad 和 Consul 服务器组成的集群。该集群可用于管理各种大规模工作负载。本教程还详细介绍了如何通过快照启动新节点以及如何配置服务器。.









