نصب کلاستر Nomad با Consul روی سرورهای ابری

مقدمه

در این آموزش، ما یک خوشه HashiCorp Nomad را با Consul برای کشف سرویس و گره‌ها راه‌اندازی خواهیم کرد.
با ۳ گره سرور و تعداد دلخواهی از گره‌های کلاینت، این تنظیم می‌تواند به عنوان پایه‌ای برای پروژه‌های در حال رشد عمل کند.
همچنین یک Snapshot از Hetzner Cloud برای کلاینت‌ها ایجاد خواهیم کرد که امکان افزودن کلاینت‌های بیشتر بدون تنظیم دستی را فراهم می‌کند.
خوشه بر روی یک شبکه خصوصی بین سرورها اجرا می‌شود و از تمام ویژگی‌های Nomad و Consul به صورت پیش‌فرض پشتیبانی می‌کند، مانند کشف سرویس و مدیریت حجم‌ها.

این آموزش تا حدی از مراحل توصیه‌شده در راهنمای رسمی استقرار Consul و Nomad پیروی می‌کند.

پیش‌نیازها

این آموزش بر روی سرورهای Ubuntu 24.04 Hetzner Cloud با نسخه Nomad 1.9.3 و Consul 1.20.1 آزمایش شده است.

اصطلاحات و نمادها

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

مرحله ۱ – ایجاد تصویر پایه

در این مرحله از منبع زیر استفاده خواهد شد:

  • ۱ سرور Hetzner Cloud نوع CX22

ما با تنظیم یک سرور Consul / Nomad روی یک سرور جدید CX22 شروع می‌کنیم. Snapshot ایجادشده به‌عنوان تصویر پایه برای تمام سرورهای خوشه و کلاینت‌ها در مراحل بعدی عمل خواهد کرد.

این راهنما تنظیمات برای ۳ سرور را نشان می‌دهد. این کار خوشه را بسیار در دسترس اما نه چندان گران می‌سازد. تنظیم یک سرور منفرد توصیه نمی‌شود، اما ممکن است. آموزش شامل نظراتی در مورد تغییرات مورد نیاز برای ۱ یا بیشتر از ۳ سرور در مراحل مربوطه خواهد بود.

به رابط کاربری وب Hetzner Cloud بروید و یک سرور جدید CX22 با Ubuntu 24.04 ایجاد کنید.

مرحله ۱.۱ – نصب 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

آماده‌سازی گواهی‌های TLS برای Consul
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 اجرا کنید، تکرار دستور consul tls cert create -server -dc dc1 را تطبیق دهید.
برای یک سرور خوشه فقط یک گواهی نیاز است، برای ۵ سرور به ۵ گواهی نیاز دارید.

این دستورات ۳ گواهی سرور و یک گواهی کلاینت ایجاد می‌کنند.
پوشه /root/ اکنون باید حداقل شامل فایل‌های زیر باشد:

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

مرحله ۱.۲ – نصب باینری 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"

مرحله ۱.۳ – آماده‌سازی خدمات 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

این سرویس‌ها را هنوز فعال نکنید، زیرا تنظیمات کامل نشده است.

مرحله ۱.۵ – ایجاد Snapshot پایه

در نهایت، سرور را در کنسول Hetzner Cloud متوقف کنید و یک Snapshot ایجاد کنید. این Snapshot به‌عنوان پایه برای تنظیم سرور و کلاینت‌های خوشه استفاده خواهد شد.

پس از موفقیت‌آمیز بودن ایجاد Snapshot، نمونه CX22 این مرحله را حذف کنید.

مرحله ۲ – تنظیم سرورهای خوشه

در این مرحله شما ۳ سرور خوشه را از تصویر پایه ایجادشده در مرحله ۱ ایجاد می‌کنید.
این سرورها اساس خوشه شما را تشکیل می‌دهند و به‌صورت پویا یک رهبر خوشه انتخاب می‌کنند.

  • ۱ شبکه Hetzner Cloud
  • ۳ سرور Hetzner Cloud نوع CX22

در کنسول Hetzner Cloud، ۳ سرور CX22 از Snapshot ایجادشده در مرحله ۱ و یک شبکه مشترک Cloud Network ایجاد کنید.
این راهنما از شبکه 10.0.0.0/8 استفاده می‌کند، اما شبکه‌های کوچکتر نیز کار خواهند کرد.

در مراحل زیر، آموزش از سرورها با آدرس‌های داخلی 10.0.0.2، 10.0.0.3 و 10.0.0.4 یاد خواهد کرد.
اگر سرورهای شما آدرس‌های داخلی متفاوتی دارند، در مراحل بعدی آن‌ها را جایگزین کنید.

مرحله ۲.۱ – ایجاد کلید رمزگذاری متقارن

ابتدا، یک کلید رمزگذاری متقارن ایجاد کنید که بین تمام سرورها به اشتراک گذاشته شود. این کلید را در مکان امنی ذخیره کنید؛ در مراحل بعدی به آن نیاز داریم.

server$ consul keygen

مرحله ۲.۲ – پیکربندی 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 keygen.
برای سرورهای دیگر، cert_file و key_file را تغییر دهید تا مطابق با گواهی مربوط به آن سرور باشد.

مرحله ۲.۳ – پیکربندی 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 با آدرس داخلی هر سرور.

مرحله ۲.۴ – فعال‌سازی و راه‌اندازی سرویس‌ها

پس از ایجاد فایل‌های پیکربندی، 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

مرحله ۲.۵ – تأیید خوشه Consul

برای بررسی وضعیت خوشه Consul، دستور زیر را اجرا کنید:

server$ consul members

شما باید لیستی از تمام سرورها و کلاینت‌های خوشه را مشاهده کنید. اگر مشکلی وجود دارد، فایل‌های پیکربندی را دوباره بررسی کنید و لاگ‌ها را بخوانید:

server$ journalctl -u consul

مرحله ۲.۶ – تأیید خوشه Nomad

وضعیت خوشه Nomad را با استفاده از دستور زیر بررسی کنید:

server$ nomad server members

شما باید لیستی از سرورهای Nomad خوشه را مشاهده کنید. اگر مشکلی وجود دارد، فایل‌های پیکربندی را بررسی کنید و لاگ‌ها را بخوانید:

server$ journalctl -u nomad

مرحله ۲.۷ – بررسی رابط وب

رابط وب Consul و Nomad اکنون باید در دسترس باشند:

  • Consul: http://<SERVER_IP>:8500
  • Nomad: http://<SERVER_IP>:4646

جایگزین کنید <SERVER_IP> را با آدرس IP عمومی یا خصوصی سرور.

مرحله ۳ – اضافه کردن کلاینت‌ها

اکنون، می‌توانید کلاینت‌های Nomad را اضافه کنید. این مرحله مشابه تنظیم سرور است، اما با نقش کلاینت.

مرحله ۳.۱ – نصب و پیکربندی کلاینت‌ها

مراحل نصب برای کلاینت‌های Nomad مشابه سرورها است. ابتدا Consul و Nomad را بر روی ماشین‌های کلاینت نصب کنید.
این مراحل شامل دریافت بسته‌ها و نصب آن‌هاست.

مرحله ۳.۲ – تنظیم 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 در retry_join همان آدرس‌های داخلی سرورهای Consul هستند.
فایل‌های گواهی و کلید (cert و key) باید مربوط به کلاینت باشند.

مرحله ۳.۳ – تنظیم 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 }

آدرس advertise باید به آدرس داخلی این کلاینت اشاره کند. همچنین، آدرس‌های servers همان سرورهای Nomad هستند.

مرحله ۳.۴ – فعال‌سازی و راه‌اندازی سرویس‌ها

همانند سرورها، سرویس‌های 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

مرحله ۳.۵ – بررسی اتصال کلاینت‌ها

مطمئن شوید که کلاینت‌ها به خوشه Consul متصل شده‌اند. از یک سرور دستور زیر را اجرا کنید:

server$ consul members

کلاینت‌ها باید در لیست مشاهده شوند. همچنین، برای Nomad:

server$ nomad node status

کلاینت‌ها باید در وضعیت “ready” باشند. اگر مشکلی وجود دارد، فایل‌های پیکربندی را بررسی کنید و لاگ‌ها را بخوانید:

client$ journalctl -u consul
client$ journalctl -u nomad

مرحله ۴ – اجرای وظایف در Nomad

پس از اطمینان از راه‌اندازی صحیح، می‌توانید وظایف (Jobs) خود را روی Nomad تعریف کنید و اجرا کنید.
یک فایل پیکربندی وظیفه به عنوان مثال ایجاد کنید:

job "example" { datacenters = ["dc1"] group "example-group" { task "example-task" { driver = "docker" config { image = "nginx:latest" } resources { cpu = 500 memory = 256 } } } }

فایل بالا را به نام example.nomad ذخیره کنید و با دستور زیر اجرا کنید:

server$ nomad job run example.nomad

وضعیت اجرای وظیفه را بررسی کنید:

server$ nomad job status example

نتیجه‌

با موفقیت یک خوشه Consul و Nomad را راه‌اندازی کردید. اکنون می‌توانید از این زیرساخت برای مدیریت وظایف و سرویس‌های خود استفاده کنید.

[تعداد: 1   میانگین: 5/5]
دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

شاید دوست داشته باشید