English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

إدارة مجموعات Swarm

مقدمة

Docker Swarm هو أداة إدارة مجموعات Docker. إنه يتحول مجموعة من أجهزة Docker إلى وحدة فيروسية واحدة من Docker. يقدم Docker Swarm API القياسية، يمكن لكل الأدوات التي كانت تتعامل مع وحدة Docker أن تستخدم Swarm لتوسيع نطاقها بسهولة إلى عدة أجهزة.

الأدوات التي يدعمها تشمل而无限于以下 البنود:

  • Dokku

  • Docker Compose

  • Docker Machine

  • Jenkins

النظام

كما يظهر في الصورة، تتكون مجموعة swarm من عقدة إدارة (manager) وعقدة عمل (work node).

  • مدير swarmتقوم بإدارة الكتلة بأكملها، بما في ذلك تكوين الكتلة وإدارة الخدمات وكل الأعمال المتعلقة بالكتلة.

  • عقدة عمل: وهي النقطة المتاحة في الصورة، وتقوم بتنفيذ الخدمات المطلوبة لتنفيذ المهام (task).

استخدام

في هذا المثال، يتم شرح Docker Machine و virtualbox، تأكد من أن جهازك قد تم تثبيت virtualbox.

1- إنشاء عقدة إدارة مجموعة swarm (manager)

إنشاء جهاز docker:

$ docker-machine create -d virtualbox swarm-manager

توليد مجموعة swarm، الجهاز الذي يتم فيه التوليد هو عقدة إدارة الكتلة.

$ docker-machine ssh swarm-manager
$ docker swarm init --advertise-addr 192.168.99.107 # IP هذا هو IP المخصص للجهاز عند إنشائه.

المخرجات أعلاه تثبت أن التوليد قد تم بنجاح. يجب نسخ الخط التالي واستخدامه عند إضافة عقدة عمل:

docker swarm join --token SWMTKN-1-4oogo9qziq768dma0uh2j0z0m5twlm10iynvz7ixza96k6jh9p-ajkb6w7qd06y1e33yrgko64sk 192.168.99.107:2377

2- إنشاء عقدة عمل لمجموعة swarm (worker)

يتم إنشاء جهازين مباشرة هنا، swarm-worker1 و swarm-worker2.

ادخل إلى جهازين مختلفين، وحدد إضافة إلى الكتلة التي تم إنشاؤها في الخطوة السابقة، هنا سيتم استخدام النص المكرر من الخطوة السابقة.

مخرجات البيانات أعلاه توضح أن الإضافة كانت ناجحة.

الشكل السابق، بسبب طول النص المكرر في الخطوة السابقة، سيتم قطعه تلقائيًا، في الواقع الأمر الذي يتم تنفيذه في الصورة هو كما يلي:

docker@swarm-worker1:~$ docker swarm join --token SWMTKN-1-4oogo9qziq768dma0uh2j0z0m5twlm10iynvz7ixza96k6jh9p-ajkb6w7qd06y1e33yrgko64sk 192.168.99.107:2377

3، عرض معلومات الشبكة

الدخول إلى العقدة الإدارية، وتنفيذ: docker info يمكنك عرض معلومات الشبكة الحالية.

$ docker info

من خلال الرسم بالدائرة الحمراء، يمكنك معرفة أن هناك ثلاث عقدات تعمل في الشبكة الحالية، واحدة منها هي العقدة الإدارية.

4، توزيع الخدمة داخل الشبكة

ملاحظةأي عملية تتعلق بادارة الشبكة تتم على العقدة الإدارية.

في هذا المثال، سنقوم بإنشاء خدمة تُدعى helloworld على عقدة عمل، حيث يتم تخصيصها عشوائيًا لعدة عقدة عمل:

docker@swarm-manager:~$ docker service create --replicas 1 --name helloworld alpine ping docker.com

5، عرض حالة توزيع الخدمة

تحقق مما إذا كانت الخدمة تعمل على أي عقدة، يمكنك رؤية أنها تعمل على عقدة swarm-worker1 حاليًا:

docker@swarm-manager:~$ docker service ps helloworld

تحقق من معلومات التركيب الخاصة بخدمة helloworld:

docker@swarm-manager:~$ docker service inspect --pretty helloworld

6، توسيع خدمة الشبكة

سنقوم بتوسيع خدمة helloworld المذكورة أعلاه إلى عقدتين.

docker@swarm-manager:~$ docker service scale helloworld=2

يمكنك رؤية أنه تم توسيعه من عقدة واحدة إلى عقدتين.

7، حذف الخدمة

docker@swarm-manager:~$ docker service rm helloworld

تحقق مما إذا كان تم حذفه:

8، ترقية الخدمة بشكل متدرج

في الأمثلة التالية، سنقوم بشرح كيفية ترقية إصدار redis إلى إصدار أعلى.

إنشاء نسخة 3.0.6 من redis.

docker@swarm-manager:~$ docker service create --replicas 1 --name redis --update-delay 10s redis:3.0.6

تحديث Redis بشكل متدرج.

docker@swarm-manager:~$ docker service update --image redis:3.0.7 redis

من خلال الرسم يمكن ملاحظة أن إصدار Redis قد تم تحديثه من 3.0.6 إلى 3.0.7، مما يعني أن الخدمة قد تم تحديثها بنجاح.

9. إيقاف عقدة لتلقي المهام الجديدة

للنظر في جميع العقد:

docker@swarm-manager:~$ docker node ls

يمكنك رؤية أن جميع العقد هي Active ويمكنها استقبال توزيع المهام الجديدة.

إيقاف العقدة swarm-worker1:

ملاحظةالنوع: swarm-worker1 يتحول إلى Drain. لن يؤثر ذلك على خدمات المجموعة، ولكن لن يستقبل العقدة swarm-worker1 مهام جديدة، مما يؤدي إلى انخفاض قدرة المجموعة على تحمل الحمل.

يمكنك إعادة تنشيط العقدة باستخدام الأمر التالي:

docker@swarm-manager:~$ docker node update --availability active swarm-worker1