مقدمه
در این آموزش، ما یک کلاستر 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
# برای دریافت اطلاعات کلی درباره کلاستر Consulnomad job status
# برای مشاهده وضعیت مشاغل Nomadnomad alloc status
# برای مشاهده وضعیت تخصیصها در کلاستر Nomad
استفاده از کلاستر Nomad
Nomad به شما این امکان را میدهد که کارهای مختلفی مانند مدیریت مشاغل (jobs)، استقرار پادها (pods) و هماهنگی با Consul برای کشف سرویسها انجام دهید.
استفاده از Consul برای کشف سرویسها
Consul قابلیت کشف سرویسها را بهصورت خودکار فراهم میآورد. با استفاده از رابط وب Consul (که بهطور پیشفرض در پورت 8500 در دسترس است)، میتوانید سرویسهای موجود را مشاهده کرده و در صورت لزوم آنها را پیکربندی کنید.
نتیجه
در این آموزش، کلاستری از سرورهای HashiCorp Nomad و Consul را در یک شبکه خصوصی ابری با استفاده از Hetzner Cloud ایجاد کردید. این کلاستر میتواند برای مدیریت کارهای مختلف در مقیاس بزرگ مورد استفاده قرار گیرد. همچنین این آموزش نحوه راهاندازی نودهای جدید از طریق Snapshot و پیکربندی سرورها را بهطور کامل پوشش داده است.