‫อัปเดตบริการ คุณอาจสันนิษฐานได้ว่ามีบางวิธีในการอัปเดตบริการของคุณแม้ว่าเรายังไม่ได้มุ่งเน้น
‫เรามาคุยกันเรื่องนี้เพราะการอัพเดทมีหลายสิ่งหลายอย่างเกิดขึ้นภายใต้หน้ากาก ฟังก์ชั่นการอัพเดทของ Swarm
‫นั้นมีศูนย์กลางอยู่ที่แพทเทิร์นการอัพเดตสำหรับเรพลิคาของคุณ
‫ซึ่งหมายความว่าหากคุณมีบริการที่มีแบบจำลองมากกว่าหนึ่งรายการและหวังว่าคุณจะทำแบบนั้นมันจะม้วนผ่านพวกมันเป็นค่าเริ่มต้นครั้งละหนึ่งอัปเดตแต่ละคอนเทนเนอร์โดยแทนที่มันด้วยการตั้งค่าใหม่ที่คุณกำลังทำ
‫คำสั่ง
‫ผู้คนจำนวนมากจะบอกว่าผู้จัดทำเครื่องป้องกันการหยุดทำงานในการอัปเดต แต่ฉันจะไม่บอกว่านี่เป็นการป้องกันการหยุดทำงาน
‫ฉันจะบอกว่ามัน จำกัด การหยุดทำงาน เพราะการป้องกันการหยุดทำงานในระบบใด ๆ เป็นหน้าที่ของการทดสอบ
‫คุณต้องเริ่มต้นทดสอบวิธีการอัพเดตและการพิจารณาของคุณจริงๆมันมีผลกระทบต่อผู้ใช้ของฉันหรือไม่
‫การอัพเดตฐานข้อมูลส่งผลกระทบต่อเว็บแอ็พพลิเคชันของฉันหรือไม่? มันอาจจะเป็น
‫แอปพลิเคชั่นแต่ละตัวที่คุณมีบริการกำลังจะอัปเดตและส่งผลกระทบต่อสิ่งอื่นรอบตัวมันแตกต่างกัน
‫นั่นไม่ใช่หน้าที่ของนักประพันธ์
‫orchestrator ไม่สามารถระบุได้ว่าอันนี้เป็นโปรโตคอลฐานข้อมูลและอันนี้เป็นโปรโตคอลแอปพลิเคชัน REST ที่ง่าย
‫ดังนั้นสิ่งเหล่านี้จะแตกต่างและซับซ้อนซึ่งคุณต้องจัดการ
‫ในกรณีของการอัปเดตบริการหากเป็นเพียง REST
‫API หรือส่วนหน้าเว็บที่ไม่ได้ทำอะไรที่หรูหราเช่นเว็บซ็อกเก็ตหรือการลงคะแนนแบบยาวหากเป็นสิ่งที่ง่ายมากเช่นนั้นหรือเว็บไซต์คงที่
‫มันจะไม่เป็นปัญหา
‫แต่บริการอื่น ๆ เช่นฐานข้อมูลหรือที่เก็บข้อมูลถาวรหรือสิ่งใดก็ตามที่ต้องมีการเชื่อมต่อแบบถาวร ...
‫สิ่งเหล่านี้จะเป็นสิ่งที่ท้าทายเสมอไม่ว่าคุณจะพยายามอัพเดทอะไร
‫ดังนั้นทดสอบก่อนและทดสอบบ่อย
‫อย่างที่ฉันพูดไปก่อนหน้านี้มันจะแทนที่คอนเทนเนอร์ในการอัปเดตส่วนใหญ่อย่างแน่นอน
‫หากคุณไม่ได้อัปเดตป้ายกำกับหรือข้อมูลเมตาอื่น
‫ๆ ด้วยบริการนี้จะเป็นการหมุนเวียนและเปลี่ยนคอนเทนเนอร์แต่ละรายการด้วยใหม่ทั้งหมด
‫เตรียมพร้อมสำหรับสิ่งนั้น มันมีตัวเลือกมากมาย อันที่จริงฉันนับครั้งสุดท้ายมีอย่างน้อย
‫77 ตัวเลือกสำหรับคำสั่ง update แต่ทุกอย่างที่คุณต้องการสามารถปรับแต่งได้
‫ตัวเลือกมากมายในคำสั่ง update จริง ๆ แล้วสร้างตัวเลือกที่มี -rm
‫และ -add ที่ท้ายของมัน เพราะถ้ามันเป็นตัวเลือกที่สามารถใช้สำหรับค่าหลาย
‫ๆ ค่าสมมติว่าพอร์ตเพื่อเผยแพร่หรือตัวแปรสภาพแวดล้อมคุณสามารถใช้หลาย ๆ ค่าได้
‫ขวา?
‫ดังนั้นคุณจะต้องสามารถบอกคำสั่ง update ที่คุณกำลังเพิ่มและสิ่งที่คุณกำลังลบ
‫เราจะเห็นคนเหล่านั้นในไม่กี่นาที
‫ซึ่งรวมถึงตัวเลือกการย้อนกลับและการตรวจสุขภาพ
‫คุณควรดูตัวเลือกต่าง ๆ
‫เหล่านั้นและดูว่าค่าเริ่มต้นนั้นไม่เหมาะกับแอปพลิเคชั่นของคุณหรือไม่และทดสอบการตั้งค่าที่แตกต่างกัน
‫คุณจะเห็นว่าเรามีตัวเลือกการปรับขนาดและการย้อนกลับที่นี่ซึ่งเป็นคำสั่งของพวกเขาในขณะนี้
‫พวกเขาเคยเป็นตัวเลือกที่คุณต้องระบุด้วย - ย้อนกลับหรือ
‫- ขนาด แต่ผู้คนจำนวนมากใช้สิ่งเหล่านี้บ่อยครั้งที่ Docker กำลังทำให้พวกเขาเป็นพลเมืองชั้นหนึ่งในบรรทัดคำสั่ง
‫พวกเขาอาจจะเพิ่มมากขึ้นในอนาคต
‫สุดท้ายก่อนที่เราจะดูตัวอย่างถ้าคุณกำลังทำสแต็คสแต็คที่ปรับใช้กับสแต็กเดียวกันเป็นการอัปเดต
‫ในความเป็นจริงไม่มีตัวเลือกแยกต่างหากสำหรับการอัพเดตสแต็ก
‫คุณเพียงปรับใช้สแต็กด้วยไฟล์เดียวกับที่ได้รับการแก้ไข
‫จากนั้นมันจะทำงานกับคำสั่งบริการและเครือข่ายและทุกสิ่งอื่น ๆ มันจะทำงานร่วมกับพวกเขาเพื่อให้แน่ใจว่าการเปลี่ยนแปลงใด
‫ๆ ที่จำเป็นที่พวกเขาได้รับการประยุกต์ใช้
‫ลองดูตัวอย่างที่รวดเร็วจากนั้นเราจะไปที่บรรทัดคำสั่ง
‫นี่อาจเป็นตัวอย่างทั่วไปที่คุณจะใช้ซึ่งก็คือการเปลี่ยนภาพของบริการ
‫ทุกครั้งที่คุณอัปเดตแอปและสร้างภาพใหม่คุณจะต้องทำคำสั่งอัปเดตบริการพร้อมชื่อภาพแล้วตามด้วยชื่อบริการ
‫ดังนั้นในกรณีนี้ฉันอาจมีแอปพลิเคชันของฉันที่มีแท็ก 1 2 0
‫และในกรณีนี้ฉันกำลังใช้ 1 2
‫1
‫ภาพและบริการจะพิจารณาใช่มั้ยนั่นเป็นภาพที่แตกต่างจากที่ฉันใช้ในบริการของฉัน ในอันถัดไปนี้เราจะแสดงวิธีที่คุณสามารถทำหลาย ๆ อย่างพร้อมกันในคำสั่งอัพเดตเดียว
‫คุณสามารถเพิ่มตัวแปรสภาพแวดล้อมด้วย env-add จากนั้นคุณสามารถลบพอร์ตได้ด้วย publish -rm
‫เราสามารถเพิ่มและลบตัวแปรสภาพแวดล้อมและเผยแพร่พอร์ตในคำสั่ง update เดียวกันได้มากเท่าที่เราต้องการ
‫ในอันสุดท้ายนี้แสดงให้เห็นว่าเราสามารถใช้คำสั่งสเกลและการย้อนกลับใหม่เหล่านี้ในบริการหลายอย่างในเวลาเดียวกันได้อย่างไร ซึ่งเป็นข้อได้เปรียบอย่างหนึ่งของการใช้พวกเขาเหนือคำสั่ง
‫update คือพวกเขาสามารถนำไปใช้กับหลายบริการ
‫ในกรณีนี้จริง ๆ แล้วฉันกำลังจะเปลี่ยนจำนวนแบบจำลองของเว็บและบริการ API
‫ในเวลาเดียวกัน
‫อย่างที่ฉันพูดไปสักพักแล้วในการอัปเดต Swarm คุณไม่มีคำสั่งการปรับใช้ที่แตกต่างกัน
‫มันเป็นเพียงการปรับใช้สแต็คนักเทียบท่าเดียวกันกับไฟล์ที่คุณแก้ไขและเป็นหน้าที่ที่จะต้องทำงานร่วมกับส่วนอื่น ๆ ทั้งหมดของ
‫API
‫เพื่อตรวจสอบว่ามีการเปลี่ยนแปลงใด ๆ ที่จำเป็นหรือไม่
‫เอาล่ะ เริ่มจากการสร้างบริการเพื่อที่เราจะสามารถจัดการกับคำสั่งอัพเดทได้
‫บริการตัวสร้างสร้าง -p 8088 80 ชื่อเว็บและเราจะใช้ Nginx
‫และเราจะระบุเวอร์ชันที่เราควรทำในการผลิตเสมอ
‫เป็นเรื่องที่ดีตอนนี้ที่จริงเรามีในช่วงครึ่งหลังของปี 2560
‫ตัวเลือกการแยกกับบริการของเราสร้างและอัปเดตคำสั่งเราสามารถเห็นสิ่งนี้เกิดขึ้นพร้อมกันแบบเรียลไทม์
‫ดังนั้นสิ่งนี้จะดีสำหรับคำสั่งการอัปเดตเพื่อดูว่าการอัปเดตจริงผ่านทางบรรทัดคำสั่ง
‫เอาล่ะ ตอนนี้ถ้าเราทำบริการนักเทียบท่าเราจะเห็นว่าบริการของเรากำลังทำงานอยู่และมันมีแบบจำลอง 1
‫ใน 1 ดังนั้นจึงเป็นเรื่องดี
‫ทีนี้มาขยายบริการของเราเพื่อเราจะได้มีแบบจำลองเพิ่มเติมให้ทำงานด้วย ขนาดบริการนักเทียบท่า Web =
‫5 และคุณเพิ่งเห็นว่าหนึ่งในนั้นกำลังทำงานอยู่และอีก 4
‫คนต้องเริ่ม
‫มันผ่านไปแล้วอย่างรวดเร็วเพราะฉันได้ดาวน์โหลดภาพมาแล้ว แต่คุณอาจใช้เวลาสักครู่ในขณะที่พวกเขาอยู่ในสถานะรอการดาวน์โหลดภาพบนโหนอื่น ๆ
‫เอาล่ะ
‫มาทำการอัพเดทกันโดยเปลี่ยนภาพของ Nginx นั้น
‫คุณจะเห็นที่นี่ว่าฉันได้เลือกภาพเก่า
‫ทีนี้นักเทียบท่าไม่สนใจว่าภาพนั้นเป็นอย่างไร
‫อาจเป็นแอปพลิเคชันที่แตกต่างอย่างสิ้นเชิงสำหรับทุกสิ่งที่ใส่ใจ
‫เพิ่งรู้ว่าในบริการนี้ฉันกำลังเปลี่ยนเป็นภาพอื่น
‫จำไว้ว่าโดยค่าเริ่มต้นมันจะผ่านที่นี่หนึ่งครั้ง
‫มันจะลบมันออกสร้างครั้งใหม่และเมื่อมันดีไปแล้วและมันดูมีสุขภาพดีมันจะเริ่มในหน้าถัดไป
‫ในตัวอย่างถัดไปเราจะเปลี่ยนพอร์ตที่เผยแพร่
‫แต่คุณไม่สามารถเปลี่ยนพอร์ตได้
‫คุณต้องเพิ่มและลบมันในเวลาเดียวกัน
‫ดังนั้นในกรณีนี้เพราะเราตีพิมพ์ครั้งแรกด้วย 8088 เราต้องทำการอัพเดทบริการนักเทียบท่าเผยแพร่ rm
‫8088 ฉันไม่จำเป็นต้องระบุค่า ฉันแค่ต้องระบุกุญแจ
‫จากนั้นเราจะเผยแพร่ใหม่ 9090 จากนั้นค่าซึ่งในกรณีนี้คือ 80
‫คุณจะเห็นว่ามันจะทำกระบวนการอัพเดตเช่นเดียวกับเมื่อก่อน
‫ตัวอย่างสุดท้ายที่ฉันต้องการพูดถึงคือเคล็ดลับ เพราะคุณมักจะมีความท้าทายกับสิ่งที่เรียกว่าการปรับสมดุล
‫หรือถ้าคุณเปลี่ยนจำนวนโหนดหรือถ้าคุณย้ายสิ่งต่าง ๆ มากมายถ้าคุณมีคอนเทนเนอร์จำนวนมากในฝูงคุณอาจพบว่าพวกเขาไม่ได้คืนดีกันจริง ๆ
‫คุณอาจมีบางโหนดที่ค่อนข้างเบากับจำนวนคอนเทนเนอร์ที่ใช้งานและโหนดอื่นที่มีจำนวนมาก
‫หากคุณมีการเปลี่ยนแปลงหลายอย่าง Swarm จะไม่ย้ายสิ่งต่าง ๆ เพื่อให้ทุกอย่างสมดุลในแง่ของจำนวนทรัพยากรที่ใช้
‫แต่สิ่งที่คุณสามารถทำได้คือคุณสามารถบังคับให้อัปเดตบริการได้โดยไม่ต้องเปลี่ยนอะไรในบริการนั้น
‫จากนั้นมันจะออกงานใหม่และในกรณีนั้นมันจะเลือกโหนดที่ใช้น้อยที่สุดซึ่งเป็นรูปแบบของการปรับสมดุล
‫หลายครั้งที่มีฝูงเล็ก ๆ
‫เมื่อฉันย้ายอะไรบางอย่างที่ใหญ่หรือเพิ่มโหนดจำนวนมากฉันก็มีเซิร์ฟเวอร์ว่างเปล่าจำนวนมากที่ไม่ทำอะไรเลยและฉันต้องทำงานให้พวกเขา
‫ดังนั้นสิ่งที่ฉันจะทำคือใช้หนึ่งหรือสองของบริการของฉันและฉันจะทำการปรับปรุงบริการนักเทียบท่า -
‫แรงและในกรณีนี้มันจะม้วนผ่านและแทนที่งานทั้งหมด
‫แน่นอนว่ามันจะใช้ค่าเริ่มต้นของการค้นหาโหนดที่มีจำนวนคอนเทนเนอร์น้อยที่สุดและใช้ทรัพยากรน้อยที่สุด
‫นั่นเป็นกลอุบายที่จะทำให้การทำงานบนโหนดของคุณไม่สม่ำเสมอ
‫อย่าลืมล้างข้อมูลด้วยการลบบริการที่เราสร้างในการบรรยายนี้