在云服务器上使用 Consul 安装 Nomad 集群

0 股票
0
0
0
0

介绍

在本教程中,我们将使用 Consul 设置 HashiCorp Nomad 集群,以实现服务和节点发现。.
这种配置包含 3 个服务器节点和任意数量的客户端节点,可以作为不断发展的项目的基础。.
我们还将为客户创建 Hetzner 云的快照,允许在无需手动配置的情况下添加更多客户。.
该集群运行在服务器之间的专用网络上,并开箱即用地支持所有 Nomad 和 Consul 功能,例如服务发现和卷管理。.

本教程部分遵循 Consul 和 Nomad 官方部署指南中的推荐步骤。.

先决条件

本教程已在搭载 Nomad 1.9.3 版本和 Consul 1.20.1 版本的 Ubuntu 24.04 Hetzner Cloud 服务器上进行过测试。.

术语和符号

命令
local$ <command> این دستور باید روی ماشین محلی اجرا شود.
server$ <command> این دستور باید به‌عنوان root روی سرور اجرا شود.

步骤 1 – 创建基础图像

此步骤将使用以下资源:

  • 1. Hetzner 云服务器 CX22 型

我们将首先在一台新的 CX22 服务器上搭建 Consul/Nomad 服务器。创建的快照将作为后续步骤中所有集群服务器和客户端的基础镜像。.

本指南展示了如何配置三台服务器。这样可以确保集群的高可用性,同时成本也不会过高。虽然也可以只配置一台服务器,但不建议这样做。教程将在相关步骤中说明需要对三台服务器中的一台或多台进行哪些更改。.

前往 Hetzner Cloud 网络界面,创建一个新的 CX22 服务器,使用 Ubuntu 24.04。.

步骤 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

为 Consul 准备 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 dc1

如果要在 Consul 集群中运行少于或多于 3 台服务器,请重复该命令。 consul tls cert create -server -dc dc1 适应。.
对于集群服务器,只需要一个证书;对于 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

有关可用版本的更多信息,请访问官方网站。.

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

以下配置文件为 /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> 使用命令生成的密钥 Consul 密钥生成器.
对于其他服务器, 证书文件密钥文件 将其更改为与该服务器的证书匹配。.

步骤 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 的网页界面现在应该可以使用了:

  • 领事: 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 } } } }

给上面的文件命名 例如游牧民 保存并使用以下命令运行:

server$ nomad job run example.nomad

检查任务执行状态:

server$ nomad job status example

结果

您已成功搭建 Consul 和 Nomad 集群。现在您可以使用此基础架构来管理您的任务和服务。.

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

您可能也喜欢