ถ่ายโอนภาพนักเทียบท่าผ่านการเชื่อมต่อที่ไม่น่าเชื่อถือ


1

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

เซิร์ฟเวอร์เหล่านี้สามารถเข้าถึงได้ผ่านทางช่องสัญญาณย้อนกลับเท่านั้นและการเชื่อมต่อเครือข่ายจะลดลงบ่อยมาก แบนด์วิดท์โดยทั่วไปก็ค่อนข้างต่ำ (บางครั้งเพียง ~ 50kbps หรือน้อยกว่า)

AFAIK ฉันมีสองตัวเลือกในการถ่ายโอนภาพแต่ละรายการมีปัญหา

ใช้ที่เก็บนักเทียบท่าและตัวดึงนักเทียบท่า:

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

การใช้ docker save, rsync และ load docker:

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

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


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

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

มีสิ่งต่าง ๆ เช่น ResinOS ถึงแม้ว่าฉันไม่แน่ใจว่าจะช่วยได้มากแค่ไหนเพราะมันยังคงทำการถ่ายโอนภาพ Docker ปกติ afaik แต่อาจมีข้อผิดพลาดในตัว
nijave

คำตอบ:


0

ความคิดบางอย่างเข้ามาในใจ

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

  2. คุณสามารถแท็กเลเยอร์ได้มากกว่าดังนั้นแทนที่จะมี 1 ภาพนักเทียบท่าที่มี 10 ชั้นคุณมีภาพนักเทียบท่า 5 ภาพที่มี 2 ชั้น คุณสามารถแบ่งออกเป็นหลาย Dockerfiles หรือเลเยอร์แท็กหลังจากข้อเท็จจริง ("แท็กชั้นเลเยอร์แฮชแท็กชื่อ" สำหรับรายละเอียด https://gist.github.com/dasgoll/476ecc7a057ac885f0be )

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

  4. untar รูปภาพที่ถูกส่งถ่ายโอนเฉพาะเลเยอร์ใหม่และ re-tar โดยรวมเลเยอร์ใหม่กับเลเยอร์ที่แคชไว้ (เมื่อคุณส่งออกรูปภาพเป็นเพียง tar กับ 1 tar ต่อเลเยอร์)

  5. อย่าใช้นักเทียบท่าสำหรับการสร้าง - เพียงแค่รวบรวมและเรียกใช้ ด้วยสิ่งนี้คุณเพียงแค่ถ่ายโอนไฟล์รูทไป (อาจเป็นไฟล์ปกติและปล่อยให้ rsync จัดการกับการบีบอัด) จากนั้นทาร์และทำไฟล์ธรรมดา Dockerfile ที่ทำ ADD rootfs.tar / และมีคำสั่งเรียกใช้ของคุณ สิ่งนี้จะทำให้แน่ใจได้ว่าไม่มีสิ่งใดถูกคัดลอกเกินความจำเป็น

คุณสามารถรวมวิธีการเหล่านี้เข้ากับบางสิ่งเช่น Bittorrent เพื่อแจกจ่ายไฟล์


ฉันดูที่ตัวเลือกเหล่านี้บางส่วน แต่นักเทียบท่าเลือกใช้เลเยอร์ซ้ำมากดูปัญหาที่เปิดอยู่นี้: github.com/moby/moby/issues/23684 . คำแนะนำของคุณบางอย่างน่าสนใจและฉันก็ยังไม่คิดถึงพวกเขาดังนั้นฉันจะลองต่อไปขอบคุณ!
Ozymandias
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.