Docker Swarm เพื่อให้ได้ความพร้อมใช้งานสูง

บล็อกเกี่ยวกับ Docker Swarm นี้อธิบายถึงพลังของการตั้งค่าคลัสเตอร์ของ Docker engine ผ่าน Docker Swarm ที่กำหนดค่าไว้เพื่อให้ได้ High Availability

คุณลักษณะที่สำคัญที่สุดของแอปพลิเคชันบนเว็บคืออะไร มีมากมาย แต่สำหรับฉัน ความพร้อมใช้งานสูง เป็นสิ่งที่สำคัญที่สุด นั่นคือสิ่งที่ Docker Swarm ช่วยให้เราประสบความสำเร็จ! ช่วยให้แอปพลิเคชันมีความพร้อมใช้งานสูง

ในไฟล์ บล็อกก่อนหน้า ฉันอธิบายวิธีการทำงานของ Docker Compose บล็อกนี้เกี่ยวกับ Docker Swarm เป็นความต่อเนื่องของอดีตและนี่คือประโยชน์ของการใช้ Docker Swarm สำหรับการจัดแอปพลิเคชันแบบหลายคอนเทนเนอร์



ในกรณีของบล็อกนี้เป็นเพียงแอปพลิเคชัน Angular ซึ่งจะเป็น Docker Swarm’ed
บันทึก : วิธีการบรรจุแอป MEAN Stack จะเหมือนกัน

Docker Swarm คืออะไร?

Docker Swarm เป็นเทคนิคในการสร้างและรักษาคลัสเตอร์ของ เครื่องมือเทียบท่า . เอ็นจิ้น Docker สามารถโฮสต์บนโหนดที่แตกต่างกันและโหนดเหล่านี้ซึ่งอยู่ในสถานที่ห่างไกลจะมีรูปแบบ a คลัสเตอร์ เมื่อเชื่อมต่อในโหมด Swarm



เหตุใดจึงต้องใช้ Docker Swarm

ด้วยเหตุผลดังกล่าวแล้ว! บรรลุ ความพร้อมใช้งานสูง โดยไม่มีเวลาหยุดทำงานเป็นสิ่งสำคัญสำหรับผู้ให้บริการทุกราย ความพร้อมใช้งานสูงจะสร้างความประทับใจให้กับลูกค้าของคุณหรือไม่? พวกเขาจะไม่ประทับใจหากต้องเผชิญกับการหยุดทำงาน นั่นคือเกมง่ายๆ

ประโยชน์อื่น ๆ ของ Docker Swarm

เช่นเดียวกับบริการอื่น ๆ อีกมากมาย Docker Swarm จะทำงานอัตโนมัติ โหลดบาลานซ์ สำหรับพวกเรา. ดังนั้นจึงไม่จำเป็นสำหรับวิศวกร DevOps ในการกำหนดเส้นทางการร้องขอการประมวลผลไปยังโหนดอื่น ๆ เมื่อล้มเหลว ผู้จัดการของคลัสเตอร์จะทำการจัดสรรภาระงานให้เราโดยอัตโนมัติ

การเข้าถึงแบบกระจายอำนาจ เป็นอีกหนึ่งประโยชน์ นั่นหมายความว่าอย่างไร? หมายความว่าโหนดทั้งหมดสามารถเข้าถึงได้อย่างง่ายดายจากผู้จัดการ ผู้จัดการจะแจ้งโหนดเป็นประจำและติดตามสถานะ / สถานะเพื่อรับมือกับการหยุดทำงาน อย่างไรก็ตามโหนดไม่สามารถเข้าถึงหรือติดตามบริการที่ทำงานในโหนด / ผู้จัดการอื่น ๆ



คุณสามารถตรวจสอบหมายเลข ของคอนเทนเนอร์ที่ทำงานในโหนด ไต่ขึ้น เลขที่ ของตู้คอนเทนเนอร์หรือ ลดขนาดลง เลขที่ ตามความต้องการของเราโดยดำเนินการเพียงคำสั่งเดียว

แม้ว่าจะมีการใช้งานแอปพลิเคชันแล้วเราก็สามารถออกได้ การอัปเดตแบบต่อเนื่อง และตรวจสอบให้แน่ใจว่าได้ CI (การบูรณาการแบบต่อเนื่อง) การอัปเดตแบบโรลลิ่งจะออกให้กับโหนดหนึ่งต่อจากอีกโหนดหนึ่งดังนั้นจึงทำให้แน่ใจว่าไม่มีเวลาหยุดทำงานและมีการกระจายโหลดระหว่างโหนดอื่นในคลัสเตอร์

แล้วอะไรต่อไป? ที่ต้องทำอย่างชัดเจน เริ่มต้นใช้งาน Docker Swarm หากคุณเคยทำงานกับ Docker มาแล้วหรือหากองค์กรของคุณต้องการสร้างบริการเว็บที่เชื่อถือได้

บันทึก : Docker engine ถูกติดตั้งบนโฮสต์ / เซิร์ฟเวอร์อิสระหรือใน VM หลายตัวในโฮสต์

เริ่มต้นด้วยโหมด Swarm

Docker Swarm เริ่มต้นโดยผู้จัดการหรือให้ฉันพูดแบบนี้อินสแตนซ์ที่เริ่มคลัสเตอร์ Swarm จะกลายเป็นผู้จัดการ คำสั่งในการเริ่มคลัสเตอร์คือ:

$ docker swarm init --advertise-addr ที่อยู่ IP

ในที่นี้ธง '–advertise-addr' ใช้สำหรับการโฆษณาตัวเองไปยังโหนดอื่น ๆ ที่ต้องการเข้าร่วมคลัสเตอร์ ต้องระบุที่อยู่ IP ของผู้จัดการพร้อมกับแฟล็ก ด้านล่างนี้คือตัวอย่างภาพหน้าจอ

คำสั่งเริ่มต้นนักเทียบท่า - ฝูงนักเทียบท่า - edureka

เมื่อเริ่มต้นคลัสเตอร์ Swarm โทเค็นจะถูกสร้างขึ้นที่ส่วนท้ายของผู้จัดการ โหนดอื่นต้องใช้โทเค็นนี้เพื่อเข้าร่วมคลัสเตอร์ swarm

มันเป็นยังไงกันแน่? คัดลอกโทเค็นทั้งหมดที่สร้างขึ้นที่ Docker Engine ของผู้จัดการวางไว้ที่ Docker Engine ของโหนดแล้วดำเนินการ ส่วนที่ไฮไลต์ของภาพหน้าจอด้านบนคือโทเค็น เมื่อโทเค็นถูกเรียกใช้ที่โหนดของผู้ปฏิบัติงานจะมีลักษณะเหมือนภาพหน้าจอด้านล่าง

โหนดใด ๆ ที่เข้าร่วมคลัสเตอร์สามารถเลื่อนระดับเป็นผู้จัดการได้ในภายหลัง ในกรณีที่คุณต้องการให้ Docker Engine เข้าร่วมเป็นผู้จัดการให้ดำเนินการตามคำสั่งด้านล่างที่ส่วนท้ายของผู้จัดการ:

$ docker swarm join-token manager

และในเวลาต่อมาหากคุณต้องการให้โทเค็นสำหรับโหนดเข้าร่วมคลัสเตอร์ให้รันคำสั่งด้านล่าง:

$ docker swarm โหนด join-token

ดำเนินการต่อโทเค็นในทุกโหนดที่คุณต้องการเพื่อเข้าร่วมคลัสเตอร์ เมื่อเสร็จแล้วคุณสามารถรันคำสั่งรายการโหนดนักเทียบท่าเพื่อตรวจสอบจำนวนโหนดที่เข้าร่วมคลัสเตอร์พร้อมกับสถานะ คำสั่งคือ:

$ docker node ls

ภาพหน้าจออยู่ด้านล่าง:

การสร้าง Docker Image สำหรับ Angular App

หากทุกอย่างเรียบร้อยเราสามารถเริ่มบริการ Swarm ได้หากมีการสร้าง Docker Image อิมเมจ Docker สามารถสร้างได้จาก Dockerfile Dockerfile ที่ใช้สร้างแอปพลิเคชันอยู่ด้านล่าง:

จากโหนด: 6 RUN mkdir -p / usr / src / app WORKDIR / usr / src / app COPY package.json / usr / src / app RUN npm cache clean RUN npm install COPY / usr / src / แอป EXPOSE 4200 CMD ['npm', 'start']

Dockerfile ใช้เพื่อดำเนินการชุดคำสั่งร่วมกันสำหรับการสร้างอิมเมจ Docker แบบกำหนดเองจากอิมเมจพื้นฐาน อย่างที่คุณเห็นภาพพื้นฐานที่ฉันใช้คือ 'Node: 6' NodeJS คืออิมเมจ I จาก Docker Hub ซึ่งติดแท็กด้วยเวอร์ชัน 6

แฟกทอเรียลของจาวาจำนวนหนึ่ง

จากนั้นฉันกำลังสร้างไดเร็กทอรี Docker ใหม่ภายในคอนเทนเนอร์และทำให้เป็นไดเร็กทอรีการทำงานภายในคอนเทนเนอร์ของฉัน

ฉันกำลังคัดลอกไฟล์ 'package.json' จากเครื่องในระบบของฉันไปยังไดเรกทอรีการทำงานของคอนเทนเนอร์ จากนั้นฉันระบุคำสั่ง 'RUN npm cache clean' และ 'RUN npm install' npm ติดตั้ง คำสั่งดาวน์โหลดเวอร์ชันของการอ้างอิงที่กล่าวถึงในไฟล์ package.json

จากนั้นฉันคัดลอกรหัสโครงการทั้งหมดจากเครื่องท้องถิ่นไปยังคอนเทนเนอร์โดยเปิดเผยหมายเลขพอร์ต 4200 สำหรับการเข้าถึงแอปพลิเคชัน Angular บนเบราว์เซอร์และในที่สุดฉันก็ระบุคำสั่งเริ่มต้น npm ที่บรรจุแอปพลิเคชัน

ตอนนี้ในการสร้างอิมเมจ Docker ตาม Dockerfile นี้ให้รันคำสั่งด้านล่าง:

$ docker สร้าง -t angular-image

บันทึก: ต้องสร้าง Docker Images ในโหนดทั้งหมดในคลัสเตอร์ หากไม่มีคอนเทนเนอร์นี้จะไม่สามารถหมุนคอนเทนเนอร์ในเอ็นจิ้น Docker อื่นได้

การเริ่มบริการ Docker Swarm

เนื่องจาก Docker Image ของเราถูกสร้างขึ้นเราจึงสามารถหมุนคอนเทนเนอร์ออกจากอิมเมจนี้ได้ แต่เราจะทำสิ่งที่ดีกว่า: สร้างบริการ Docker Swarm จากมัน คำสั่งในการสร้างบริการฝูงคือ:

บริการ $ docker สร้าง - ชื่อ 'Angular-App-Container' -p 4200: 4200 angular-image

ที่นี่แฟล็ก 'name' ใช้เพื่อตั้งชื่อให้กับบริการของฉันและใช้แฟล็ก 'p' เพื่อแสดงพอร์ตคอนเทนเนอร์ไปยังพอร์ตโฮสต์ ในไฟล์ package.json ฉันได้ระบุพอร์ตคอนเทนเนอร์ที่ควรโฮสต์แอป Angular และ 4200 ในคำสั่งนี้ช่วยแมปพอร์ต 4200 ของคอนเทนเนอร์กับพอร์ต 4200 ของโฮสต์ 'angular-image' คือชื่อของรูปภาพที่ฉันสร้างไว้ก่อนหน้านี้

จำไว้ : เมื่อเราสร้างบริการสามารถโฮสต์บน Docker Engine ใดก็ได้ในคลัสเตอร์ ผู้จัดการฝูงจะตัดสินใจว่าจะจัดที่ใด แต่ไม่ว่าจะโฮสต์อยู่ในโหนดใดแอปพลิเคชันสามารถเข้าถึงได้บน localhost: 4200 จากโหนดใด ๆ ที่เชื่อมต่อในคลัสเตอร์

เป็นไปได้อย่างไร? เนื่องจาก Swarm ภายในจะเปิดเผยหมายเลขพอร์ตที่ทุกโหนดอื่น ๆ ในคลัสเตอร์สามารถเข้าถึงได้ภายใน นั่นหมายความว่าหมายเลขพอร์ต 4200 บนโหนด / ตัวจัดการใด ๆ ในคลัสเตอร์จะแสดงแอปพลิเคชัน Angular

ตอนนี้เป็นอย่างไร คอนเทนเนอร์ใช้งานอยู่หรือไม่

คุณสามารถตรวจสอบได้ว่าเซอร์วิสนั้นเป็นคอนเทนเนอร์หรือไม่โดยรันคำสั่ง docker service list แต่อาจใช้เวลาสักครู่ในการทำให้คอนเทนเนอร์ใช้งานได้ ด้านล่างนี้คือคำสั่ง:

$ docker service ls

คำสั่งนี้จะแสดงรายการบริการทั้งหมดที่จัดการโดยคลัสเตอร์ Swarm ในกรณีของเราควรแสดงคอนเทนเนอร์ที่ใช้งานอยู่หนึ่งคอนเทนเนอร์ ดูภาพหน้าจอด้านล่างสำหรับการอ้างอิง

ที่นี่“ REPLICAS = 1/1” ระบุว่ามี 'บริการ' รายการเดียวของคอนเทนเนอร์นั้นในคลัสเตอร์ และ“ MODE = ถูกจำลองแบบ” แสดงว่าบริการถูกจำลองแบบบนโหนดทั้งหมดในคลัสเตอร์

ตอนนี้เพื่อระบุว่าโหนด / ผู้จัดการแอปใดโฮสต์อยู่เราสามารถเรียกใช้คำสั่ง ps บริการ docker ตามด้วยชื่อคอนเทนเนอร์ คำสั่งคือ:

บริการ $ docker ps Angular-App-Container

ภาพหน้าจอเหมือนกันอยู่ด้านล่าง

สิ่งนี้กล่าวถึงรายละเอียดเกี่ยวกับโหนดที่โฮสต์แอปพลิเคชันพร้อมกับคำสั่งที่ใช้ในการเริ่มบริการ

คำสั่ง 'docker ps' จะแสดงรายละเอียดเกี่ยวกับคอนเทนเนอร์ที่ใช้งานอยู่ คำสั่งคือ:

$ นักเทียบท่า ps

ดูภาพหน้าจอด้านล่างสำหรับการอ้างอิง

แต่คำสั่งนี้จะใช้ได้เฉพาะกับตัวจัดการคลัสเตอร์และโหนดที่โฮสต์บริการจริงๆ

ในการตรวจสอบจำนวนโหนดที่กำลังทำงานให้รันคำสั่งรายการโหนด คำสั่งคือ:

$ docker node ls

ในการตรวจสอบคอนเทนเนอร์ที่ทำงานในโฮสต์เฉพาะให้รันคำสั่ง node ps คำสั่งคือ:

$ docker node ps

หากคุณจำได้ฉันได้กล่าวไว้ก่อนหน้านี้ว่าบริการกำลังทำงานในโหมดจำลอง ซึ่งหมายความว่าบริการถูกจำลองแบบในทุกโหนดในคลัสเตอร์ คุณคิดว่ามีทางเลือกอื่นไหม?

อย่างแน่นอน! มีสิ่งที่เรียกว่า Global MODE ในโหมดนี้มีบริการของคอนเทนเนอร์นี้ที่ทำงานที่ทุก ๆ ตัว / ผู้จัดการในคลัสเตอร์ อย่าลืมหยุดบริการ / คอนเทนเนอร์ปัจจุบันก่อนที่จะปั่นชุดภาชนะอื่น

คำสั่งคือ:

$ docker service rm Angular-App-Container

คำสั่งในการหมุนคอนเทนเนอร์ในโหมดโกลบอลคือ:

บริการ $ docker สร้าง - ชื่อ 'Angular-App-Container' -p 4200: 4200 - โหมด global angular-image

สิ่งนี้จะสร้าง 3 บริการบน 3 โหนดในคลัสเตอร์ของเรา คุณสามารถตรวจสอบได้โดยรันคำสั่ง docker service list ภาพหน้าจอด้านล่างนี้

เมื่อเรียกใช้คำสั่ง ps บริการ docker คุณจะเห็นสิ่งนี้:

อย่างที่คุณเห็นมันบอกว่าโหมดถูกจำลองแบบและแบบจำลองของคอนเทนเนอร์นี้คือ 3 ตอนนี้ส่วนที่ดีที่สุดของบล็อกนี้มาถึงแล้ว

หากต้องการให้บริการจำลอง 2 รายการทำงานระหว่างคอนเทนเนอร์ทั้งสามเราสามารถใช้แฟล็กจำลองได้ ดูคำสั่งด้านล่าง:

$ docker service create --name 'Angular-App-Container' -p 4200: 4200 --replicas = 2 angular-image

คุณจะสังเกตเห็นว่าบริการทั้ง 2 นี้มีการโหลดบาลานซ์ระหว่างโหนดทั้งสามในคลัสเตอร์ รันคำสั่งกระบวนการบริการนักเทียบท่าเพื่อตรวจสอบว่าโหนดใดที่คอนเทนเนอร์ทำงานอยู่ ดูภาพหน้าจอด้านล่างสำหรับการอ้างอิง คอนเทนเนอร์ทำงานอยู่ในโหนดผู้จัดการหนึ่งโหนดและโหนดของผู้ปฏิบัติงานหนึ่งโหนด

จากโหนด Worker คุณสามารถตรวจสอบว่าคอนเทนเนอร์กำลังทำงานอยู่โดยเรียกใช้คำสั่ง 'docker ps'

Docker Swarm สำหรับความพร้อมใช้งานสูง

ในตอนนี้เพื่อตรวจสอบว่ามีความพร้อมใช้งานสูงในคลัสเตอร์ของเราเราจำเป็นต้องพบกับสถานการณ์ที่หนึ่งในโหนดหยุดทำงานและโหนดอื่น ๆ ในคลัสเตอร์ประกอบขึ้นด้วย เราสามารถสร้างสถานการณ์ดังกล่าวได้โดยการหยุดคอนเทนเนอร์จากโหนดใดโหนดหนึ่งด้วยตนเองโดยใช้คำสั่งนี้:

$ docker หยุด Angular-App-Container

รันคำสั่งด้านบนบนโหนด: Worker-1 ที่คอนเทนเนอร์กำลังทำงานจากผู้จัดการให้รันคำสั่ง:

บริการ $ docker ps Angular-App-Container

ตอนนี้คุณจะสังเกตเห็นว่าคอนเทนเนอร์กำลังทำงานในโหนด: Worker-2 และ Manager อย่างไรก็ตามมันถูกปิดจากโหนด: Worker-1 สิ่งเดียวกันนี้สามารถมองเห็นได้จากภาพหน้าจอด้านล่าง

นี่คือวิธีการ ความพร้อมใช้งานสูงของ Docker จะประสบความสำเร็จ. ผมn แม้ว่าคอนเทนเนอร์จะไม่ได้ใช้งานใน Worker-1 แต่แอปพลิเคชันสามารถแสดงผลได้ที่พอร์ตหมายเลข 4200 บนโหนดผู้ปฏิบัติงานนั้น เนื่องจากมีการเชื่อมต่อภายในกับโหนดอื่น ๆ ในคลัสเตอร์และสามารถแสดงแอปพลิเคชันในเบราว์เซอร์ได้

ความพร้อมใช้งานสูงหลังจากขยายบริการ

ไม่ว่าจะอยู่ในโหมดจำลองหรือโหมดทั่วโลกเราสามารถขยายจำนวนบริการที่ทำงานในคลัสเตอร์ของเราได้ และแม้จะขยายขนาดไปแล้วเราก็ยังสามารถรักษาความพร้อมใช้งานได้สูง สุดยอดไม่ใช่เหรอ

แต่กลับไปที่ประเด็นของเราให้เราดูว่าการขยายจำนวนบริการในคลัสเตอร์ของเรานั้นง่ายเพียงใด สมมติว่าเรามีแบบจำลอง 2 หรือ 3 รายการในคลัสเตอร์ของเราให้เราขยายบริการเป็น 5 โดยเรียกใช้คำสั่งเดียว คำสั่งคือ:

$ docker service scale Angular-App-Container = 5

ภาพหน้าจอด้านล่างนี้

เมื่อเรียกใช้คำสั่งรายการบริการนักเทียบท่าคุณจะสังเกตได้ว่าตอนนี้จำนวนของแบบจำลองคือ 5 และด้วยการเรียกใช้คำสั่ง ps บริการนักเทียบท่าพร้อมกับชื่อบริการคุณจะเห็นได้ว่าบริการ 5 รายการมีการโหลดบาลานซ์และกระจายบน 3 โหนดอย่างไร . คำสั่งคือ:

บริการ $ docker ls $ docker service ps Angular-App-Container

และสุดท้ายในการตั้งค่า Docker Swarm หากคุณไม่ต้องการให้ผู้จัดการของคุณมีส่วนร่วมในการดำเนินการและเก็บไว้เพื่อจัดการกระบวนการเท่านั้นเราสามารถระบายผู้จัดการไม่ให้โฮสต์แอปพลิเคชันใด ๆ เพราะนี่คือวิธีการทำงานของโลกใช่หรือไม่ ผู้จัดการมีไว้สำหรับจัดการคนงานอื่นเท่านั้น อย่างไรก็ตามคำสั่งที่ต้องทำคือ:

$ docker node update - พร้อมใช้งาน Drain Manager-1

คุณสามารถตรวจสอบได้ว่าขณะนี้ผู้จัดการกำลังมีส่วนร่วมในคลัสเตอร์หรือไม่โดยการรันคำสั่ง docker node list และคำสั่ง ps บริการ docker:

$ docker node ls $ docker service ps Angular-App-Container

ตอนนี้คุณสามารถสังเกตได้ว่าบริการคอนเทนเนอร์ถูกแบ่งระหว่างโหนดของผู้ปฏิบัติงานและโหนดผู้จัดการได้ถูกระบายออกจากการจัดเก็บบริการใด ๆ ภาพหน้าจออยู่ด้านล่าง

ดังนั้นจึงยุติบล็อกนี้ใน Docker Swarm ฉันหวังว่าบล็อกนี้จะอธิบายว่าการใช้โหมด Swarm มีความสำคัญเพียงใดเพื่อให้ได้ความพร้อมใช้งานสูง คอยติดตามบล็อกเพิ่มเติมในซีรี่ส์การสอน Docker นี้

คุณสามารถดูวิดีโอด้านล่างเพื่อทำความเข้าใจว่า Docker Swarm ทำงานอย่างไร แนวคิดทั้งหมดที่อธิบายข้างต้นได้กล่าวถึงในวิดีโอ

Docker Swarm สำหรับความพร้อมใช้งานสูง | บทช่วยสอนนักเทียบท่า | สอน DevOps

ตอนนี้คุณได้เรียนรู้เกี่ยวกับ Docker แล้วลองดูไฟล์ โดย Edureka บริษัท การเรียนรู้ออนไลน์ที่เชื่อถือได้ซึ่งมีเครือข่ายผู้เรียนที่พึงพอใจมากกว่า 250,000 คนกระจายอยู่ทั่วโลก หลักสูตรการฝึกอบรม Edureka Docker Certification นี้ช่วยให้ผู้เรียนมีความเชี่ยวชาญในการใช้ Docker และเชี่ยวชาญ

มีคำถามสำหรับเรา? โปรดระบุไว้ในส่วนความคิดเห็นแล้วเราจะติดต่อกลับไป