Einführung
در این آموزش، ما یک خوشه HashiCorp Nomad را با Consul برای کشف سرویس و گرهها راهاندازی خواهیم کرد.
با ۳ گره سرور و تعداد دلخواهی از گرههای کلاینت، این تنظیم میتواند به عنوان پایهای برای پروژههای در حال رشد عمل کند.
همچنین یک Snapshot از Hetzner Cloud برای کلاینتها ایجاد خواهیم کرد که امکان افزودن کلاینتهای بیشتر بدون تنظیم دستی را فراهم میکند.
خوشه بر روی یک شبکه خصوصی بین سرورها اجرا میشود و از تمام ویژگیهای Nomad و Consul به صورت پیشفرض پشتیبانی میکند، مانند کشف سرویس و مدیریت حجمها.
این آموزش تا حدی از مراحل توصیهشده در راهنمای رسمی استقرار Consul و Nomad پیروی میکند.
پیشنیازها
- یک حساب Hetzner Cloud
- دانش پایهای از دستورات لینوکس و شل
- توانایی اتصال به سرور با ssh
- یک سرور Hetzner داشته باشید
این آموزش بر روی سرورهای 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 Und 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 را راهاندازی کردید. اکنون میتوانید از این زیرساخت برای مدیریت وظایف و سرویسهای خود استفاده کنید.









