مقدمة
في هذا البرنامج التعليمي، سنقوم بإعداد مجموعة HashiCorp Nomad باستخدام Consul لاكتشاف الخدمات والعقد.
بفضل وجود 3 عقد خادم وعدد غير محدد من عقد العميل، يمكن أن يكون هذا الإعداد بمثابة أساس للمشاريع المتنامية.
سنقوم أيضًا بإنشاء لقطة من سحابة هيتزنر للعملاء، مما يسمح بإضافة المزيد من العملاء دون الحاجة إلى تكوين يدوي.
تعمل المجموعة على شبكة خاصة بين الخوادم وتدعم جميع ميزات Nomad و Consul بشكل افتراضي، مثل اكتشاف الخدمة وإدارة وحدات التخزين.
يتبع هذا البرنامج التعليمي جزئياً الخطوات الموصى بها في دليل النشر الرسمي لـ Consul و Nomad.
المتطلبات الأساسية
- حساب Hetzner Cloud
- معرفة أساسية بنظام لينكس وأوامر سطر الأوامر
- إمكانية الاتصال بالخادم باستخدام SSH
- لديك خادم هيتزنر
تم اختبار هذا البرنامج التعليمي على خوادم Ubuntu 24.04 Hetzner Cloud مع Nomad الإصدار 1.9.3 و Consul 1.20.1.
المصطلحات والرموز
الأوامر
local$ <command> این دستور باید روی ماشین محلی اجرا شود.
server$ <command> این دستور باید بهعنوان root روی سرور اجرا شود.
الخطوة 1 - إنشاء الصورة الأساسية
سيتم استخدام المورد التالي في هذه الخطوة:
- 1 خادم سحابي من نوع Hetzner CX22
سنبدأ بإعداد خادم Consul/Nomad على خادم CX22 جديد. ستكون اللقطة التي تم إنشاؤها بمثابة الصورة الأساسية لجميع خوادم المجموعة وعملائها في الخطوات التالية.
يوضح هذا الدليل كيفية إعداد ثلاثة خوادم. يضمن هذا الإعداد توفرًا عاليًا للمجموعة دون تكلفة باهظة. لا يُنصح بإعداد خادم واحد، ولكنه ممكن. سيتضمن الدليل شروحات حول التغييرات المطلوبة لخادم واحد أو أكثر من الخوادم الثلاثة في الخطوات ذات الصلة.
انتقل إلى واجهة الويب الخاصة بـ Hetzner Cloud وقم بإنشاء خادم CX22 جديد باستخدام Ubuntu 24.04.
الخطوة 1.1 - تثبيت 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 للقنصلية
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إذا كنت ترغب في تشغيل عدد أقل أو أكثر من 3 خوادم في مجموعة Consul، فكرر الأمر. consul tls cert create -server -dc dc1 يتكيف.
بالنسبة لخادم المجموعة، يلزم شهادة واحدة فقط، أما بالنسبة لخمسة خوادم، فأنت بحاجة إلى خمس شهادات.
ستؤدي هذه الأوامر إلى إنشاء 3 شهادات خادم وشهادة عميل واحدة.
مجلد /جذر/ ينبغي أن يحتوي الآن على الملفات التالية على الأقل:
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 الثنائي
قم بتثبيت نوماد
للحصول على مزيد من المعلومات حول الإصدارات المتاحة، تفضل بزيارة الموقع الرسمي.
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 - إعداد خوادم المجموعة
في هذه الخطوة، ستقوم بإنشاء 3 خوادم مجموعة من الصورة الأساسية التي تم إنشاؤها في الخطوة 1.
تشكل هذه الخوادم أساس مجموعتك وتنتخب قائدًا للمجموعة بشكل ديناميكي.
- 1 شبكة هيتزنر السحابية
- 3 خوادم سحابية من نوع Hetzner CX22
في وحدة تحكم Hetzner Cloud، قم بإنشاء 3 خوادم CX22 من اللقطة التي تم إنشاؤها في الخطوة 1 وشبكة سحابية مشتركة.
يستخدم هذا الدليل شبكة 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> باستخدام المفتاح الذي تم إنشاؤه من الأمر مفتاح تفعيل كونسول.
بالنسبة للخوادم الأخرى، ملف الشهادة و ملف المفاتيح قم بتغييره ليتوافق مع شهادة ذلك الخادم.
الخطوة 2.3 - تهيئة نوماد
أنشئ ملف تكوين 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 - تحقق من واجهة الويب
ينبغي أن تكون واجهات الويب الخاصة بـ 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.
يجب أن تكون ملفات الشهادة والمفتاح (الشهادة والمفتاح) خاصة بالعميل.
الخطوة 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 }عنوان أعلن ينبغي أن يشير إلى العنوان الداخلي لهذا العميل. وكذلك العناوين الخوادم إنها مماثلة لخوادم نوماد.
الخطوة 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.
أنشئ ملف تكوين المهمة، على سبيل المثال:
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. يمكنك الآن استخدام هذه البنية التحتية لإدارة مهامك وخدماتك.









