لینوکس ۳۰۵؛ شب ۵۰: Swarm؛ service، replica و routing mesh
فهرست نوشته
Swarm وضعیت مطلوب سرویس را بین nodeها نگه میدارد. امشب یک manager آزمایشگاهی میسازیم و تفاوت service دارای replica را با container مستقل میبینیم.
این جلسه بخشی از دورهٔ لینوکس ۳۰۵ در ۶۰ شب است.
جایگاه در دوره: هدفهای 352.4 آزمون 305-300.
محیط: Clone تازهٔ Docker با IP مدیریت 192.168.58.60، شبکهٔ Host-only و بدون workload مهم. IP را با مقدار واقعی Clone جایگزین کن؛ پورتهای swarm فقط بین nodeهای lab مجاز باشند.
sudo docker swarm init --advertise-addr 192.168.58.60
sudo docker node ls
sudo docker service create --name web305-swarm --replicas 2 \
--publish published=18051,target=8080 \
alpine:3.23 sh -c \
'mkdir -p /www; printf "swarm305\n" > /www/index.html; exec httpd -f -p 8080 -h /www'
sudo docker service ls
sudo docker service ps web305-swarm
curl --fail http://192.168.58.60:18051/
sudo docker service scale web305-swarm=3
sudo docker service inspect web305-swarm --pretty
این single-manager cluster تحمل از دست رفتن manager ندارد. replica تعداد task مطلوب است؛ سه replica روی یک node، سه failure domain نمیسازد. task خارجشده ممکن است با task جدید جایگزین شود؛ identity container ثابت نیست.
publish در routing mesh روی interfaceهای node قابل دسترسی است؛ برخلاف مثال loopback standalone. این تمرین فقط شبکهٔ جدا و firewall محدود دارد.
چند node و rollout#
برای افزودن worker، token خروجی join را فقط به VM مورد اعتماد بده؛ آن credential است و در گزارش عمومی قرار نمیگیرد. discovery/control، ارتباط nodeها و overlay به portهای مستند Docker و MTU مناسب نیاز دارند.
sudo docker service update --update-parallelism 1 \
--update-delay 10s --force web305-swarm
sudo docker service ps web305-swarm
force همان image را دوباره deploy میکند؛ rollout واقعی image نسخهٔ جدید و سیاست failure/rollback میخواهد. سه manager میتوانند quorum اکثریت بسازند؛ دو manager تحمل failure مفیدی ندارند. volume با driver local داده را بین workerها replicate نمیکند.
بررسی و بازگشت: desired/current task، پاسخ HTTP و جای taskها را ثبت کن. service rm همهٔ taskهای همان سرویس را قطع میکند؛ سپس فقط manager دورریختنی را با swarm leave –force از cluster آزمایشی خارج کن.
منبع: Swarm ، routing mesh ، مدیریت managerها .