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

คลัสเตอร์ Vagrant &CoreOS และเครือข่าย

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

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

การตั้งค่าโทเค็นการค้นหา

ไม่เหมือนครั้งที่แล้ว เมื่อฉันตั้งใจลองใช้ Vagrant บน Windows ผ่าน Powershell เพียงเพื่อให้ตัวอย่างที่สามารถทำได้หลายวิธี การออกกำลังกายในปัจจุบันของเราจะใช้ใน Linux, Xubuntu Vivid เพื่อให้แม่นยำยิ่งขึ้น

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

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

#cloud-config

คอร์:
ฯลฯ :
# สร้างโทเค็นใหม่สำหรับแต่ละคลัสเตอร์ที่ไม่ซ้ำกันจาก
https://discovery.etcd.io/new?size=3
# ระบุขนาดเริ่มต้นของคลัสเตอร์ของคุณด้วย ?size=X
# คำเตือน:แทนที่ทุกครั้งที่คุณ 'เร่ร่อนทำลาย'
การค้นพบ:https://discovery.etcd.io/

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

https://discovery.etcd.io/new?size=

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

https://discovery.etcd.io/21e4099c23b52a8403640c2d48cdca6f

เราจะเห็นว่าทำไมสิ่งนี้จึงสำคัญในภายหลัง

การตั้งค่าคลัสเตอร์

ส่วนที่สองคือการกำหนดจำนวนอินสแตนซ์ของ CoreOS ที่เราต้องการเรียกใช้เมื่อ Vagrant เริ่มทำงาน นี่คือการกำหนดค่าโดยรวมอย่างง่าย ต้องเพิ่มการเปลี่ยนแปลงลงในไฟล์ config.rb.sample ภายในไดเร็กทอรี Git ที่ลอกแบบมา และเปลี่ยนชื่อเป็น config.rb เราจะลองกับสี่อินสแตนซ์เพื่อให้ไม่ซ้ำใครและพิเศษ

# ขนาดของกลุ่ม CoreOS ที่สร้างโดย Vagrant
$num_instances=X

เริ่มคลัสเตอร์

ตอนนี้คุณสามารถเรียกใช้ Vagrant หากคุณได้โคลนที่เก็บออนไลน์ คุณจะมีไฟล์การกำหนดค่าเริ่มต้นของ Vagrant ในไดเร็กทอรีปัจจุบัน ดังนั้นหากคุณลอง vagrant init คุณน่าจะล้มเหลว:

คนพเนจร init
`Vagrantfile' มีอยู่แล้วในไดเร็กทอรีนี้ เอาออกก่อน
กำลังเรียกใช้ "คนจรจัด init"

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

พเนจรขึ้น
ผู้ให้บริการ 'virtualbox' ที่ได้รับการร้องขอให้สำรองเครื่อง
'core-01' กำลังรายงานว่าไม่สามารถใช้งานได้กับระบบนี้ เดอะ
เหตุผลแสดงไว้ด้านล่าง:

คนพเนจรตรวจไม่พบ VirtualBox! ตรวจสอบให้แน่ใจว่าได้ติดตั้ง VirtualBox อย่างถูกต้อง Vagrant ใช้ไบนารี 'VBoxManage' ที่มาพร้อมกับ VirtualBox และต้องการให้สิ่งนี้พร้อมใช้งานบน PATH หากมีการติดตั้ง VirtualBox โปรดค้นหาไบนารี 'VBoxManage' และเพิ่มไปยังตัวแปรสภาพแวดล้อม PATH

หากคุณทำส่วนนี้สำเร็จ Vagrant ควรเริ่มต้นและสร้างอินสแตนซ์ CoreOS ทีละรายการ การดำเนินการนี้อาจใช้เวลาสักครู่ และคุณจะต้องมีแบนด์วิธเครือข่ายที่ดีและหน่วยความจำเพียงพอเพื่อรองรับคลัสเตอร์ขนาดใหญ่

พเนจรขึ้น
นำเครื่อง 'core-01' ขึ้นกับผู้ให้บริการ 'virtualbox' ...
นำเครื่อง 'core-02' ขึ้นกับผู้ให้บริการ 'virtualbox' ...
นำเครื่อง 'core-03' ขึ้นกับผู้ให้บริการ 'virtualbox' ...
นำเครื่อง 'core-04' ขึ้นกับผู้ให้บริการ 'virtualbox' ...
==> core-01:ไม่พบกล่อง 'coreos-alpha' พยายามหาและติดตั้ง...
core-01:ผู้ให้บริการกล่อง:virtualbox
core-01:เวอร์ชันกล่อง:>=308.0.1

==> core-04:กำลังนำเข้ากล่องฐาน 'coreos-alpha'...
==> core-04:การจับคู่ที่อยู่ MAC สำหรับเครือข่าย NAT...
==> core-04:ตรวจสอบว่ากล่อง 'coreos-alpha' เป็นปัจจุบันหรือไม่...
==> core-04:การตั้งชื่อ VM:coreos-vagrant_core-04_1431799934824_55775
==> core-04:แก้ไขการชนกันของพอร์ตสำหรับ 22 => 2222 ตอนนี้อยู่ที่พอร์ต 2202
==> core-04:กำลังล้างอินเทอร์เฟซเครือข่ายที่ตั้งค่าไว้ก่อนหน้านี้...
==> core-04:กำลังเตรียมอินเทอร์เฟซเครือข่ายตามการกำหนดค่า...
core-04:อะแดปเตอร์ 1:nat
core-04:อะแดปเตอร์ 2:โฮสต์เท่านั้น
==> core-04:กำลังส่งต่อพอร์ต...
core-04:22 => 2202 (อะแดปเตอร์ 1)
==> core-04:กำลังเรียกใช้การปรับแต่ง VM 'พรีบูต' ...
==> core-04:กำลังบูท VM...
==> core-04:รอให้เครื่องบูต นี้อาจใช้เวลาไม่กี่นาที...
core-04:ที่อยู่ SSH:127.0.0.1:2202
core-04:ชื่อผู้ใช้ SSH:แกน
core-04:วิธีการรับรองความถูกต้อง SSH:รหัสส่วนตัว
core-04:คำเตือน:หมดเวลาการเชื่อมต่อ กำลังลองใหม่...
==> core-04:บูทเครื่องพร้อม!
==> core-04:การตั้งชื่อโฮสต์...
==> core-04:การกำหนดค่าและเปิดใช้งานอินเทอร์เฟซเครือข่าย...
==> core-04:กำลังเรียกใช้ตัวจัดเตรียม:ไฟล์...
==> core-04:กำลังเรียกใช้ตัวจัดเตรียม:เชลล์...
core-04:กำลังทำงาน:สคริปต์แบบอินไลน์

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

ระบบเครือข่าย

ตอนนี้มาถึงส่วนที่น่าสนใจจริงๆ เรามีเครื่องเสมือนสี่เครื่อง แต่เราจะเชื่อมต่อกับพวกเขาได้อย่างไร? เรามีภาวะที่กลืนไม่เข้าคายไม่ออกที่คล้ายกันเมื่อทดสอบ Docker แต่แล้วเราก็พบวิธีแก้ไข และที่นี่ใช้ตรรกะเดียวกัน

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

คนจรจัด ssh core-02 -- -A
จำเป็นต้องมีสภาพแวดล้อม Vagrant หรือเครื่องเป้าหมายเพื่อรันสิ่งนี้
สั่งการ. เรียกใช้ 'vagrant init' เพื่อสร้างสภาพแวดล้อม Vagrant ใหม่ หรือรับ ID ของเครื่องเป้าหมายจาก `vagrant global-status` เพื่อเรียกใช้คำสั่งนี้ ตัวเลือกสุดท้ายคือเปลี่ยนเป็นไดเร็กทอรีที่มี Vagrantfile แล้วลองอีกครั้ง

แต่ในไดเร็กทอรีที่ถูกต้อง ควรใช้งานได้ดี:

หากคุณเรียกใช้ ifconfig คุณจะสังเกตเห็นว่าเครื่องทั้งหมดของคุณควรจะมีที่อยู่ IP เดียวกัน และคุณไม่สามารถกำหนดเส้นทางระหว่างกันได้ ยิ่งไปกว่านั้น อินเตอร์เฟส VirtualBox ทำงานบนเซกเมนต์ 172.0.0.1 ดังนั้นสิ่งนี้ทำให้ยากขึ้นเล็กน้อย อีกครั้งคล้ายกับที่เรามีกับ Docker

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

เชื่อมต่อผ่าน localhost

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

ssh 127.0.0.1 -p 2202
ไม่สามารถสร้างความถูกต้องของโฮสต์ '[127.0.0.1]:2202 ([127.0.0.1]:2202)' ได้
ลายนิ้วมือของคีย์ ED25519 คือ 32:a0:57:58:b3:55:fc:03:c8:89:7d:7c:cc:6f:85:9d
คุณแน่ใจหรือไม่ว่าต้องการเชื่อมต่อต่อ (ใช่/ไม่ใช่)

เชื่อมต่อผ่านที่อยู่ IP ได้ทุกที่

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


สังเกตคีย์และค่าต่างๆ แต่ละรายการมีที่อยู่ IP เช่น 172.17.8.103 และคุณสามารถแยกวิเคราะห์ได้จากผลลัพธ์นี้ ยอดเยี่ยม. ตอนนี้เราทราบที่อยู่ภายในแล้ว และเราสามารถใช้ที่อยู่เหล่านี้เพื่อเชื่อมต่อกับลูกค้าของเราได้โดยตรง และที่สำคัญกว่านั้นคือ ช่วยให้พวกเขาสามารถสื่อสารกับเพื่อนร่วมงานได้

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

การส่งต่อพอร์ต

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

จำเป็นต้องมีการเปลี่ยนแปลงที่จำเป็นเป็นคำสั่งภายใน Vagrantfile คุณสามารถมีการกำหนดค่าหลายรายการสำหรับการตั้งค่าหลายรายการได้ เช่นเดียวกับ Dockerfiles ตัวอย่างเช่น การส่งต่อพอร์ต HTTPS จะเป็น:

config.vm.forward_port 443, <พอร์ตโฮสต์>

หากคุณติดตามบทความ Docker ของฉัน ทุกอย่างก็ง่ายมาก พอร์ตโฮสต์ พอร์ตไคลเอนต์ และบ๊อบเป็นอาของคุณ คุณมีการประกาศหลายรายการสำหรับแต่ละช่อง จากนั้น คุณยังสามารถกำหนดค่ากฎไฟร์วอลล์ได้ด้วยตนเอง หากคุณต้องการการควบคุมระบบของคุณอย่างสมบูรณ์และสมบูรณ์ ขอย้ำอีกครั้งว่านี่เป็นเพียงทีเซอร์ และเราจะใช้เวลากับสิ่งนี้ให้มากขึ้นในอนาคต

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

อ่านเพิ่มเติม

ของดีพิเศษจากโรงตีเหล็กของ Dedoimedo:

นี่คือคู่มือเริ่มต้นใช้งาน CoreOS ฉบับย่อ อาจจะหนักไปหน่อย

บทช่วยสอนสำหรับผู้ควบคุมซึ่งมีความสามารถค่อนข้างคล้ายกับ etcd

การปรับแต่งการกำหนดค่าแบบเคียงข้างกันของ KVM &VirtualBox

สรุป

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

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

อย่าลืมว่าฉันต้องทำทุกอย่าง ดังนั้นในอีกไม่กี่เดือนข้างหน้า เราจะสำรวจเกือบทุกอย่าง รวมถึงแต่ไม่จำกัดเพียง Fleet, Kubernets, Mesos, Etch และโปรเจ็กต์เจ๋งๆ อีกมากมาย นอกจากนี้เรายังจะผูก CoreOS และอื่น ๆ เข้ากับผู้ให้บริการระบบคลาวด์ เล่นซอกับระบบไฟล์แบบกระจายและแบบคู่ขนาน เครื่องมือการทำงานอัตโนมัติอย่าง Jenkins, Ansible และอื่น ๆ อีกมากมายที่ทำให้คุณอยากจะอาเจียน คอยติดตาม.

ไชโย