Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ซอฟต์แวร์ >> เครื่องเสมือน

Docker Swarm Mode: คู่มือขั้นตอนเพิ่ม Worker Nodes

มาขยายสิ่งที่เริ่มต้นกับ CentOS 7.2 ไปหลายสัปดาห์ก่อน ในบทช่วยสอนนั้น เราเรียนรู้วิธีเริ่มต้นและรันฟังก์ชันการจัดการกลุ่ม (clustering) และการประสานงาน (orchestration) แบบเนทีฟที่สร้างใน Docker 1.12 แต่มีเพียง manager node ไม่มี worker วันนี้เราจะขยายต่อ

จะแสดงวิธีเพิ่มโหนดที่ไม่สมมาตร (non-symmetrical nodes) เข้า swarm คือ Fedora 24 ที่จะทำงานคู่กับ CentOS box ทั้งคู่จะเข้าร่วมกลุ่ม พร้อม load balancing และฟีเจอร์ต่างๆ อย่างไรก็ตาม จะไม่เท่าที่คิด และจะเจอปัญหาบ้าง ทำให้น่าสนใจ ตามมาถึง

ข้อกำหนดเบื้องต้น (Prerequisites)

มีหลายอย่างที่ต้องทำก่อนจึงจะ join โหนดเพิ่มเข้า swarm ได้สำเร็จ:

  1. ทุกโหนดควรรัน Docker เวอร์ชันเดียวกัน และต้องเป็น 1.12 ขึ้นไปเพื่อรองรับ orchestration แบบเนทีฟ เหมือน CentOS, Fedora ก็ไม่มีเวอร์ชันล่าสุดใน repo ต้องเพิ่มและติดตั้งเอง ทั้งแบบมือหรือผ่าน Docker repository แล้วแก้ไขข้อขัดแย้ง dependency วิธีการเหมือนกับ CentOS ที่แสดงไปแล้ว
  2. ทุกโหนดต้องสื่อสารกันได้ ต้องมี routing และกฎไฟร์วอลล์ เพื่อให้ manager และ worker คุยกันได้ มิฉะนั้นจะ join ไม่ได้ วงจรลัดง่ายคือ flush ไฟร์วอลล์ชั่วคราว (iptables -F) แต่อาจลดความปลอดภัย ต้องเข้าใจสิ่งที่ทำและสร้างกฎที่เหมาะสม

ข้อผิดพลาดที่พบบ่อย:

Error response from daemon: Timeout was reached before node was joined. The attempt to join the swarm will continue in the background. Use the "docker info" command to see the current swarm status of your node.

ต้องมี Docker images เดียวกันบนทุกโฮสต์ ในบทก่อนเราสร้าง Apache image ต้องทำซ้ำบน worker nodes หรือกระจายอิมเมจ ถ้าไม่ทำ จะเจอ error:

7vwdxioopmmfp3amlm0ulimcu \_ websky.11 my-apache2:latest
localhost.localdomain Shutdown Rejected 7 minutes ago
"No such image: my-apache2:lat&"

เริ่มต้นกันเลย (Let's get started)

ตอนนี้ CentOS box รันอยู่ สร้างคอนเทนเนอร์ได้สำเร็จ เชื่อมต่อบริการผ่านพอร์ตโฮสต์ได้ ทุกอย่างดูดี แต swarm มีแค่ manager

เพิ่ม Worker Nodes (Join workers)

เพื่อเพิ่มโหนด ต้องใช้คำสั่ง join แต่ต้องหา token, IP และ port ก่อน เพื่อให้ worker authenticate กับ swarm manager ได้ถูกต้อง รันบน Fedora:

[root@localhost ~]# docker swarm join-token worker
To add a worker to this swarm, run the following command:

docker swarm join \
--token SWMTKN-1-0xvojvlza90nrbihu6gfu3qm34ari7lwnza ... \
192.168.2.100:2377

ห้าไม่แก้ไขไฟร์วอลล์และ routing จะได้ timeout error หาก join แล้ว รันซ้ำจะเกิด error:

Error response from daemon: This node is already part of a swarm. Use "docker swarm leave" to leave this swarm and join another one.

หากไม่แน่ใจ ให้ leave swarm แล้วลองใหม่:

[root@localhost ~]# docker swarm leave
Node left the swarm.

docker swarm join --token SWMTKN-1-0xvojvlza90nrbihu6gfu3qnza4 ... 192.168.2.100:2377
This node joined a swarm as a worker.

บน worker node ตรวจสอบสถานะด้วย docker info:

Swarm: active
NodeID: 2i27v3ce9qs2aq33nofaon20k
Is Manager: false
Node Address: 192.168.2.103

บน manager:

Swarm: active
NodeID: cneayene32jsb0t2inwfg5t5q
Is Manager: true
ClusterID: 8degfhtsi7xxucvi6dxvlx1n4
Managers: 1
Nodes: 3
Orchestration:
Task History Retention Limit: 5
Raft:
Snapshot Interval: 10000
Heartbeat Tick: 1
Election Tick: 3
Dispatcher:
Heartbeat Period: 5 seconds
CA Configuration:
Expiry Duration: 3 months
Node Address: 192.168.2.100

สร้างหรือขยายบริการ (Create or scale services)

ตอนนี้ต้องดูว่า Docker แจกแจงคอนเทนเนอร์ระหว่างโหนดอย่างไร การทดสอบแสดงอัลกอริทึม balancing ค่อนข้างง่ายภายใต้โหลดเบา บางครั้ง Docker ไม่พยายาม redistribute บริการที่รันอยู่ไปยัง worker ใหม่ แม้พยายาม scale และ update บนโอกาสหนึ่ง มันสร้างบริการใหม่ทั้งหมดบน worker node อาจเป็นตัวเลือกที่ดีที่สุด

(ภาพประกอบ: บริการใหม่สร้างบน worker node)

หลังจากผ่านไปสักพัก มีการ redistribute คอนเทนเนอร์ของบริการเดิมระหว่างสองโหนด แต่ใช้เวลา บริการใหม่ทำงานได้ดี นี่เป็นการสังเกตเบื้องต้น ยังไม่敢下定论

(ภาพประกอบ: Load balancing เริ่มทำงานหลังจากผ่านไปสักพัก)

สรุป (Conclusion)

Docker เป็นเครื่องมือที่สวยงาม และจะใหญ่ขึ้น ซับซ้อนขึ้น อันทรงพลังขึ้น และสง่างามขึ้น เวลาจะมาถึงที่มันถูกบริษัทใหญ่กลืนไป สำหรับ orchestration แบบเนทีฟ swarm mode ทำงานได้ดี แต่ต้องมีมากกว่าคอนเทนเนอร์ไม่กี่ตัวถึงจะใช้พลังของอัลกอริทึมและ scalability ได้เต็มที่

บทช่วยสอนนี้แสดงวิธีเพิ่มโหนด Fedora เข้า cluster ที่รันโดย CentOS box ทั้งคู่ทำงานร่วมกันได้ดี ยังมีคำถามเรื่อง load balancing จะสำรวจในบทความหน้า รวมทั้งเราได้จัดการ prerequisites และปัญหาทั่วไปที่อาจเจอตอน setup swarm รันคอนเทนเนอร์หลายตัว และสัมผัสการ scale และ distribute บริการ อย่าลืม นี่แค่จุดเริ่มต้น

Cheers.