نصب یک کلاستر نوماد با کانسول روی سرورهای ابری

مقدمه

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

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

پیش‌نیازها
  • یک حساب Hetzner Cloud
  • آشنایی با دستورات لینوکس و ترمینال
  • توانایی اتصال به سرور از طریق ssh

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

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

دستورات:

local$ <دستور> # این دستور باید در ماشین محلی شما اجرا شود

server$ <دستور> # این دستور باید در سرور به‌عنوان کاربر root اجرا شود

 

گام 1 – ایجاد تصویر پایه

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

  • 1 سرور Hetzner Cloud مدل CX22

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

گام 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 – ایجاد Snapshot پایه

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

گام 2 – راه‌اندازی سرورهای کلاستر

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

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

  • 1 شبکه Hetzner Cloud
  • 3 سرور Hetzner Cloud مدل CX22

در کنسول Hetzner Cloud، 3 سرور CX22 از Snapshot ایجاد شده در گام 1 ایجاد کرده و یک شبکه ابری مشترک به آنها وصل کنید. این آموزش از شبکه 10.0.0.0/8 استفاده خواهد کرد، اما شبکه‌های کوچکتر هم کار می‌کنند.

گام 2.1 – ایجاد کلید رمزگذاری متقارن

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

server$ consul keygen

گام 2.2 – توزیع گواهینامه‌ها

حالا می‌توانیم گواهینامه‌های صحیح را از گام 1 به دایرکتوری پیکربندی Consul کپی کنیم. دستور زیر را در تمام سرورها اجرا کنید:

server$ cp consul-agent-ca.pem /etc/consul.d/

گواهینامه‌های 3 سرور ایجاد شده در گام 1 باید توزیع شوند تا هر سرور گواهینامه منحصر به فرد خود را با کلید مربوطه دریافت کند. این آموزش دستورهای زیر را برای سرورهای مختلف ارائه می‌دهد:

[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 info # برای دریافت اطلاعات کلی درباره کلاستر Consul
  • nomad job status # برای مشاهده وضعیت مشاغل Nomad
  • nomad alloc status # برای مشاهده وضعیت تخصیص‌ها در کلاستر Nomad

استفاده از کلاستر Nomad

Nomad به شما این امکان را می‌دهد که کارهای مختلفی مانند مدیریت مشاغل (jobs)، استقرار پادها (pods) و هماهنگی با Consul برای کشف سرویس‌ها انجام دهید.

استفاده از Consul برای کشف سرویس‌ها

Consul قابلیت کشف سرویس‌ها را به‌صورت خودکار فراهم می‌آورد. با استفاده از رابط وب Consul (که به‌طور پیش‌فرض در پورت 8500 در دسترس است)، می‌توانید سرویس‌های موجود را مشاهده کرده و در صورت لزوم آنها را پیکربندی کنید.

نتیجه‌

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

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

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

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