Important Announcement
PubHTML5 Scheduled Server Maintenance on (GMT) Sunday, June 26th, 2:00 am - 8:00 am.
PubHTML5 site will be inoperative during the times indicated!

Home Explore cloud_computing

cloud_computing

Published by Thalanglibrary, 2020-11-05 02:56:19

Description: cloud_computing

Search

Read the Text Version

เมอื่ เขา ถงึ คอนโซลของเคร่ืองคอมพิวเตอรเ สมือน ผอู า นสามารถตรวจสอบไดว าดสิ กเ สมือนท่ีแนบเขาไป กับเคร่อื งคอมพิวเตอรเ สมอื นนั้น ระบบปฏบิ ตั ิการรบั รหู รอื ไมดว ยคำสง่ั # fdisk -l /dev/vdb โดยท่ี /dev ที่ไดเรกทอรีของอุปกรณที่เชื่อมตอกับระบบปฏิบัติการ และ vdb เปนชื่อดิสกที่กำหนดไว ตอนเพิ่มเขา ไปในเคร่ืองคอมพิวเตอรเสมอื น จะไดผ ลลพั ธด งั ภาพท่ี 7.4 ภาพท่ี 7.4 หนา จอผลลัพธคำสงั่ ตรวจสอบขนาดของดสิ กใ นเครอ่ื งคอมพิวเตอรเสมือน ในขัน้ ตอนทีส่ อง ผอู านจะตอ งการฟอรแมต และเพ่มิ พื้นทดี่ สิ กเ ขาไปในเครื่องคอมพิวเตอรเ สมือนเพื่อให ระบบปฏิบัติการสามารถนำไปใชงานได โดยการเพิ่มดิสกเขาไปในระบบปฏิบัติการลีนุกซ มีวิธีการเพิ่มได 2 รูปแบบที่เปน ท่นี ยิ ม คอื แบบท่ี 1 เพิ่มดิสกเขาไปโดยตรงและเชื่อมดิสกนั้นกับไดเรกทอรีในระบบปฏิบัติการ การเพิ่มดิสกดวย วิธีการนี้ ดิสกเสมือนที่เพิ่มเขาไปจะอยูเปนเอกเทศไปเกี่ยวของกับกลุมของดิสกเสมือนเดิมที่เชื่อมตออยูแลว ขอดี คือ ผูอานสามารถลบออกหรือถอดดิสกเสมือนนี้ออกจากเครื่องคอมพิวเตอรเสมือนในภายหลังได แต ขอเสีย คือ การเพิ่มพื้นที่เปนจะเปนเพิ่มพื้นที่ใหกับไดเรกทอรีที่เชื่อมตอเพียงไดเรกทอรีเดียว จะไมสามารถ พ้นื ท่ใี หก ับ ไดเรกทอรรี ทู (/) เพื่อใหท กุ ไดเรกทอรีสามารถรว มใชงานพน้ื ทจ่ี ากดสิ กเสมือนนไี้ ด แบบท่ี 2 เพิม่ ดิสกเขาไปในกลมุ ของดสิ กเ ชิงตรรกะ (Logical disk) โดยคา เร่ิมตนของการตดิ ตัง้ CentOS 8 จะเปนช่อื ของกลมุ ดสิ กเ ชิงตรรกะวา cl ผอู านสามารถนำพ้ืนที่ของดสิ กเ สมือนใหมเขาไปรวมกับกลุมของดิสก เชิงตรรกะที่มีอยูและขยายพารทติชันเดิมใหมีขนาดใหญขึ้นก็ได ขอดี คือ ผูอานมีความยืดหยุนสามารถเลือก ขยายพารทติชันที่มีอยูเดิมไดตามตองการ ขอเสีย คือ เมื่อใชพื้นที่ดิสกเสมือนเพิ่มเขาไปในกลุมของดิสกเชิง ตรรกะจะไมสามารถลบหรือถอดดิสกเสมือนออกจากเครื่องคอมพิวเตอรเสมือนนี้ได หากถอดออกอาจทำให ระบบปฏิบัติการไมส ามารถทำงานได หรอื ขอมลู ในกลมุ ของดิสกเชงิ ตรรกะเสยี หาย การเพิ่มดิสกเสมือนใหระบบปฏิบัติการรูจักในแบบท่ี 1 ผูอานสามารถใชโปรแกรม fdisk เพื่อแบง พารท ติชนั กอน โดยสามารถใชค ำส่ัง ดังน้ี # fdisk /dev/vdb 131

ภาพท่ี 7.5 หนาจอผลลัพธก ารสรา งพารทติชนั จากนนั้ กดปุม n เพ่ือสรา งพารทตชิ นั ใหม จากนนั้ กดปุม Enter เพอ่ื เลือกขอมลู ตอ ไปน้ีตามลำดับ 1) ประเภทของพารท ตชิ ัน โดยทั่วไปดิสกหนึ่งสามารถมีพารทติชันแบบ Primary ไดทั้งหมด 4 พารทติชัน แตหากตองการแบงพารทติชันมากกวา 4 พารทติชัน ดิสกนั้นจะมีพารทติชันแบบ Primary ไดเพียง 3 พารทติชันและพารทติชันที่เหลือเปน Extended ในกรณีนี้ หากผูอานสราง พารท ตชิ ันแรกจะตองเปน Primary อยแู ลว โดยคา เริม่ ตนจะเปน p หมายถงึ เลอื ก Primary อยแู ลว ผูอ านสามารถกด Enter ไดท ันที 2) เลือกเซกเตอรแรกของพารทติชัน โดยคาเริ่มตนจะเลือกเซกเตอรที่ติดกับพารทติชันกอนหนา หาก ไมม ีจะมีคา เรม่ิ ตนเปน 1 ตวั เลือกนี้ผอู านสามารถใชคา เริม่ ตน และกด Enter ไดท นั ที 3) เลือกเซกเตอรสุดทายของพารทติชัน ใชเปนตัวระบุขนาดของพารทติชัน สามารถใชเครื่องหมาย บวกและตามดวยตัวเลขพรอมหนวยนับได เชน 1G หมายถึง หนึ่งกิ๊กกะไบต 500M หมายถึง หา รอยเมกะไบต เปนตน โดยคาเริ่มตนจะเปนเซกเตอรสุดทายที่วางอยู ซึ่งหมายถึงใชพื้นที่ที่เหลือ ท้งั หมดของดสิ กสรา งพารทตชิ นั ในกรณนี ้ี หากตองการเพยี ง 1 พารท ตชิ ัน ผอู า นสามารถกด Enter ไดท นั ที หรือระบุขนาดตามตองการ ในกรณีที่ตองการสรางพารทติชันแลวมีพื้นที่เหลือ ผูอานสามารถดำเนินการขั้นตอนสรางพารทติชันได จนจำนวนและขนาดของพารทติชันตามตองการ จากนั้นเลือก w เพื่อบันทึกและออกจากโปรแกรม ดังภาพท่ี 7.5 ผูเขยี นเลือกพารท ตชิ นั ที่มีขนาดเต็มดสิ กเ พยี งพารทตชิ ันเดยี ว จะไดพ ารท ติชนั ที่มีขนาดตามขนาดของดิสก จำนวน 1 พารทติชันชื่อ vdb1 จากนั้นจึงฟอรแมตดิสกใหมีระบบแฟมขอมูลเปน xfs ซึ่งเปนระบบแฟมขอมูล แนะนำของระบบปฏิบตั ิการ CentOS 8 ดว ยคำส่ัง # mkfs.xfs /dev/vdb1 132

จากนั้นสามารถทดสอบการเชื่อมตอกับระบบแฟมขอมูลปจจุบันไดดวยคำสั่ง mount โดยจะเชื่อม พารทติชนั นัน้ ไปยังไดเรกทอรีท่ีตองการ เชน หากตอ งการเชื่อมตอ ไดเรกทอรี /mnt/disk2 สามารถใชค ำสั่ง # mkdir /mnt/disk2 # mount /dev/vdb1 /mnt/disk2 เมื่อพิมพคำสั่งเสรจ็ ผูอานจะสามารถเขาถึงดิสกที่เพิม่ ขึ้นจากไดเรกทอรี /mnt/disk2 ไดเรียบรอย โดย สามารถใชค ำสั่งdf -h ตรวจสอบได ดงั ภาพท่ี 7.6 ภาพท่ี 7.6 หนาจอการฟอรแมตและเชื่อมตอ พารท ติชัน อยา งไรก็ตามเพิ่มดสิ กดวยวิธีดงั กลาว ไมมีผลลัพธคงทนเม่ือรบี ูตเครื่อง หากผูอ า นตองการใหมีผลคงทน เม่อื รีบูตเคร่ืองจะตอ งแกไ ขแฟมขอมลู /etc/fstab ดว ยคำส่งั # vi /etc/fstab จากน้นั ใหเพมิ่ การเช่อื มตอพารท ตชิ นั กบั ไดเรกทอรีตามบรรทดั สดุ ทา ยของภาพท่ี 7.7 133

ภาพท่ี 7.7 หนจ อเน้อื หาของแฟมขอมูล fstab สำหรับการเพิ่มดิสกเสมือนใหระบบปฏิบัติการรูจักในแบบท่ี 2 ผูอานไมจำเปนตองใชโปรแกรม fdisk เพ่อื แบงพารท ตชิ ัน โดยสามารถเปลย่ี นฮารดดสิ ก vdb ใหมรี ะบบแฟมขอ มลู ทีเ่ หมาะสมกอน ดว ยคำสง่ั # pvcreate /dev/vdb จากนั้นผูอานจะตองตรวจสอบวาเดิมระบบปฏิบัติการสรางกลุมของพารทติชันเสมือนไวชื่ออะไรดวย คำสั่ง # vgscan จากภาพที่ 7.8 ระบบปฏิบัติการสรางกลุมพารทติชันเสมือน ชื่อ cl ผูอานสามารถนำดิสก /dev/vdb เขา ไปเพิ่มพนื้ ท่รี วมกบั กลุม พารทติชันเสมือน cl ไดดว ยคำสงั่ # vgextend cl /dev/vdb จะไดผ ลลพั ธดังภาพที่ 7.8 วา กลุมพารท ตชิ ันเสมือน cl ไดถกู ขยายขนาดแลว ภาพที่ 7.8 หนาจอผลลัพธก ารขยายขนาดของพารท ติชัน จากน้นั ผอู านสามารถตรวจสอบขนาดท่เี หลอื ใชจ ากกลุมพารทตชิ นั เสมือน cl ไดจากคำส่ัง # vgdisplay cl จะไดผลลัพธดังภาพที่ 7.9 กลุมพารทติชันเสมือน cl มีพื้นที่คงเหลือจากการจัดสรร (Free PE/Size) เปน 5.00 GiB หรอื 5 กกิ๊ กะไบต ซึง่ ตรงกบั ขนาดของดสิ กทเี่ พมิ่ เขาไป 134

ภาพที่ 7.9 หนา จอผลลัพธค ำส่งั แสดงกลุมพารทติชนั และพ้ืนท่ีเหลือจากการจดั สรร เนอ่ื งจากในขัน้ ตอนการติดต้ังระบบปฏิบตั กิ ารบนคลาวดสวนใหญ ดสิ กทน่ี ำมาใชเ ปนดิสกเสมอื นทั้งหมด ดงั นนั้ การติดต้ังระบบปฏบิ ัติของผใู หบริการคลาวดสว นใหญจึงเปนแบบอัตโนมตั ิ ทำใหพารทติชันที่เก็บขอมูล สวนใหญจะเปน / (อานวา รูทพารทติชัน) เทานั้น ดังนั้น การจัดสรรดิสกใหมที่ดี เพื่อใหเกิดความยืดหยุนจึง ควรจัดสรรพื้นทีเ่ พิ่มไปทีร่ ูทพารทติชันดว ย เพราะจะทำใหแอปพลิเคชันหรือโปรแกรมทีต่ ิดตั้งสามารถใชพื้นท่ี รว มดวยกนั ผูอา นสามารถตรวจสอบพารทตชิ ันเสมอื น root ทีอ่ ยใู นกลุมพารท ตชิ ันเสมือน cl ดว ยคำสงั่ # lvdisplay cl จะปรากฎรายการของพารทตชิ นั เสมือนท่ีใชพืน้ ท่ีในกลุมพารท ตชิ นั เสมือน cl ดงั ภาพท่ี 7.10 ซึ่งปจ จุบัน รูทพารท ติชันมพี ้นื ท่ีประมาณ 12.50 กก๊ิ กะไบต และมพี ารทวา /dev/cl/root ภาพท่ี 7.10 หนา จอผลลัพธคำส่ังแสดงพารท ตชิ นั เสมือนที่ใชพ นื้ ที่ในกลุมพารท ตชิ นั เดียวกนั 135

ขั้นตอนถัดไป จะเปนการเพิ่มพื้นที่ที่เพิ่มมาทั้งหมดจำนวน 5 กิ๊กกะไบตที่อยูในกลุม cl และยังไมไดถูก จดั สรร เพิม่ ไปท่ี /dev/cl/root ดวยคำสัง่ ดงั นี้ # lvextend -l +5G /dev/cl/root ในบางกรณี หากตอ งการเพิ่มพ้ืนทท่ี ี่เหลือทง้ั หมดใหกับพารทติชัน /dev/cl/root สามารถใชคำสั่ง ดังนี้ # lvextend -l 100%FREE /dev/cl/root เมื่อพิมพคำสั่งจะไดผลลัพธดังภาพที่ 7.11 แสดงวาเพิ่มพื้นที่เขาไปที่ /dev/cl/root แลว ซึ่งสามารถ ตรวจสอบดว ยคำส่งั # lvdisplay cl ภาพที่ 7.11 หนาจอผลลัพธคำสงั่ ขยายขนาดของพารท ติชัน อยางไรก็ตามการเพิ่มขนาดของดิสกจะยังไมเปล่ียนแปลงขนาดของระบบแฟมขอมูลที่ระบบปฏิบัติการ ใชงานได โดยเริ่มตน ระบบปฏิบัติการ CentOS 8 ใชระบบแฟมขอมูลเปน xfs ดังนั้น ผูอานจะตองแจง ระบบปฏบิ ตั กิ ารใหทราบถงึ ขนาดใหมข องรูทพารทตชิ นั (/) ดวยคำส่ัง # xfs_growfs / ภาพท่ี 7.12 หนาจอผลลพั ธคำส่งั ขยายขนาดระบบแฟมขอมูล เมื่อพิมพคำส่ังจะปรากฏผลลัพธดังภาพที่ 7.12 จากวาจำนวนบล็อกขอมูลไดเปลี่ยนจาก 3275776 ไป เปน 4586496 ซึ่งเปนตัวเลขท่ีผูอานเขาใจยาก แตก็สามารถเขาใจไดวาขนาดของระบบแฟมขอมูลได เปลีย่ นแปลงไปแลว โดยผอู า นสามารถตรวจสอบขนาดของรูทพารทตชิ นั ดว ยคำสั่ง # df -h 136

ภาพท่ี 7.13 หนาจอผลลพั ธคำส่ังแสดงขอ มลู พื้นท่ขี องพารท ตชิ นั จะปรากฎผลลัพธดังภาพที่ 7.13 ใหสังเกตที่ /dev/mapper/cl-root มีขนาดเพิ่มขึ้นจาก 12G เปน 17G การเพิ่มพื้นที่ของดิสกดวยวิธีการนี้จะมีผลลัพธที่คงทนเมื่อรีบูตเครื่อง เนื่องจากไมไดเปนการเพ่ิม พารทติชันใหมแตเปนการขยายขนาดของพารทติชันเดิมเทานั้น ดังนั้น ผูอานไมจำเปนตองแกไขแฟมขอมูล /etc/fstab แตหากผใู หส รางพารท ติชนั ใหม เชน สรางพารท ติชัน /dev/cl/data ในกลุม cl และเชือ่ มตอไปยัง ไดเรกทอรี /data ผูอานจะตองเพิ่มขอมูลการเชื่อมตอดังกลาวไวในแฟมขอมูล /etc/fstab ดวยวิธีการดังที่ได กลา วมาแลว 7.5 การปรบั แตงอนิ เตอรเ ฟสเครอื ขา ยของเครอ่ื งคอมพวิ เตอรเ สมือน โดยเริ่มตนโปรแกรม KVM จะสรางอินเตอรเฟสเครือขายเสมือนมาใหชื่อ default ซึ่งเปนเครือขาย ประเภท Network Address Translation (NAT) หมายความวา เครือขา ยเสมอื นน้จี ะถกู เขาถึงไดจ ากแคโฮสต ที่ติดตั้งโปรแกรม KVM เทานั้น แตเครื่องคอมพิวเตอรเสมือนสามารถเขาถึงเครือขายที่โฮสตสามารถเขาถึงได รวมทั้งเครือขายอินเทอรเน็ตดวย คุณสมบัติของเครือขาย NAT คือโปรแกรม KVM จะเปนผูแจกจายที่อยูไอพี โดยอัตโนมัติใหกับเครื่องคอมพิวเตอรเสมือนเอง หากผูอานไมไดตั้งคาที่อยูไอพีคงที่ไวที่อินเตอรเฟสเครือขาย ของเคร่ืองคอมพิวเตอรเสมือน เนอื่ งจากเมตาดาทาของโปรแกรม KVM จะเกบ็ เปน รปู แบบ XML ดงั นนั้ วิธกี าร สรางอินเตอรเฟสเครือขายเสมือนก็คือสรางเมตาดาทาในรูปแบบ XML และเพิ่มเขาไปผานโปรแกรม virsh ดงั น้ี สรางเมตาดาทาของเครือขายใหม ในกรณีนีต้ ัง้ ชอื่ วา newnet # vi newnet.xml จากน้ันพมิ พเนอื้ หาตอไปนีล้ งไป <network> <name>newnet</name> <forward mode='nat'> <nat> <port start='1024' end='65535'/> </nat> </forward> <bridge name='virbr1' stp='on' delay='0'/> <ip address='192.168.133.1' netmask='255.255.255.0'> 137

<dhcp> <range start='192.168.133.2' end='192.168.133.254'/> </dhcp> </ip> </network> การขอ มลู ดังกลา ว มขี อ มลู ท่ีสามารถแกไขไดจ ากแมแบบเครือขาย NAT อยูดวยกัน 3 ตำแหนง คือ 1) bridge name='virbr1' นิยมตั้งชื่อขึ้นตนวา virbr แลวตามดวยตัวเลข ในกรณีนี้ตั้งชื่อเปน virbr1 ผูอา นสามารถตรวจสอบวามีช่อื virbr ใดทถี่ กู ใชไปแลวดวยคำส่ัง # ip link 2) Ip address='192.168.133.1' netmask='255.255.255.0' เปนที่อยูไอพีของบริดจหรือของโฮสต ซึ่งจะเปนที่อยูที่ใชตั้งคาเกตเวยเริ่มตนในเครื่องคอมพิวเตอรเสมือน สวน netmask สามารถตั้งคา ไดต ามขนาดของเครือขายทต่ี องการ 3) range start='192.168.133.2' end='192.168.133.254' เปนชวงของที่อยูไอพีที่โปรแกรม KVM จะแจกใหก บั เคร่ืองคอมพิวเตอรเ สมอื นโดยอัตโนมัติ อยางไรก็ตาม การพิมพเนื้อหาที่บรรยายเครือขายเสมือนนั้นมีความยาวและสามารถจดจำและนำไป ปฏิบัติไดยาก ผูเขียนแนะนำวา ผูอานสามารถอางอิงเนื้อหาที่บรรยายจากเครือขายเสมือน default ซึ่งเปน เครือขายเสมอื นเริม่ ตนทถ่ี กู สรา งหลงั การตดิ ตั้งโปรแกรม KVM ไดดว ยคำส่ัง # virsh net-dumpxml default เมื่อพิมพคำสั่ง จะไดผลลัพธดังภาพที่ 7.14 ในกรณีที่ผูอานเปดโปรแกรม Putty อยู ผูอานสามารถ คัดลอกขอความไปใสในโปรแกรมแกไขขอความอยาง Notepad และแกไขเนื้อหาเครือขายเสมือน หรือสราง แฟม ขอมลู ใหมช อื่ newnet.xml จากเครือขายเสมือน default ดวยคำสัง่ # virsh net-dumpxml default > newnet.xml โดยลบแท็ก <uuid> และ <mac> ออก จากนั้นแกไขชอ่ื bridge ip address และ range ตามตองการ 138

ภาพที่ 7.14 เนอ้ื หาเมตาดาทาของเครอื ขายเรมิ่ ตน หลังจากทสี่ รางแฟมขอมูลเสร็จ สามารถเพ่ิมเครอื ขายใหโปรแกรม KVM โดยใชคำสัง่ # virsh net-define newnet.xml จากนั้นส่งั ใหเ ครอื ขา ยเสมอื น newnet ทำงานทันที และทำงานทกุ คร้งั ทีร่ ีบูตไฮสต # virsh net-start newnet # virsh net-autostart newnet เมื่อพิมพคำส่ังเสร็จ ผอู านสามารถตรวจสอบเครือขา ยเสมือนท้งั หมดท่มี ีไดด ว ยคำสั่ง # virsh net-list --all จากนั้นผูอานสามารถใชเครือขายเสมือน newnet ในคำสั่ง virt-install เมื่อตองการสรางเครื่อง คอมพิวเตอรเสมือนใหมไ ด หรือแกไ ขเครื่องคอมพวิ เตอรเสมือนเดมิ ได 2 วิธี คือ วธิ ีแรกการแกไ ขแฟม ต้ังคาของ เครอื่ งคอมพวิ เตอรเ สมอื น โดยใชค ำสงั่ # virsh edit demo-centos จากนน้ั คนหาสว นท่ีบรรยายของเครอื ขา ยไว <interface type='bridge'> <mac address='52:54:00:26:da:10'/> <source bridge='virbr0'/> <model type='virtio'/> <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/> </interface> ตรงขอความทร่ี ะบวุ า <source bridge='virbr0'/> ใหเ ปลี่ยนเปน <source bridge='virbr1'/> 139

เมื่อแกไขเรียบรอยก็สามารถบันทึก และรีบูตเครื่องคอมพิวเตอรเสมือน เครื่องคอมพิวเตอรเสมือนจะ เปลยี่ นมาอยใู นเครอื ขาย newnet ในขณะทีแ่ กไ ขผูอา นอาจพบวา คา mac address ไมต รงกบั ในเอกสารซึ่งจะ เปนคาที่เครื่องสุมสรางขึ้นมาใหโดยอัตโนมัติ และสามารถแกไขไดตามตองการหากตองการบังคับคา mac address เปนคาใดคาหนึง่ โดยเฉพาะ อีกวิธีหนึ่ง คือการใชคำสั่ง virsh โดยคำสั่ง virsh มีตัวดำเนินการที่สนับสนุนการแกไขเครือขายเสมือน อยู 2 คำสง่ั คือ คำส่ังเพ่มิ อนิ เตอรเ ฟส และคำส่ังลบอินเตอรเฟส ในกรณีที่ตองการแกไ ขอินเตอรเ ฟสเดมิ ผูอาน สามารถใชท งั้ สองคำสั่งโดย ลบอนิ เตอรเฟสเกา ที่มบี ริดจเดมิ กอนและ เพิม่ อนิ เตอรเ ฟสใหมท่ีมีบริดจชื่อ virbr1 ในขั้นตอนการลบอินเตอรเฟสเสมือนเดมิ ผูอานจะตองทราบอยูทางกายภาพของอินเตอรเฟสเครอื ขาย (MAC address) ของการด ที่เชื่อมตอ กับเครอื่ งคอมพิวเตอรเสมือนอยกู อนแลว ดว ยคำสงั่ # virsh domiflist demo-centos จากนั้น ผูอานสามารถลบอนิ เตอรเฟสทีม่ อี ยเู ดิมดวยคำสั่ง # virsh detach-interface --domain demo-centos --type bridge --mac 52:54:00:26:da:10 –config --live - พารามเิ ตอร domain ระบุชอ่ื ของเครือ่ งคอมพิวเตอรเ สมือน - พารามเิ ตอร type ระบุประเภทของการเช่ือมตอ ในกรณนี ้ีเปน bridge - พารามเิ ตอร mac ระบุทีอ่ ยทู างกายภาพของอินเตอรเ ฟสท่ตี องการลบออก - พารามิเตอร config ระบใุ หแ กไขการเพ่มิ อินเตอรเฟสในแฟมตัง้ คาของเคร่ืองคอมพิวเตอรเ สมือน - พารามิเตอร live ระบใุ หม ผี ลบงั คบั ใชง านทันที โดยทีไ่ มจำเปนตองรบี ูตเครอ่ื งคอมพิวเตอรเสมอื น ในบางกรณี แอปพลิเคชันที่เฉพาะบางแอปพลิเคชันอานขอมูลจากที่อยูทางกายภาพของอินเตอรเฟส เครอื ขา ยเพือ่ ใชใ นการทำงานของโปรแกรม เชน การคำนวณคียสำหรับเปน ลิขสทิ ธิ์ของซอฟตแ วร ผอู า นอาจจะ ตองการเปลี่ยนเครือขายเสมือนโดยที่การดยังคงมีที่อยูทางกายภาพเดิม ในกรณีนี้ ผูอานสามารถจดบันทึกไว กอน ถดั ไป ในขน้ั ตอนการเพ่ิมอินเตอรเ ฟสใหมใ หกบั เคร่ืองคอมพิวเตอรเสมือน ผอู า นสามารถใชคำสง่ั # virsh attach-interface --domain demo-centos --type bridge --source virbr1 --config --live - พารามิเตอร domain ระบชุ ือ่ ของเครื่องคอมพิวเตอรเ สมือน - พารามิเตอร type ระบุประเภทของการเชือ่ มตอ ในกรณีนี้เปน bridge - พารามเิ ตอร source ระบชุ อ่ื ของบริดจ ซึ่งชื่อของบรดิ จสามารถตรวจสอบไดจ ากเคร่อื งคอมพิวเตอร แมข า ย - พารามเิ ตอร config ระบุใหแ กไขการเพมิ่ อนิ เตอรเฟสในแฟม ต้ังคา ของเคร่ืองคอมพิวเตอรเ สมอื น - พารามเิ ตอร live ระบุใหม ผี ลบงั คับใชง านทันที โดยทไี่ มจ ำเปนตองรีบูตเครือ่ งคอมพิวเตอรเ สมือน 140

การเพิ่มอินเตอรเฟสใหมดวยคำสั่งดังกลาว โปรแกรม KVM จะสุมสรางที่อยูทางกายภาพของ อินเตอรเฟสเครือขายเองอัตโนมัติ ในกรณีที่ตองการใชที่อยูทางกายภาพของอินเตอรเฟสจากเครือขายเดิม ผูอานสามารถเพม่ิ พารามเิ ตอร mac และระบทุ อ่ี ยทู างกายภาพของอนิ เตอรเ ฟสเดิมได ดว ยคำส่ังนี้ # virsh attach-interface --domain demo-centos --type bridge --source virbr1 --mac 52:54:00:26:da:10 --config –live คำส่งั การลบอินเตอรเฟสและคำส่งั เพิ่มอินเตอรเฟสมีลักษณะการทำงานทเี่ ปนอิสระตอกัน ดงั น้นั เครื่อง คอมพิวเตอรเสมือนเครื่องหนึ่งสามารถมีอินเตอรเฟสไดหลายอินเตอรเฟส โดยผูอานสามารถสรางเครื่องขาย เสมือนสำหรับกลุมของเครื่องคอมพิวเตอรเสมือนที่ทำงานรวมกันโดยสรางเครือขายเสมือนเฉพาะแตละกลุม เพื่อการบริหารจดั การทีง่ า ย ในกรณีที่เคร่ืองคอมพวิ เตอรเ สมือนบางเคร่ืองจำเปนตองเขาถึงเครื่องคอมพิวเตอร เสมือนในอีกเครือขายเสมือนหนึ่ง ผูอานสามารถเพิ่มอินเตอรเฟสเครือขายเสมือนใหกับเครื่องคอมพิวเตอร เสมอื นเครอ่ื งนนั้ ได เพอ่ื เปนการจำกัดการเขา ถงึ ทีจ่ ำเปน โดยใหม ีเฉพาะเครอื่ งนัน้ เทา น้ัน 141

บทสรปุ คำสงั่ สำหรบั ตรวจสอบคุณสมบตั ิของเครื่องคอมพวิ เตอรเสมือน และคำส่งั สำหรบั การปรบั แตงการตั้งคา ตาง ๆ สามารถกระทำไดแมวาเครื่องคอมพิวเตอรเสมือนยังทำงานอยู แตจะมีผลก็ตอเมื่อปดและเปดเครื่อง คอมพวิ เตอรเ สมือนน้ันใหมอกี ครั้ง แมโปรแกรม KVM จะสนับสนุนดิสกเสมือนหลายรูปแบบ แตรูปแบบที่เหมาะสมที่สุด คือ Qcow2 เพราะรองรับการสำรองและการกูค ืนสถานะของดิสก แตรูปแบบ Vmdk รองรับเพื่อความเขากันไดจากเครือ่ ง คอมพวิ เตอรเสมือนทีย่ ายมาจากระบบของ VMWare การจองพื้นที่ดิสกเสมือนขณะสรางเครื่องคอมพิวเตอรเสมือนมีอยู 4 รูปแบบ คือ 1) off หมายถึงไมมี การจองขอมูล 2) metadata หมายถึงจองพื้นที่เฉพาะสวนของเมตาดาทา 3) falloc หมายถึงจองพื้นที่ทั้ง ขอมูลและเมตาดาทาแตไ มมีการเขยี นทับดสิ ก 4) full จองพน้ื ทท่ี ั้งขอมลู และเมตาดาทาและเขยี นทับขอมูลเกา บนดสิ ก ในกรณีท่ีเครือ่ งของผูอานใชด ิสกแบบเอสเอสดี การจองแบบ metadata เหมาะสมทส่ี ุด หากดิสกเปน จานแมเ หล็ก การจองแบบ falloc เหมาะสมที่สดุ หากผูอานเพิ่มดิสกเสมือนใหมเขาไปในเครื่องคอมพิวเตอรเสมือนเดิม ผูอานจำเปนจะตองตั้งคาการ ฟอรแมตดิสก การแบงพารท ติชัน และการแจงระบบปฏบิ ตั ิการเกยี่ วกบั ขนาดของดสิ กที่เปลีย่ นแปลงไป เคร่ืองคอมพวิ เตอรเสมือนสามารถมเี ครือขายเสมือนกเี่ ครือขา ยก็ได การสรางเครอื ขายเสมือนท่ีงายท่ีสุด คือ การนำเนื้อหาบรรยายเครือขายเริ่มตน default มาใชเปนแมแบบสำหรับสรางเครือขายเสมือนใหม การ เพ่ิมหรือถอดออกเครือขายเสมือนสามารถกระทำไดทัง้ การแกไข XML และบรรทดั คำส่ัง 142

สรปุ คำสงั่ ทนี่ าสนใจ คำสง่ั หรือชื่อคำส่งั ที่เกี่ยวขอ ง เน้ือหา # virsh vcpuinfo demo-centos # virsh dominfo demo-centos ตรวจสอบขอมูลหนวยประมวลผลกลาง ตรวจสอบจำนวนหนว ยประมวลผลกลางเสมอื น # virsh domblklist demo-centos ปรมิ าณหนว ยความจำหลัก สถานการณทำงาน # virsh domblkinfo demo-centos vda ปจ จุบัน # virsh domblkstat demo-centos vda ตรวจสอบชื่อ และจำนวนดิสกทใี่ ชง านอยูป จจุบนั ตรวจสอบพ้นื ทด่ี สิ กส ูงสดุ พื้นทีด่ สิ กท่จี องไวจรงิ บน โฮสต ตรวจสอบการเขียนอา นของดิสก ตรวจสอบจำนวน และชื่อของอนิ เตอรเฟสเครือขา ย # virsh domiflist demo-centos เสมือน ท ตรวจสอบการรับสง ขอมูลของอนิ เตอรเฟสเครือขา ย # virsh domifstat demo-centos vnet0 เสมือน เปล่ยี นจำนวนหนวยประมวลผลกลาง # virsh edit demo-centos เปลี่ยนจำนวนหนวยความจำหลัก จากนนั้ คน หาสว นของขอมูลท่ีระบุ สรา งแฟมขอ มูลดสิ กเสมือน <vcpu placement='static'>1</vcpu> ตรวจสอบแฟม ขอ มลู ดสิ กเสมือน เปล่ยี นตัวเลขใน <vcpu /> เพิ่มแฟม ขอ มูลดิสกเสมือนเขา ไปในเคร่ือง # virsh shutdown demo-centos คอมพวิ เตอรเ สมอื น # virsh setmaxmem demo-centos 768MiB # virsh start demo-centos เพม่ิ ดสิ กในระบบปฏิบัติการลีนุกซ โดยการเพ่ิมดสิ ก # qemu-img create -f qcow2 เขาไปโดยตรงและเช่ือมดสิ กกับไดเรกทอรใี น -o preallocation=metadata ระบบปฏบิ ตั กิ าร /var/lib/libvirt/images/demo-centos- data.qcow2 5G # qemu-img info /var/lib/libvirt/images/demo-centos- data.qcow2 # virsh attach-disk demo-centos --source /var/lib/libvirt/images/demo- centos-data.qcow2 --target vdb --driver qemu --subdriver qcow2 --targetbus virtio --persistent # fdisk /dev/vdb จากน้นั กด n เพ่ือสรางพารท ติชันและทำตาม ขน้ั ตอนจนจบ และกด w เพื่อบนั ทึกและออก 143

เน้ือหา คำสง่ั หรือชื่อคำสง่ั ท่เี กี่ยวของ # mkfs.xfs /dev/vdb1 เพมิ่ ดิสกในระบบปฏบิ ตั ิการลีนกุ ซ โดยการเพ่ิมเขา # mkdir /mnt/disk2 ไปในกลุมของดิสกเ ชงิ ตรรกะ # mount /dev/vdb1 /mnt/disk2 สรา งอนิ เตอรเ ฟสเสมือนใหม แกไ ข /etc/fstab เพือ่ ผลลพั ธท่คี งทนหลงั การรีบูต # pvcreate /dev/vdb # vgextend cl /dev/vdb # lvextend -l 100%FREE /dev/cl/root # xfs_growfs / # vi newnet.xml จากน้ันระบุขอ มูลของอนิ เตอรเฟสเสมือน หรอื # virsh net-dump default > newnet.xml จากนน้ั แกไขขอมูลอนิ เตอรเ ฟสเสมือน แสดงรายการอินเตอรเ ฟสเสมือน และดำเนนิ การ เปลีย่ นอินเตอรเฟสเสมือนใหกบั เคร่ืองคอมพวิ เตอร # virsh net-define newnet.xml เสมอื น โดยการแกไ ข XML # virsh net-start newnet เปล่ยี นอินเตอรเ ฟสเสมือนใหกบั เครื่องคอมพวิ เตอร # virsh net-autostart newnet เสมอื น โดยบรรทัดคำส่ัง # virsh net-list # virsh edit demo-centos คน หาสวนท่ีบรรยายเครอื ขาย และเปลีย่ นชือ่ อินเตอรเฟสเสมือน <interface type='bridge'> <mac address='52:54:00:26:da:10'/> <source bridge='virbr0'/> <model type='virtio'/> <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/> </interface> # virsh attach-interface --domain demo- centos --type bridge --source virbr1 --config –live # virsh attach-interface --domain demo- centos --type bridge --source virbr1 –mac 52:54:00:26:da:10 --config –live 144

แบบฝกหดั บทที่ 7 1. บอกคำสง่ั ท่ีใชต รวจสอบหนว ยประมวลผลกลาง หนวยความจำหลกั และความจพุ นื้ ท่ีเก็บขอมูลจากเครื่อง คอมพวิ เตอรเ สมอื น 2. หากตองการเปลี่ยนจำนวนหนว ยประมวลผลกลางเสมือนจาก 1 เปน 3 ตอ งทำอยา งไร 3. หากตองการลดปรมิ าณหนวยความจำหลักใหเหลอื 0.5 กก๊ิ กะไบต ตองทำอยางไร 4. อธบิ ายประเภทแฟม ขอ มลู ของดสิ กเ สมือนทโี่ ปรแกรม KVM รองรับ 5. อธบิ ายรปู แบบการจองพืน้ ที่ของดิสกเสมือนในโปรแกรม KVM 145

6. บอกคำสัง่ ทใ่ี ชเ พิ่มดสิ กเสมอื นใหก บั เคร่ืองคอมพวิ เตอรเ สมือน 7. เมื่อเพ่มิ ขนาดของดสิ กในพารทติชันแลว แตร ะบบปฏบิ ตั ิการลนี ุกซยังคงมองเหน็ ขนาดของพารท ติชนั เทา เดิมเปนเพราะอะไร มีวิธีแกไ ขอยา งไร 8. บอกคำสัง่ ท่ีใชสรางเครือขายเสมือนใหม 9. หากตอ งการยา ยใหเ ครอื ขา ยของเครอ่ื งคอมพวิ เตอรเ สมือนจาก default มาเปน newnet จะตอ งแกไ ข XML ของเคร่ืองคอมพวิ เตอรเสมือนอยางไร 10. บอกคำสง่ั ทใ่ี ชเ ปล่ียนอินเตอรเฟสของเคร่ืองคอมพวิ เตอรเ สมือนชอื่ demo-centos จาก virbr0 เปน virbr1 146

การบันทึกและการกูคนื สถานะของเครอ่ื งคอมพิวเตอรเสมือน บทนำ หากผูอานมีฮารดแวรของอุปกรณคอมพิวเตอรที่ติดต้ังซอฟตแวรโดยไมมีไฮเปอรไวเซอรนัน้ การบันทึก สถานะของเครื่องอาจจะตองใชแอปพลิเคชันเสริม และการกูคืนอาจตองรีบูตเครื่องหรือเช่ือมตอฮารดดิสกกับ เครื่องคอมพิวเตอรอื่นสงผลใหความพรอมใชลดลง แตการบันทึกและกูคืนสถานะของเครื่องคอมพิวเตอร เสมือนเปนหนึ่งในคุณสมบัติที่เทคโนโลยีเสมือนโดยโปรแกรม KVM มีเครื่องมือใหจัดการสถานะในรูปแบบ ตนไมท่ีทำใหผูอานสามารถเดินหนาและยอ นกลับสถานะทีต่ องการไดอยางสะดวก พรอมทั้งคุณสมบตั ิการยาย เครื่องคอมพิวเตอรเสมือนจากเครื่องแมขายหนึ่งไปยังอีกเครื่องแมขายหนึ่งในขณะที่กำลังเปดเครื่อง คอมพวิ เตอรเ สมอื นไดอ กี ดวย ทง้ั นเี้ พอ่ื เพิ่มระดบั ความพรอมใชของระบบ 8.1 การบันทึกสถานะของเคร่อื งคอมพวิ เตอรเสมอื นเพอื่ หยุดการทำงาน การบันทึกสถานะของเครอ่ื งคอมพวิ เตอรเสมือนนัน้ มเี งื่อนไขขั้นต่ำ คอื เครอื่ งคอมพิวเตอรเ สมือนจะตอง ปดการทำงานอยูและดิสกทุกดิสกในเครื่องคอมพิวเตอรเสมือนจะตองอยูในรปู แบบ Qcow2 เทานั้น ในกรณีที่ เครื่องคอมพิวเตอรเปดแอปพลิเคชันหรือใหบริการกับเครื่องลูกขาย การปดเปดการทำงานใหมอีกครั้งอาจใช เวลานาน โปรแกรม KVM มเี ครือ่ งมือทีส่ ามารถบันทึกสถานะของเคร่ืองคอมพิวเตอรและปด เครื่องคอมพิวเตอร ไป เมื่อใดก็ตามที่เปดการทำงานอีกครั้งโปรแกรม KVM จะโหลดสถานะในหนวยความจำหลักที่บันทึกไวใน ฮารดดิสกใหกลับมาเหมือนเดิม ทำใหลดเวลาการบูตเครื่อง เชน หากตองการบันทึกสถานะของเครื่อง คอมพิวเตอรเสมอื นตวั อยางที่สรา งไวก อนหนา น้ี สามารถใชค ำสั่ง # virsh managedsave demo-centos ระยะเวลาในการบนั ทกึ สถานะข้ึนอยูกับปรมิ าณหนวยความจำหลกั ทีใ่ ชจริงในเคร่ืองคอมพวิ เตอรเสมือน และความเร็วในการเขียนดิสกข องโฮสต เมือ่ บนั ทึกสถานะเสรจ็ จะปรากฏผลลพั ธด งั ภาพที่ 8.1 ภาพท่ี 8.1 หนาจอผลลัพธคำสงั่ บนั ทกึ สถานะเครอ่ื งคอมพวิ เตอรเสมือน 147

บันทึกสถานะของเครื่องคอมพิวเตอรเสมือน เรียกวา snapshot การสรางบันทึกสถานะนั้นสามารถใช คำส่ัง virsh และมีตวั ดำเนินการเปน snapshot-create-as ได ดังน้ี # virsh snapshot-create-as --domain demo-centos --name snapshot_1 – description \"the first snapshot\" - พารามิเตอร domain ระบุชอื่ เคร่อื งคอมพวิ เตอรเ สมือน - พารามเิ ตอร name ระบุช่ือของสถานะของเครือ่ งคอมพวิ เตอรเ สมือน ไมควรมีเวนวรรค - พารามิเตอร description ระบุรายละเอียดของสถานะของเครื่องคอมพิวเตอรเสมือน หากตองการ ปอนขอความที่มีเวนวรรคตองใสเครื่องหมายฟนหนู (\") ครอบขอความไว พารามิเตอรนี้ไม จำเปน ตองระบกุ ไ็ ด คำสั่งดานบนจะสราง Snapshot ชื่อ snapshot_1 ที่มีรายละเอียดคำอธิบายวา the first snapshot ใหก บั เครื่องคอมพิวเตอรเ สมอื นช่ือ demo-centos เมอ่ื สรา งเสรจ็ จะปรากฏผลลัพธด งั ภาพที่ 8.2 ภาพท่ี 8.2 หนา จอผลลัพธค ำสั่งสราง Snapshot ผอู านสามารถตรวจสอบอกี ครัง้ วา ผูอา นไดสรา ง Snapshot ไวถ ูกตองหรือยงั ดวยคำสงั่ # virsh snapshot-list demo-centos จะปรากฎผลลพั ธด ังภาพท่ี 8.3 วา ผูอ า นไดส ราง Snapshot ช่ือ snapshot_1 ไวเ รยี บรอย ภาพที่ 8.3 หนาจอผลลัพธค ำสง่ั แสดงรายการ Snapshot และหากตองการดูรายละเอียดเพิ่มเติมของ Snapshot ที่ชื่อ snapshot_1 วามีความสัมพันธกับ Snapshot อื่นในรูปแบบตน ไมหรือไม สามารถใชค ำส่ัง # virsh snapshot-info --domain demo-centos --snapshotname snapshot_1 - พารามิเตอร domain ระบชุ อื่ เครอ่ื งคอมพิวเตอรเ สมือน - พารามิเตอร snapshotname ระบุชื่อของสถานะของเครื่องคอมพิวเตอรเสมือนที่ตองการ ตรวจสอบรายละเอยี ด 148

เมื่อพิมพคำสั่ง จะปรากฎผลลัพธด ังภาพที่ 8.4 วา snapshot_1 ถูกสรางลา สุดยังไมมี Snapshot ที่ถูก สรา งตอ (Children) และ Snapshot ท่ีถูกสรา งตอจาก Children ไปอกี (Descendants) ภาพที่ 8.4 หนา จอผลลัพธคำส่งั แสดงรายละเอยี ดของ Snapshot 8.2 การกคู นื สถานะของเคร่ืองคอมพวิ เตอรเสมอื นเพือ่ เร่ิมการทำงาน เมื่อไดบันทึกสถานะ ผูอานสามารถสั่งเครื่องคอมพิวเตอรเสมือนเริ่มการทำงานไดตามปกติ เมื่อใดก็ ตามที่ตองการยอนกลับไปสถานะที่เคยบันทึกไว สามารถใชคำสั่ง virsh snapshot-revert เชน การตองการกู คนื สถานะของเครอ่ื งคอมพวิ เตอรเ สมือนทส่ี รา งไวกอ นหนาไปยัง snapshot_1 สามารถใชคำส่งั # virsh snapshot-revert --domain demo-centos --snapshotname snapshot_1 - พารามเิ ตอร domain ระบุชอ่ื เคร่อื งคอมพิวเตอรเ สมือน - พารามิเตอร snapshotname ระบุชือ่ ของสถานะของเคร่ืองคอมพิวเตอรเสมือนท่ีตองการยอนกลับ ไป เมื่อพิมพคำสั่งไปจะไมขึ้นขอความใด ๆ ดังภาพที่ 8.5 แสดงวาการกูคืนสำเร็จ จากนั้นผูอานสามารถ เปด การทำงานของเครอ่ื งคอมพิวเตอรเสมือนไดตามปกติ ภาพที่ 8.5 หนา จอผลลัพธคำสง่ั กคู ืน Snapshot ในกรณีทต่ี อ งการลบการบันทกึ สถานะออกจากเครื่องคอมพิวเตอรเ สมือน สามารถลบไดด วยคำสัง่ # virsh snapshot-delete --domain demo-centos --snapshotname snapshot_1 149

ภาพท่ี 8.6 หนา จอผลลัพธคำสงั่ ลบ Snapshot - พารามเิ ตอร domain ระบุชื่อเครื่องคอมพิวเตอรเ สมอื น - พารามิเตอร snapshotname ระบุชื่อของสถานะของเคร่อื งคอมพวิ เตอรเสมอื นที่ตอ งการลบ เมื่อพิมพคำสั่งจะปรากฎผลลัพธดังภาพที่ 7.6 บอกวา snapshot_1 ไดถูกลบออกไป และหากใชคำสั่ง แสดงรายการบนั ทึกสถานะของเคร่ืองคอมพวิ เตอรเ สมือนจะพบวา snapshot_1 หายไป อยางไรก็ตาม การลบ เครื่องคอมพิวเตอรเสมือนออกไปนั้นดวยคำสั่ง virsh undefine จะไมลบทั้งดิสกเสมอื นและบันทึกสถานะการ ทำงาน แตหากใชคำสั่ง virsh undefine ที่มีพารามิเตอร --remove-all-storage โปรแกรม KVM จะลบท้ัง เครื่องคอมพิวเตอรเสมือน ดิสกเสมือน และบันทึกสถานะการทำงานทั้งหมดของเครื่องคอมพิวเตอรเสมือน ทนั ที อยางไรก็ตามการสราง Snapshot หรือการบันทึกสถานะของเครื่องคอมพิวเตอรเสมือนนั้น แมจะ สะดวกสบาย แตก็ตองแลกกับพื้นที่จัดเก็บขอมูลที่ตองใช และการ Snapshot จะบันทึกเฉพาะความแตกตาง ของดิสกในระหวางคูการบันทึกสถานะนั้นเทานั้น เชน หากผูอานบันทึกสถานะของเครื่องคอมพิวเตอรเสมอื น โดยเริ่มตนสรางสถานะชื่อ snapshot_1 จากนั้นเมื่อใชงานไปสักพักทำการบันทึกตอดวยสถานะชื่อ snapshot_2 แลวสรางสถานะถัดไปชื่อ snapshot_3 สิ่งที่โปรแกรม KVM ดำเนินการคือ snapshot_1 จะ เปนสถานะของดิสกทั้งหมด ณ เวลาที่สราง เมื่อมีการเปลี่ยนแปลงหลังจากนั้น โปรแกรม KVM จะไม เปลี่ยนแปลงโครงสรางในดิสกเริ่มตน แตจะสรางเมตาดาทาใหมที่บันทึกสวนตา งจากเดิมทำใหสวนท่ีขอ มูลบน ดิสกตางไมใชการเขียนขอมูลทับ แตเปน การสรางดสิ กสวนตางไวเทียบขอ มลู วาขอมลู ดสิ กปจจุบันมีสถานะเปน อะไร เมื่อสราง snapshot_2 โปรแกรม KVM จะล็อกแฟมสวนตางที่เกิดขึ้นหลังจาก snapshot_1 และสราง เปน snapshot_2 เมือ่ มกี ารเปล่ยี นแปลงหลงั จากนั้นโปรแกรม KVM จะสรางสว นแฟม ขอ มลู สว นตางข้ึนมาอีก แฟม ซ่งึ เมือ่ ผูอา นบนั ทึกสถานะของเคร่ืองคอมพิวเตอรเสมอื นใหม โปรแกรม KVM จะทำซำ้ แบบน้ไี ปเรอื่ ย ๆ ขอดีของการทำงานเบ้ืองหลงั แบบนี้คือ 1) สามารถบันทึกการสรา งเคร่ืองคอมพิวเตอรเ สมือนไดไมจำกัด และสามารถดำเนินการในรูปแบบตนไมไดซึ่งจะสามารถเก็บสถานะของเครื่องที่ซับซอน 2) เนื่องจากหลังการ ทำ Snapshot โปรแกรม KVM จะสรางแฟมสวนตางไวรออยูแลว การสรางบันทึกสถานะของเครื่องครั้งใหม สามารถดำเนินการไดอยางรวดเร็ว แตทั้งนี้ก็ตองแลกกับขอเสียคือ 1) โปรแกรม KVM จะสรางดิสกสวนตาง ซอ นขน้ึ มาเร่อื ย ๆ แสดงวา หากผอู านบนั ทึกสถานะจำนวน 10 ครง้ั ตอ เนื่องกนั แสดงวา เม่อื เครอ่ื งตองการอาน ขอมลู จะดิสกบล็อกนน้ั จะตองเทยี บขอ มลู กบั สถานะท้ัง 10 ครั้ง ทำใหแทนทจี่ ะตองอานขอมูลจากดสิ กเพียง 1 I/O แตก ลับตอ งอานขอ มลู สงู ถึง 10 I/O 2) เนอื่ งจากสถานะของดสิ กในปจ จบุ นั สรางจากการเทียบสวนตางของ 150

ทุกสถานะ หากสถานะที่อยูระหวางดสิ กเริ่มตน และสถานะปจจุบันเสยี หายจะทำใหไมสามารถอานขอมูลจาก ดสิ กข องเคร่ืองคอมพิวเตอรเสมือนได ดว ยเหตนุ ี้ การบันทึกสถานะและกูคืนของเครื่องคอมพิวเตอรเสมือน ควรใชเฉพาะกับเครื่องที่ไมมีโหลด การทำงานสูง หรือนิยมใชกับเครื่องคอมพิวเตอรเสมือนของนักพัฒนาซอฟตแวรที่ตองมีการเปลี่ยนแปลงและ ทดสอบในสภาพแวดลอมหลายสภาพแวดลอมในชวงเวลาใกลกัน เพราะแมประสิทธิภาพการทำงานจะลดลง แตการรอการประมวลผลไมไดว กิ ฤตเหมือนการทำงานในสภาพการใชงานจริง 8.3 การทำแมแบบของเครื่องคอมพวิ เตอรเสมือน ในขณะท่ีการบันทกึ สถานการณท ำงานของเครื่องคอมพิวเตอรเปนวิธีการท่ไี มแนะนำหากใชง านในสภาพ การใชงานจริง เพราะสงผลตอประสิทธิภาพการทำงานอยางชัดเจน ในกรณีที่ตองการสำรองขอมูลในระดับ เครอื่ งคอมพิวเตอรเ สมือน หรือการเตรียมเครื่องคอมพวิ เตอรเสมือนไวสำหรบั การใชงานท่ีหลากหลายโดยที่ไม ตองไปติดตั้งระบบปฏิบัติการทีละเครื่องนั้น ยังมีอีกวิธีหนึ่งที่สามารถทำไดคือ การสรางเครื่องคอมพิวเตอร เสมอื นใหมจ ากเครื่องคอมพิวเตอรเ ดิม หรือการทำสำเนาเครื่องคอมพิวเตอรเสมือน วิธกี ารนี้เปรียบเสมือนการ บันทึกสถานะของเครื่องคอมพิวเตอรเสมือน แตจะเปนการบันทึกแบบเต็ม คือขอมูลทั้งเครื่องคอมพิวเตอร เสมือนจะถูกทำสำเนาใหมอีกครั้ง ซง่ึ จะไมท ำใหประสิทธิภาพเครื่องลดลง แตจะใชพ ้ืนที่เก็บขอมูลปริมาณมาก แทน วิธกี ารนี้จึงเหมาะสมสำหรบั การปรบั ใชในสภาพการใชง านจรงิ ขั้นตอนการทำเตรียมเครื่องคอมพิวเตอรเสมือนและการทำสำเนาเครื่องคอมพวิ เตอรเสมือนเร่ิมจากการ ติดตั้งแพ็คเกจเครื่องมือสำหรับบริหารจัดการเครื่องคอมพิวเตอรเสมือน ชื่อ libguestfs-tools โดยสามารถใช คำส่งั # yum install libguestfs-tools ในกรณีที่ตองการเตรียมเครื่องคอมพิวเตอรเสมือนไวสำหรับการใชงานที่หลากหลายโดยที่ไมตองไป ติดตั้งระบบปฏิบัติการใหมทุกเครื่อง ผูอานสามารถใชเ ครือ่ งที่ติดตั้งระบบปฏิบตั ิการเสรจ็ เรียบรอย และตั้งคา ตามที่กำหนดทำเปนเครื่องแมแบบสำหรับการทำสำเนาได สำหรับกรณีการสำรองขอมูลเครื่องคอมพิวเตอร เสมอื นนน้ั สามารถดำเนนิ การทำสำเนาเคร่ืองคอมพวิ เตอรเสมือนซ่ึงจะบรรยายไวในหัวขอถดั ไปไดทันที การเตรียมเครื่องคอมพิวเตอรทำแมแบบสำหรับการทำสำเนานั้น เครื่องคอมพิวเตอรจะตองมีสถานะ หยุดการทำงาน (Stopped) โดยเครื่องที่ตองการเตรียมแมแบบจะตองอยูในสถานะหยุดการทำงานดวยคำสั่ง virsh shutdown หรือคำสั่ง virsh managedsave อยางใดอยางหนึ่ง จากนั้นติดตั้งแพ็คเกจที่ติดตั้งให เครื่องมือชื่อ virt-sysprep สำหรับลบขอมูลขยะ บันทึกการใชงาน เปลี่ยนรหัสผาน หรือตั้งคาอื่น ๆ ไดตาม ตองการ ดว ยคำสัง # yum install virt-sysprep 151

ตารางท่ี 8.1 พารามิเตอรของโปรแกรม virt-sysprep ที่ใชแกไ ขขอมูล พารามเิ ตอร ประเภทของขอมลู -a image เตรียมดิกสจากแฟมขอมูลดสิ กเ สมือนช่ือ image -d domain เตรยี มดสิ กจ ากเครอ่ื งคอมพิวเตอรเสมือนชื่อ domain --root-password ตั้งคา รหสั ผา น โดยแทนคา รหัสผานที่ตัวแปร $PASSWORD password:$PASSWORD --password user:pass ตัง้ คาบญั ชผี ใู ช user ใหมรี หสั ผา นเปน pass --hostname newhostname ตั้งคา ชอื่ เคร่ืองใหมเ ปน newhostname --install pkg ติดตงั้ แพ็คเกจ pkg ใหม --keep-user-account เกบ็ รักษาบญั ชผี ใู ชชื่อ username ไว username --remove-user-accounts ลบบัญชีผูใชช ่ือ username username --copy src:dst คดั ลอกแฟมขอมูล src ไปไวที่ dst โดยขอมูล src เปน ขอมูลใน อมิ เมจ --copy-in src:dst คดั ลอกแฟมขอมูล src ไปไวท่ี dst โดยขอมูล src เปน ขอมูลใน เครอื่ ง --delete target ลบแฟมขอมลู หรือไดเรกทอรีชอ่ื target ทิ้ง --firstboot-command เม่ือรีบูตเคร่อื งข้ึนมาครงั้ แรกในส่ังคำสั่ง command มีพารามเิ ตอร 'command arg' เปน arg --mkdir dir สรางไดเรกทอรี dir --move src:dst ยา ยแฟม ขอ มูล src ไปไวท ่ี dst โดยขอมลู src เปนขอ มลู ในอิมเมจ โดยโปรแกรม virt-sysprep มีคุณสมบัติสามารถแกไขขอมูลไดหลายรูปแบบ โดยผูอานสามารถระบุ พารามิเตอรสำหรับขอ มูลทต่ี อ งการเปลย่ี นไดต าม 152

ตารางที่ 8.1 โดยเครื่องมือรองรบั การสรา งแมแ บบดว ยกัน 2 รูปแบบ คือ 1) สรา งแมแบบจากเคร่ืองคอมพิวเตอรเ สมือนทห่ี ยุดการทำงานไปแลว วธิ ีการนี้โปรแกรม virt-sysprep จะคน หาดสิ กที่เกยี่ วของ และดำเนินการลบขอมูลตามท่ีกำหนด เชน หากตอ งการสรางแมแ บบจากเครื่องคอมพวิ เตอรเ สมอื นตวั อยา งท่สี รา งไวแ ลว สามารถใชคำสั่ง # virt-sysprep -d demo-centos --root-password password:123456 เมื่อพิมพคำสั่งนี้ จะปรากฏผลลัพธดังภาพที่ 8.7 โดยโปรแกรม virt-sysprep จะลบขอมูลขยะ บันทกึ การใชงาน และเปล่ยี นรหัสผา นของบญั ชีผูใช root เปน 123456 ภาพที่ 8.7 หนา จอผลลัพธค ำส่ังเตรยี มเครอ่ื งคอมพวิ เตอรเ สมอื น 2) สรา งแมแบบจากดิสกของเครือ่ งคอมพวิ เตอรเ สมือนไมไดถ ูกใชง านอยู ในบางกรณี ผูอานไดทำสำเนาเครื่องคอมพิวเตอรเสมือนโดยมีแฟมขอมูลดิสกเสมือนเก็บไว จำนวนมาก และตองการใชแ ฟมขอมูลดสิ กเสมือนสำหรบั เตรียมการสรา งเคร่ืองคอมพิวเตอรเสมือน ใหม ดังนั้น เคร่อื งมอื virsh-sysprep จงึ ออกแบบมาใหร องรับการสรา งแมแบบจากแฟมขอมูลดิสก เสมอื นโดยตรงโดยที่ไมจำเปน ตองมีเครอื่ งคอมพวิ เตอรเ สมอื นสรางไวใ นระบบ ในกรณนี ี้ ผอู า นจะใช ดิสกที่มีอยูแลวในเครื่องคอมพิวเตอรเสมือนที่สรางไว โดยสามารถตรวจสอบที่อยูของแฟมขอมูล ดสิ กเสมอื น ดว ยคำสงั่ 153

# virsh domblklist demo-centos ซึง่ ชือ่ แฟม ขอมูลทปี่ รากฏของแตล ะคนอาจไมเหมือนกันก็ได เนอื่ งจากอาจมีการสรางและลบเครื่อง คอมพิวเตอรเสมือนหลายคร้งั โดยโปรแกรม KVM จะเติมตวั เลขทายช่ือแฟมขอมูลไลลำดับไปเร่ือย ๆ เชน -1 -2 เปนตน เมื่อไดขอมูลที่อยูของแฟมขอมูลดิสกเสมือนแลว เชน เปนแฟมขอมูลตั้งอยูท่ี /var/lib/libvirt/images/demo-centos-1.qcow2 สามารถใชค ำสัง่ # virt-sysprep -a /var/lib/libvirt/images/demo-centos-1.qcow2 --root-password password:123456 เมื่อพิมพคำสั่งนี้ จะปรากฏผลลัพธคลายการสรางแมแบบจากเครือ่ งคอมพิวเตอรเสมือนทีห่ ยุดการ ทำงานแลว โดยโปรแกรม virt-sysprep จะลบขอมูลขยะ บันทึกการใชงาน และเปลี่ยนรหัสผาน ของบัญชีผูใช root เปน 123456 เพียงเทานี้แฟมขอมูลดิสกเสมือนที่เตรียมไวก็เหมาะสำหรับการ ทำสำเนาแลว 8.4 การทำสำเนาของเครือ่ งคอมพวิ เตอรเสมือน การทำสำเนาเครื่องคอมพิวเตอรเสมือน หมายถึง กระบวนการการคัดลอกการตั้งคาของเครื่อง คอมพิวเตอรเสมือนเดิม รวมทั้งขอมูลทุกอยางในทุกดิสกเสมือนจากเครื่องคอมพิวเตอรตั้งตน ไปยังเครื่อง คอมพวิ เตอรเสมอื นอีกครงั้ หนึง่ หากตอ งการทำสำเนาเครอื่ งคอมพิวเตอรท สี่ รางไวกอ นหนาช่อื demo-centos เปน อกี เคร่อื งคอมพิวเตอรเ สมือนชอ่ื demo-centos-2 สามารถใชค ำสง่ั # virt-clone --original demo-centos --name demo-centos-2 --auto-clone เมอ่ื พมิ พค ำส่ัง จะปรากฏผลลพั ธด ังภาพที่ 8.8 วาการทำสำเนาเครื่อง demo-centos-2 เสร็จเรียบรอย แลว โดยใชระยะเวลาในการทำสำเนาขึ้นอยูกับหลายปจจัย เชน จำนวนแฟมขอมูลดิสกเสมือนที่มี ปริมาณ ขอ มลู ที่เกบ็ อยูใ นดสิ กเสมือน และความเรว็ ในการเขยี นอานฮารด ดสิ ก เปนตน ภาพท่ี 8.8 หนา จอผลลัพธค ำส่ังโคลนเคร่อื งคอมพิวเตอรเสมือน 8.5 การตรวจสอบการทำสำเนาของเครื่องคอมพิวเตอรเสมือน เม่ือทำสำเนาเครื่องคอมพิวเตอรเ สมือนแลว เคร่ืองคอมพวิ เตอรเสมือนจะถูกลงทะเบียน แตอาจไมไดอยู สถานะเปด การทำงาน ผอู า นสามารถตรวจสอบรายการเคร่ืองคอมพวิ เตอรเ สมือน โดยใชคำส่งั # virsh list --all 154

เนื่องจากเครื่องคอมพิวเตอรเสมือนนั้น โดยหลักขอมูลทั้งหมดจะถูกเก็บไวที่แฟมขอมูลดิสกเสมือน เนื่องจากการตั้งคาเครื่องคอมพิวเตอรเสมือนใหใชทรัพยากรอะไร ปริมาณเทาไรเปนเพียงเมตาดาทาเทาน้ัน ผอู านสามารถตรวจสอบชื่อและจำนวนดิสกเสมือนของเคร่ืองคอมพิวเตอรเ สมือนท้ัง 2 เคร่ืองวาตรงกันหรือไม ดวยคำส่งั # virsh domblklist demo-centos # virsh domblklist demo-centos-2 เมื่อพิมพคำส่ังจะปรากฎผลลพั ธดงั ภาพท่ี 8.9 โดยทั้งสองเครื่องมกี ารตั้งคาดิสกที่เหมือนกนั และเครื่อง คอมพวิ เตอรเสมือนที่เปน เครื่องสำเนาจะมีแฟมขอมูลดสิ กเสมือนคลายกบั เครื่องตนฉบบั แตจะถูกเติมดานหลัง ชื่อวา -clone ถาหากผูอานทำสำเนาอีกชื่อหลังที่ถูกเติมจะมีตัวเลขตอทายเรียงไปเรื่อย ๆ เชน -clone-1 - clone-2 เปน ตน ภาพที่ 8.9 หนาจอผลลัพธค ำสั่งแสดงรายการดสิ กเ สมอื นเคร่ืองคอมพิวเตอรเสมือน ถัดไปคอื การตรวจสอบขนาดของดสิ กเ สมอื นทัง้ สองเครื่องวาตรงกนั หรือไม โดยใชค ำสงั่ # virsh domblkinfo demo-centos vda --human # virsh domblkinfo demo-centos-2 vda --human เมื่อพิมพคำสั่งจะปรากฎผลลัพธดังภาพที่ 8.10 สังเกตไดวาขนาดความจุของดิสกเสมือนในเครื่อง คอมพวิ เตอรเ สมอื นตั้งตนและในเครื่องคอมพวิ เตอรเสมอื นสำเนามีความจุ (Capacity) เทา นั้น มกี ารใชงานจริง (Allocation) ใกลเคียงกัน แตมีขนาดที่ใชพื้นที่บนดิสกจริง (Physical) ไมเทากัน ทั้งนี้เพราะการทำสำเนา เครอื่ งคอมพิวเตอรเ สมือนโดยปกติจะทำสำเนาขอมลู ในดสิ กเ สมอื นและจองพื้นท่ีเก็บขอ มูลเพยี งเทา ทใี่ ชเ ทาน้ัน 155

ภาพท่ี 8.10 หนาจอผลลัพธคำส่ังตรวจสอบขนาดของดิสกเสมือน สำหรับการตรวจสอบโดยละเอียด คือ การตรวจสอบถึงแฟมขอมูลและขอมูลของแฟมขอมูลทั้งหมดใน แฟมขอมูลดิสกเสมือนของทั้งสองเครื่องนั้น สามารถใชเครื่องมือ virt-diff โดยระบุชื่อเครื่องคอมพิวเตอร เสมอื นเครอื่ งแยกในพารามิเตอร -d และชอื่ เครอื่ งคอมพวิ เตอรเ สมือนท่ีตองการเปรียบเทียบในพารามิเตอร -D เชน # virt-diff -d demo-centos -D demo-centos-2 ในบางกรณีเครื่องคอมพิวเตอรเสมือนอาจประกอบดวยดิสกเสมือนหลายดิสก ผูอานสามารถ เปรียบเทียบเฉพาะบางดิสกเสมือนที่ตองการไดไดโดยระบุตำแหนงที่อยูของแฟมขอมูลดิสกเสมือนของเครื่อง แรกในพารามิเตอร -a และตำแหนงที่อยูของแฟมขอมูลดิสกเสมือนของเครื่องที่ตองการเปรียบเทียบใน พารามิเตอร -A เชน # virt-diff -a /var/lib/libvirt/images/demo-centos-1.qcow2 -A /var/lib/libvirt/images/demo-centos-1-clone.qcow2 เมื่อพิมพคำสั่งจะปรากฎผลลัพธเปนการเทียบความแตกตางของทั้งสองเครื่องคอมพิวเตอรเสมือนหรือ ดิสกเสมือนซึ่งอาจมีความยาวเกินจำนวนบรรทัดที่แสดงไดใน 1 หนาจอ ในกรณีนี้ ผูอานสามารถกำหนดให โปรแกรม virt-diff แสดงผลลัพธในรูปแบบ Comma Separated Value (CSV) และบันทึกเก็บไวไดดวยการ เพม่ิ พารามิเตอร --csv และสงออกเอาตพ ตุ จากทแ่ี สดงบนหนาจอไปทท่ี ้งั หนาจอและแฟมขอมูล compare.csv ดวยคำส่งั # virt-diff -d demo-centos -D demo-centos-2 --csv | tee compare.csv หรอื # virt-diff -a /var/lib/libvirt/images/demo-centos-1.qcow2 -A /var/lib/libvirt/images/demo-centos-1-clone.qcow2 --csv | tee compare.csv เมื่อพิมพคำสั่งจะปรากฎผลลัพธเปนการเทียบความแตกตางของทั้งสองเครื่องคอมพิวเตอรเสมือนหรือ ดิสกเสมือนโดยแสดงผลลัพธบนหนาจอและบันทึกลงแฟม ขอมูลชื่อ compare.csv ผูอานสามารถใชโปรแกรม แกไขขอความทั่วไปเขาไปตรวจสอบความแตกตางโดยละเอียดไดในภายหลัง นอกจากนี้ ผูอานยังสามารถ 156

ประยุกตใชโปรแกรม virt-diff บันทึกแฟมขอมูลความแตกตางเปน ระยะ ๆ เพื่อบันทึกความเปลี่ยนแปลงของ เครอ่ื งที่ใชง านกับเคร่อื งตนแบบกไ็ ด 8.5 การยายเครื่องคอมพวิ เตอรเสมอื นไปเครอ่ื งอืน่ หนึ่งในคุณสมบัติของโปรแกรม KVM ที่เปนคุณสมบัติที่สำคัญ คือ ความสามารถในการยายเครื่อง คอมพิวเตอรเสมือนไปเครือ่ งอื่นไดในขณะที่เครือ่ งกำลงั ทำงานอยู ซึ่งเปนคุณสมบัติที่สำคัญของโปรแกรมกลุม ไฮเปอรไวเซอรที่สามารถรองรับการทำงานขนาดใหญ โดยโปรแกรม KVM รองรับการยายเครื่องคอมพิวเตอร เสมือนขณะที่เครื่องกำลังทำงานอยู 2 รูปแบบ คือ รูปแบบที่แบงปนพื้นที่เก็บขอมูล (Shared storage) และ รูปแบบที่ไมไดแบงปนพื้นที่เก็บขอมูล (Non-shared storage) ซึ่งกอนการยายเครื่องคอมพิวเตอรเสมือน เคร่อื งคอมพิวเตอรแ มขายทัง้ สองเคร่ืองจำเปน จะตอ งติดตงั้ โปรแกรม KVM และเปด ใชง านใหเรยี บรอ ยกอ น สำหรับขั้นตอนการยายเครื่องคอมพิวเตอรเสมือนในรูปแบบที่แบงปนพื้นที่เก็บขอมูลนั้น ผูอาน จำเปนตองตั้งคาเครื่องแมขายทั้งสองเครื่องใหสามารถเขาถึงพื้นที่เก็บขอมูลรวมกันใหไดกอน ซึ่งพื้นที่เก็บ ขอมูลรวมกันสามารถเปน รูปแบบตาง ๆ ในปจ จุบนั เชน การแบง ปนที่เก็บขอมูลในเครื่องผานโพรโตคอล NFS การแบงปนผานอปุ กรณท ี่เก็บขอ มลู เครือขา ยอยา ง NAS หรอื SAN เปนตน การตั้งคาแบงปนแฟมขอมูลผานโพรโตคอล NFS มีการตั้งคาใน 2 สวน คือ การตั้งคาเครื่องที่ตองการ แบง ปน แฟม ขอมูล และการต้ังคาเคร่อื งทีต่ อ งการเขาถึงแฟม ขอ มลู สำหรับการตัง้ คาเคร่ืองทต่ี องการแบงปน แฟมขอมลู สามารถกำหนดที่อยูไดเรกทอรที ่ีตองการแบงปนไว ในแฟม ขอมูล /etc/exports ไดดวยคำส่งั # vi /etc/exports จากนั้น เพิ่มไดเรกทอรีเริ่มตนที่เก็บดิสกเสมือนของโปรแกรม KVM ที่อยูไอพีหรือเครือขายเครื่องที่ ตองการแบงปนขอมูล และการตั้งคาการแบงปน จำนวน 1 บรรทัดเวนระหวางขอมูลดวยเวนวรรคหรือแท็บ เชน ตองการแบง ปน ใหก บั เครอื่ งที่มีทอ่ี ยูไอพีเปน 172.16.208.154 ดงั ภาพที่ 8.11 ดังน้ี /var/lib/libvirt/images 172.16.208.154 (rw,no_root_squash,async) ภาพท่ี 8.11 เนื้อหาการแบงปนไดเรกทอรขี องแฟมขอมลู /etc/exports ตวั เลอื ก rw หมายถงึ แบง ปนขอมลู ใหเขียนอานได ตวั เลอื ก no_root_squash หมายถงึ บัญชีผูใ ช root ในเครอ่ื ง 172.16.208.154 ยังคงมสี ิทธิเ์ ปนเหมือน บัญชีผูใช root ในเคร่ืองท่แี บงปน (ในกรณนี ี้ เครอ่ื งทแ่ี บงปนมที ีอ่ ยไู อพเี ปน 172.16.208.141) ตัวเลอื ก async หมายถงึ คำสัง่ ทด่ี ำเนนิ การกบั ขอมลู ไมต อ งรอชดุ คำสั่งกอนหนา ทำงานเสร็จกอ น 157

ขน้ั ตอนถัดไป คือ เปด การทำงานของบริการ nfs-server ทนั ที และเม่อื รีบูตเครอื่ ง # systemctl start nfs-server # systemctl enable nfs-server ในกรณีที่ผูอานแกไขแฟมขอมูล /etc/exports ผูอานสามารถโหลดการตั้งคาใหมโดยที่ไมจำเปนตอง รีสตารท บรกิ าร nfs-server ไดดว ยคำส่ัง # exportfs -arv ในกรณีที่ผูอานตองการตรวจสอบวามีไดเรกทอรีไหนบางที่ไดแบงปนไปแลว และแบงปนดวยการตั้งคา แบบใด สามารถตรวจสอบไดด ว ยคำส่ัง ดงั น้ี # exportfs -s จากนั้นเปดการทำงานของไฟรวอลล ในกรณีที่เครื่องแมขายมีเครื่องที่ตองแบงปนขอมูลจำนวนมาก สามารถเปด พอรตไฟรวอลล ดวยคำส่ัง # firewall-cmd --permanent --add-service=nfs # firewall-cmd --permanent --add-service=mountd # firewall-cmd --permanent --add-service=rpc-bind # firewall-cmd --reload แตถาตองการเพิ่มความมั่นคงปลอดภัยใหกับการแบงปนขอมูลผานโพรโตคอล NFS เดิมผูอานสามารถ ใชงานฟงกชัน TCP Wrappers แตตั้งแต CentOS 7 หรือใหมกวา ฟงกชันของ TCP Wrappers ไดถูกเลิกใช ไปแลว ดังนั้น ผูอานสามารถประยุกตใชการทำงานของ firewalld โดยการสรางโซนพิเศษที่ใชแบงปน แฟม ขอ มูลผานโพรโตคอล NFS ได ดังน้ี 1) สรางโซนใหมชอ่ื kvmshare # firewall-cmd –new-zone=kvmshare –permanent # firewall-cmd –reload 2) จากนั้นเพิ่มที่อยูเครื่องที่ตองการแบงปนขอมูล เชน แบงปนไปเครื่องที่มีที่อยูไอพีเปน 172.16.208.154 ดังนี้ # firewall-cmd --add-source=172.16.208.154 --zone=kvmshare – permanent 3) เพิม่ บริการของโพรโตคอล NFS ทีอ่ นุญาตใหเฉพาะโซน kvmshare # firewall-cmd --zone=kvmshare --add-service=nfs --permanent 158

# firewall-cmd --zone=kvmshare --add-service=mountd --permanent # firewall-cmd --zone=kvmshare --add-service=rpc-bind –permanent 4) โหลดการตง้ั คาใหม และตรวจสอบรายละเอยี ดของโซน kvmshare # firewall-cmd –reload # firewall-cmd --zone=kvmshare --list-all สำหรับการตั้งคาเครื่องที่ตองการเขาถึงแฟมขอมูล สามารถใชตรวจสอบไดเรกทอรีที่ถูกแบงปนผาน โพรโตคอล NFS จากเคร่ืองที่แบงปน ไดด ว ยคำส่งั # showmount -e 172.16.208.141 การเช่อื มตอ ไดเรกทอรีสามารถทำไดด วยคำสั่ง mount ดังน้ี # mount 172.16.208.141:/var/lib/libvirt/images /var/lib/libvirt/images แตการเชื่อมตอดวยคำสั่ง mount จะไมคงทนหลังการรีบูต ผูอานจำเปนตองแกไขแฟมขอมูล /etc/fstab ดวยการเพมิ่ ขอมูลการเชือ่ มตอ ดังภาพที่ 8.12 ภาพท่ี 8.12 เนื้อหาการเพม่ิ การเชอื่ มตอพารทติชนั ของแฟม ขอมูล /etc/fstab เนื่องจากการใชงานไดเรกทอรีเก็บดิสกเสมือนของโปรแกรม KVM ของเครื่อง 172.16.208.154 จะ เขาถึงดิสกของเครื่อง 172.16.208.141 ผานโพรโตคอล NFS ดังนั้น ผูอานจำเปนตองอนุญาตการเขาถึงใน SELinux ดว ยคำสัง่ # setsebool -P virt_use_nfs on ในขั้นตอนสุดทาย หากตองการยายเครื่องคอมพิวเตอรเสมือนชื่อ demo-centos จากเครื่องที่มีที่อยู ไอพเี ปน 172.16.208.141 สามารถใชคำส่ังได # virsh migrate --unsafe --persistent --live demo-centos qemu+ssh://172.16.208.154/system 159

- พารามิเตอร unsafe หมายถงึ บังคบั การเคล่ือนยา ยเคร่อื งขณะท่เี ครอื่ งกำลังทำงานอยู - พารามิเตอร persistent หมายถึง ใหเคร่อื งคอมพวิ เตอรเสมือนไปอยถู าวรทีเ่ ครอ่ื งปลายทาง - พารามเิ ตอร live หมายถงึ การเคลือ่ นยายเครือ่ งคอมพวิ เตอรขณะกำลังทำงานอยู โดยที่รูปแบบของเครื่องปลายทางจะเปน qemu+ssh://<ที่อยูไอพี>/system หมายถึง การเขาถึงสทิ ธิ์ ผดู ูแลระบบของโปรแกรม KVM ในเครอ่ื งท่มี ีท่ีอยไู อพีตามทร่ี ะบุ เม่อื พิมพคำสง่ั เสร็จ โปรแกรม KVM จะพยายามคัดลอกขอมลู ท่ีอยูในแรมของเคร่ืองคอมพวิ เตอรเสมือน demo-centos ไปยังเครื่องปลายทาง คือ เครื่องที่มีที่อยูไอพีเปน 172.16.208.154 โดยไมคัดลอกขอมูลดิสก เสมือน เม่อื เสร็จสมบรู ณ เครอ่ื งคอมพิวเตอร demo-centos ทีเ่ คร่อื งปลายทางจะเปด การทำงานโดยอัตโนมตั ิ สำหรับขั้นตอนการยายเครื่องคอมพิวเตอรเสมือนในรูปแบบที่ไมแบงปนพื้นที่เก็บขอมูลนั้น เครื่องตน ทางและเครื่องปลายทางไมจำเปนตองการตั้งคาการแบงปนแฟมขอมูลผานโพรโตคอล NFS เพราะขอมูลของ ดิสกเสมือนและเครื่องคอมพิวเตอรเสมือนจะถูกคัดลอกผา นโพรโตคอล SSH ซึ่งเปนโพรโตคอลมาตรฐานแทน แตการจะคัดลอกเคร่ืองคอมพิวเตอรเสมือนใหไปทำงานกับเครื่องแมขายอีกเคร่ืองหนึ่งไดนั้น ทั้งเครื่องตนทาง (ที่อยูไอพี 172.16.208.154) และเครื่องปลายทาง (ที่อยูไอพี 172.16.208.141) จำเปนตองรูจักกันในรูปแบบ ชอ่ื โฮสตก อน โดยสามารถตงั้ คาแตล ะเคร่อื งไดดังน้ี 1) ตั้งชื่อโฮสตท่ีเครื่องตนทางดวยคำสั่ง hostnamectl และระบุชื่อโฮสตของเครื่องปลายทางไวท่ี /etc/hosts ของเครอ่ื งตน ทาง ดงั น้ี 172.16.208.154 # hostnamectl set-hostname source.example.com 172.16.208.154 # echo \"172.16.208.141 destination.example.com\" >> /etc/hosts 2) ตั้งชื่อโฮสตท่ีเครื่องปลายทางดวยคำสั่ง hostnamectl และระบุชื่อโฮสตของเครื่องตนทางไวที่ /etc/hosts ของเคร่อื งปลายทาง ดังนี้ 172.16.208.141 # hostnamectl set-hostname destination.example.com 172.16.208.141 # echo \"172.16.208.154 source. example.com\" >> /etc/hosts 3) จากน้ันเปด พอรตไฟรว อลลที่เคร่ืองปลายทางเพื่อรับการเช่ือมตอของโปรแกรม KVM โดยโปรแกรม KVM จะใชพ อรตตั้งแต 49152 ถึง 49215 ข้นึ อยกู บั ความเร็วเครือขายและจำนวนเครื่องที่ตองการ ยา ยพรอ มกัน ดงั คำสง่ั # firewall-cmd --add-port=49152-49215/tcp --permanent # firewall-cmd –reload เฉพาะในกรณีที่เครื่องแมขายปลายทางถูกตั้งขึ้นมาใหม และยังไมเคยสรางเครื่องคอมพิวเตอร เสมือนมากอน เครื่องแมขายปลายทางจำเปนตองการอางขอมูล (data pool) สำหรับเก็บขอมูลเครื่อง 160

คอมพิวเตอรเสมือนกอน ในกรณีที่ผูอานไมแนใจวาเครื่องแมขายนั้นมีอางขอมูลหรือยัง สามารถ ตรวจสอบไดดวยคำสง่ั น้ี # virsh pool-list 4) หากไมมีอางขอมูล ใหสรางอางขอมูลใหมโดยมีที่อยูเปนไดเรกทอรีเดยี วกันกับเครื่องตนทาง ผูอาน สามารถสรา งอา งขอ มลู ใหมด วยการสรา งแฟมขอมูล default-pool.xml ดว ยคำสงั่ ดังน้ี # vi default-pool.xml จากน้นั เพ่ิมเนอ้ื หาของแฟมขอมูล ลงไปดงั ตอไปน้ี <pool type='dir'> <name>images</name> <target> <path>/var/lib/libvirt/images</path> </target> </pool> จากนัน้ สงั่ ใหโ ปรแกรม KVM รูจ กั อา งขอ มูลและเปด การใชงาน ดว ยคำสงั่ # virsh pool-define pool-images.xml # virsh pool-start images หลังจากท่ีสั่งใหอางขอมูลทำงานแลว ผูอานสามารถตรวจสอบการทำงานของอางขอมูลไดดวย คำสัง่ นี้ # virsh pool-list 5) ใชคำสั่งยายเครื่องคอมพิวเตอรเสมือนชื่อ demo-centos จากเครื่องที่มีที่อยูไอพีเปน 172.16.208.141 สามารถใชคำส่งั ได # virsh migrate --copy-storage-all --persistent --live demo-centos qemu+ssh://172.16.208.154/system - พารามิเตอร copy-storage-all หมายถึง คัดลอกทั้งขอมูลเครื่องคอมพิวเตอรเสมือนและทุกดิสก เสมอื น - พารามิเตอร persistent หมายถึง ใหเครื่องคอมพิวเตอรเสมือนไปอยถู าวรท่เี ครอื่ งปลายทาง - พารามเิ ตอร live หมายถึง การเคลอื่ นยา ยเครือ่ งคอมพวิ เตอรขณะกำลังทำงานอยู โดยที่รูปแบบของเครื่องปลายทางจะเปน qemu+ssh://<ที่อยูไอพี>/system หมายถึง การ เขาถงึ สิทธ์ผิ ดู ูแลระบบของโปรแกรม KVM ในเคร่อื งที่มีท่อี ยไู อพตี ามท่ีระบุ การยายเครื่องคอมพิวเตอรเสมือนทั้งสองรูปแบบเหมาะสมในสถานการณที่ตางกัน ในกรณีที่ หนวยงานสามารถจัดหาที่เก็บขอมูลกลางผานโพรโตคอลตาง ๆ เชน NFS NAS SAN iSCSI หรือ Fiber 161

channel เปนตน การบันทึกเครื่องคอมพิวเตอรเสมือนไวพื้นที่เก็บขอมูลสวนกลางจะชวยใหการยาย เครื่องคอมพิวเตอรเสมือนสามารถทำไดอยางรวดเร็ว และแทบไมมีเวลาหยุดใหบริการเลย อยางไรก็ดี หากจำเปนตองยายเครื่องคอมพิวเตอรเสมือนไปยังที่ตั้งอื่น การยายเครื่องคอมพิวเตอรเสมือนโดย คัดลอกขอมูลทั้งหมดไป จะชวยลดเวลาการหยุดใหบริการเมื่อเทียบกับการคัดลอกแฟมขอมูลดิสก เสมอื นและการดมั (dump) ขอมูลเครือ่ งคอมพวิ เตอรเ สมอื นเอง 162

บทสรุป การบนั ทึกสถานะของเครื่องคอมพวิ เตอรเสมือนนนั้ มเี ง่ือนไขข้นั ต่ำ คือ เครอ่ื งคอมพิวเตอรเ สมือนจะตอง ปดการทำงานอยูและดิสกทุกดิสกในเครื่องคอมพิวเตอรเสมือนจะตองอยูในรูปแบบ Qcow2 เทานั้น และ บันทึกสถานะของเครื่องคอมพิวเตอรเสมือน เรียกวา snapshot การสรางสถานะของเครื่องคอมพิวเตอร เสมือนจะชวยใหผูอานสามารถยอนหลังหรือเดินหนาไปยังสถานะที่บันทึกไวอยูไดตามตองการ ขอดีของการ ทำงานเบื้องหลังแบบนี้คือ 1) สามารถบันทึกการสรางเครื่องคอมพิวเตอรเสมือนไดไมจำกัด และสามารถ ดำเนนิ การในรูปแบบตนไมไดซึ่งจะสามารถเก็บสถานะของเคร่ืองท่ซี ับซอ น 2) เนอ่ื งจากหลงั การทำ Snapshot โปรแกรม KVM จะสรางแฟมสวนตางไวรออยูแลว การสรางบันทึกสถานะของเครื่องครั้งใหมสามารถ ดำเนินการไดอ ยางรวดเรว็ แตทง้ั น้ีก็ตอ งแลกกบั ขอเสีย คือ 1) โปรแกรม KVM จะสรางดิสกสว นตางซอนขึ้นมา เรอ่ื ย ๆ ทำใหประสทิ ธิภาพของดสิ กลดลง 2) หากสถานะท่ีอยูร ะหวา งดสิ กเริม่ ตน และสถานะปจจุบันเสียหาย จะทำใหไมส ามารถอานขอมูลจากดิสกข องเครื่องคอมพิวเตอรเสมือนได การทำสำเนาเครอ่ื งคอมพวิ เตอรเ สมือน คอื การทำสำเนาขอมลู ทง้ั เคร่ืองคอมพวิ เตอรเสมือนใหมอีกครั้ง ซึ่งจะไมทำใหประสิทธิภาพเครือ่ งลดลง แตจะใชพื้นที่เก็บขอมูลปริมาณมากแทน วิธีการนี้จึงเหมาะสมสำหรับ การปรับใชในสภาพการใชงานจริง สามารถใชคำสั่ง virt-clone ในกรณีที่ตองการทำสำเนาเครื่องในปริมาณ มาก ผูอานสามารถใชเคร่ืองทีท่ ำสำเนามาปรับแตงเพื่อสรางเปนแมแ บบดวยเครื่องมือ virt-sysprep กอนแลว จึงนำเครอ่ื งแมแ บบดงั กลา วไปทำสำเนาเปนเครื่องอน่ื อีกที การยายเครื่องคอมพิวเตอรเสมือนไปเครื่องอื่นสามารถทำไดขณะที่เครื่องกำลังทำงานอยู สามารถแบง รูปแบบการยายออกเปน 2 รูปแบบ คือ 1) รูปแบบที่แบงปนพื้นทีเ่ ก็บขอมูล (Shared storage) เปนรูปแบบที่ เครื่องแมขายทั้งสองเครื่องสามารถเขาถึงที่เก็บขอมูลเดียวกัน การยายรูปแบบนี้จะทำการยายขอมูลใน หนวยความจำหลัก และคาเมตาดาทาของเครื่องคอมพิวเตอรเสมือนเทานั้น ซึ่งสะดวกและใชเวลาไมนาน 2) รูปแบบที่ไมไดแบงปนพื้นที่เก็บขอมูล (Non-shared storage) เปนรูปแบบที่เครื่องแมขายทั้งสองเครื่องไมได เขา ถงึ ท่ีเก็บขอมูลเดยี วกัน การยา ยรปู แบบน้ีจะทำการยายขอมลู ดิสกเสมือน ขอ มลู ในหนว ยความจำหลัก และ คาเมตาดาทาของเครื่องคอมพวิ เตอรเสมอื น ทำใหใชเวลานานกวา รูปแบบที่ 1 มาก 163

สรุปคำสงั่ ท่นี า สนใจ เนอื้ หา คำสง่ั หรอื ช่ือคำส่ังทเี่ ก่ียวของ บนั ทกึ สถานะของเครอื่ งคอมพิวเตอรเ สมือนเพื่อหยดุ # virsh managedsave demo-centos การทำงาน การสรางบันทึกสถานะ # virsh snapshot-create-as --domain demo- centos --name snapshot_1 –description \"the first snapshot\" แสดงรายการสถานะที่สรางไว # virsh snapshot-list demo-centos แสดงรายละเอียดของสถานะทส่ี รางไว # virsh snapshot-info --domain demo-centos --snapshotname snapshot_1 กคู นื สถานะของเคร่ืองคอมพิวเตอรเ สมือน # virsh snapshot-revert demo-centos snapshot_1 ลบการบันทึกสถานะออกจากเคร่ืองคอมพวิ เตอร # virsh snapshot-delete --domain demo- เสมอื น centos -snapshotname snapshot_1 แพ็คเกจเคร่ืองมือสำหรับบริหารจดั การเคร่ือง libguestfs-tools คอมพวิ เตอรเสมอื น สรางแมแ บบจากเครื่องคอมพิวเตอรเ สมือนตัวอยา ง # virt-sysprep -d demo-centos --root- ท่ีสรา งไวแลว พรอ มกำหนดรหัสผานของ root password password:123456 สรา งแมแ บบจากดสิ กเ สมือนทีส่ รางไวแ ลว พรอ ม # virt-sysprep -a กำหนดรหสั ผานของ root /var/lib/libvirt/images/demo-centos-1.qcow2 --root-password password:123456 สรางแมแ บบจากดสิ กเ สมือน พรอ มกำหนดรหัสผาน # virt-sysprep -a ของ root /var/lib/libvirt/images/demo-centos-1.qcow2 --root-password password:123456 ทำสำเนาเคร่ืองคอมพวิ เตอรเ สมือน # virt-clone --original demo-centos --name demo-centos-2 --auto-clone ตรวจสอบความแตกตา งของขอมลู ในดสิ กร ะหวาง # virt-diff -d demo-centos -D demo-centos-2 เครอ่ื งคอมพวิ เตอรเ สมือน ตรวจสอบความแตกตา งของขอมูลในดสิ กร ะหวา ง # virt-diff -a /var/lib/libvirt/images/demo- ดสิ กเสมอื นท้งั สองแฟมขอมลู centos-1.qcow2 -A /var/lib/libvirt/images/demo-centos-1- clone.qcow2 การตง้ั คา แบงปนขอมลู ผานโพรโตคอล NFS ฝง # vi /etc/exports แบง ปน เพม่ิ ขอมลู /var/lib/libvirt/images 172.16.208.154 (rw,no_root_squash,async) เปด การทำงานของ NFS # systemctl start nfs-server 164

เนื้อหา คำสัง่ หรือชื่อคำสัง่ ท่ีเก่ียวของ # systemctl enable nfs-server การต้งั คา แบง ปน ขอมลู ผานโพรโตคอล NFS ฝง เปดไฟรว อลล เขาถึงขอ มูลแบง ปน # firewall-cmd --permanent --add- คำสง่ั ยายเครื่องคอมพิวเตอรเ สมือน demo-centos service=nfs ไปไวทเี่ ครือ่ งอน่ื ดวยวธิ แี บง ปนทเ่ี ก็บขอมลู # firewall-cmd --permanent --add- การต้งั คาการยายเครื่องคอมพิวเตอรเ สมือน (เฉพา service=mountd นะกรณีไมแบง ปน ทีเ่ กบ็ ขอมูล) # firewall-cmd --permanent --add- service=rpc-bind คำสง่ั ยายเคร่ืองคอมพวิ เตอรเ สมือน demo-centos # firewall-cmd –reload ไปไวทเ่ี ครื่องอืน่ ดว ยวิธไี มแบงปนทเ่ี กบ็ ขอมลู เชื่อมตอ ไดเรกทอรโี ดยตรง # mount 172.16.208.141:/var/lib/libvirt/images /var/lib/libvirt/images ตัง้ คา SELinux # setsebool -P virt_use_nfs on # virsh migrate --unsafe --persistent --live demo-centos qemu+ssh://<ip_address>/system ต้งั ช่อื โฮสตใ น /etc/hosts ใหทง้ั สองเครื่องรูจักกัน เปด ไฟรวอลลเ คร่อื งปลายทาง # firewall-cmd --add-port=49152-49215/tcp --permanent # firewall-cmd –reload สรา ง Pool ในกรณีท่ีเครื่องปลายทางยังไมเคยสราง เครื่องคอมพิวเตอรเสมือน # vi default-pool.xml จากน้ันเพ่ิมเนอ้ื หาของแฟมขอมูล default- pool.xml # virsh pool-define pool-images.xml # virsh pool-start images # virsh migrate --copy-storage-all --persistent --live demo-centos qemu+ssh://172.16.208.154/system 165

แบบฝก หดั บทท่ี 8 1. บอกความแตกตางระหวา งคำสง่ั virsh managedsave และ virsh suspend 2. อธิบายคำสง่ั ที่ใชส รา ง Snapshot ใหกับเครื่องคอมพวิ เตอรเสมือน 3. บอกปญหาของการสราง Snapshot ใหกับเครอ่ื งคอมพวิ เตอรเ สมือน 4. คำส่ัง virt-sysprep มไี วเ พื่อะไร 5. อธิบายวิธีการใชงานคำสั่ง virt-clone 166

6. คำสง่ั virt-diff มไี วต รวจสอบอะไร 7. บอกคำสง่ั เปดการอนญุ าตของไฟรว อลลเ พอ่ื แบงปนแฟม ขอมูลผานโพรโตคอล NFS 8. บอกคำสง่ั เปดการอนุญาตของไฟรว อลลเพอ่ื อนญุ าตใหเ ขา ถงึ โปรแกรม KVM เพอ่ื ยา ยเครื่องคอมพิวเตอร เสมือนได 9. อธิบายข้นั ตอนวธิ ีการสรา งอางขอ มูล 10. หากตองการยา ยเครื่องคอมพิวเตอรเสมือนจากเครื่องแมข า ยหน่ึงไปอีกเครื่องแมขา ยหนึ่งโดยไมมีการ แบงปน พน้ื ทีเ่ กบ็ ขอ มูลสามารถทำไดหรอื ไม อยางไร 167

168

พ้ืนฐานเทคโนโลยีบรรจคุ อนเทนเนอร บทนำ เทคโนโลยีบรรจุคอนเทนเนอรเปนหนึ่งในเทคโนโลยีที่ใชกันมากที่สุดเมื่อตองมีการปรับใชระบบ สารสนเทศบนสถาปตยกรรมคลาวด และเปนเทคโนโลยีที่สำคัญที่ชวยขับเคลื่อนผูใหบริการคลาวดโดยเขามา ขัดจังหวะเทคโนโลยีเสมือนที่เกิดขึ้นกอน เนื่องจากทำใหการสงมอบซอฟตแวร โดยเฉพาะการติดตั้ง และการ ปรับใชงานในสภาพแวดลอมที่แตกตางกันสามารถดำเนินการไดดวยกระบวนการแบบเดียวกัน อีกทั้งการสง มอบซอฟตแวรจะไมสงผลกระทบกับซอฟตแวรอ ื่นที่ทำงานอยูบ นเครือ่ งอยูแลว ดวยเหตุนี้ จึงทำใหในปจจุบนั จึงนิยมนำเทคโนโลยบี รรจคุ อนเทนเนอรม าทำงานอยูบนเทคโนโลยเี สมือน 9.1 ความหมายของเทคโนโลยีบรรจุคอนเทนเนอร เทคโนโลยีบรรจุคอนเทนเนอรเปนเทคโนโลยีถูกคิดคนโดย Solomon Hykes ผูบริหารระดับสูงของ บริษัท dotCloud และเปดตัวในงานสัมมนานักพัฒนาภาษาไพทรอนเมื่อวันที่ 15 มีนาคม พ.ศ. 2556 โดย โปรเจคนี้มีชื่อวาด็อกเกอร (Docker) (Solomon Hykes 2013) โปรเจคด็อกเกอรเปนโปรเจคที่เปดเผยรหัส ตนฉบับและเผยแพรผานเว็บไซต Github (GitHub Inc. 2020) แมจะมีโครงการที่เปดเผยรหัสตนฉบับเกิดข้ึน ในภายหลังอยาง rkt ซึ่งหยุดพัฒนาแลว (Red Hat Inc. 2020b) หรือ podman ก็ตาม แตทุกโครงการที่ พฒั นามาพยายามจะทำพารามิเตอรในบรรทดั คำส่ังใหเ หมือนกบั docker ดว ยเหตนุ ีท้ ำใหในปจจบุ ันเวลาพดู ถึง เทคโนโลยีบรรจคุ อนเทนเนอร ผูเขยี นจะพูดถงึ ด็อกเกอรเปนหลัก เพราะเนื่องจากด็อกเกอรกลายเปนมาตรฐาน ทีเ่ กิดขน้ึ เนื่องจากมีการนิยมใชก นั มาก (De facto standard) ไปเรียบรอ ยแลว ดังนั้นเทคโนโลยีบรรจุคอนเทนเนอรจึงใหความหมายเดียวกับด็อกเกอรซึ่งก็คือเครื่องมือที่ซอนความ ซับซอนของกระบวนการของการสรางสิ่งประดิษฐ (Artifact) ของแอปพลิเคชันที่สามารถแจกจายไดงาย (Matthias and Kane 2015) โดยสามารถนำไปปรับใชไดในทุกระดับการขยายตัว ในทุกสภาพแวดลอม และ ปรบั ปรงุ ตัวเองไปพรอ มกบั ข้นั ตอนการทำงานและการตอบสนองของวิธีการพฒั นาซอฟตแ วรแ บบอไจล (Agile) 9.2 หลักการทำงานของเทคโนโลยีบรรจุคอนเทนเนอร เทคโนโลยีบรรจุคอนเทนเนอรมีหลักการ คือ การรวมนำไลบรารีและสภาพแวดลอมที่เกี่ยวของกับ ซอฟตแวรที่ตองการสงมอบมารวมอยูไวในบรรจุภัณฑหนึ่ง โดยเมื่อเวลาซอฟตแวรทำงาน ซอฟตแวรจะ มองเห็นสภาพแวดลอมในมุมที่จำกัด เรียกวา คอนเทนเนอร (Container) เสมือนหนึ่งทำงานอยูบนเครื่อง คอมพวิ เตอรอีกเครื่องหนงึ่ โดยอสิ ระ เทคโนโลยบี รรจคุ อนเทนเนอรม คี วามคลายกับเทคโนโลยีเสมือนตรงท่ีทำใหซอฟตแวรท่ีทำงานอยูทำงาน และรูจักเฉพาะในสภาพแวดลอมท่ีจำกัด แตเทคโนโลยีคอนเทนเนอรไ มไดจำลองฮารดแวรหรือการทำงานของ อุปกรณใด ๆ บนเครื่องคอมพิวเตอร เพียงแตจำกัดสภาพแวดลอมเฉพาะของซอฟตแวรเทานั้น ในขณะท่ี เทคโนโลยีเสมือนจำลองฮารดแวรทำใหตองติดตั้งระบบปฏิบัติการลงไปดวย เมื่อซอฟตแวรที่บรรจุอยูในคอน เทนเนอรไมจ ำเปน ตองบรรจรุ ะบบปฏบิ ัติการดวย จงึ สงผลใหขนาดของคอนเทนเนอรมีขนาดเล็กกวา ขนาดของ 169

เคร่ืองคอมพิวเตอรเ สมือน ใชหนวยความจำหลกั นอยกวาเทคโนโลยีเสมือน (Bashari Rad, John Bhatti, and Ahmadi 2017; Chung et al. 2016) และไมจำเปนตองพึ่งพาฮารดแวรโดยเฉพาะชุดคำสั่งพิเศษของหนวย ประมวลผลกลาง สงผลใหประสิทธิภาพการทำงานของแอปพลิเคชันที่อยูในคอนเทนเนอรยังมีประสิทธิ ใกลเคียงความเร็วเมื่อสั่งเปด การทำงานโดยตรง (Bashari Rad et al. 2017; Chung et al. 2016; Emilsson 2020; Kumar and Kurhekar 2017; Paraiso et al. 2017; Xie, Wang, and Wang 2018) ภาพที่ 9.1 เปรียบเทียบการติดตั้งแอปพลิเคชันบนเทคโนโลยีเสมือนที่ตองผานไฮเปอรไวเซอรและระบบปฏิบัติการเกสต กบั การตดิ ตัง้ แอปพลิเคชันบนแพลตฟอรมของด็อกเกอร แอป A เครอ่ื งเสมือน แอป C คอนเทนเนอร ไลบรารี ไลบรารี แอป B แอป A แอป B แอป C ไลบรารี ไลบรารี ไลบรารี ไลบรารี ระบบปฏบิ ตั กิ ารเกสต ระบบปฏิบตั กิ ารเกสต ระบบปฏบิ ตั กิ ารเกสต ด็อกเกอร ระบบปฏิบัติการโฮสต ไฮเปอรไวเซอร สถาปต ยกรรม สถาปตยกรรม ภาพที่ 9.1 การทำงานของแอปพลเิ คชนั บนเทคโนโลยเี สมอื นและเทคโนโลยีบรรจุคอนเทนเนอร ดดั แปลงมาจาก: (Docker Inc. 2020b) 9.3 ประโยชนของการใชเ ทคโนโลยีบรรจุคอนเทนเนอร เทคโนโลยีบรรจุคอนเทนเนอรไ มเพยี งแตเ ปน ประโยชนเ ฉพาะกับผูดูแลระบบ หรือผใู หบริการคลาวด แต ยังเปนประโยชนกับนักพัฒนาซอฟตแวร ทีม และองคกรในหลายดาน เพราะดวยสถาปตยกรรมการทำงานที่ เรียบงายทำใหทุกแอปพลิเคชันเมื่อมองจากนอกคอนเทนเนอรมีคุณลักษณะเหมือนกันหมด คือ เปนกลุมของ แอพลิเคชันและไลบรารที ี่จำเปนทีพ่ รอมเปดการทำงานโดยทีไ่ มจำเปนตองตดิ ต้ังโปรแกรมอะไรเพิม่ เติม ทำให เกดิ ประโยชนด ังตอไปน้ี 1) การบรรจุภัณฑซอฟตแ วรในทางทใี่ ชป ระโยชนจากทกั ษะของนักพัฒนามีอยูแลว หลายหนวยงานตองเปดรับตำแหนงสำหรับการสรางและจัดทำบรรจุภัณฑใหกับซอฟตแวร โดยเฉพาะ เพื่อจะบริหารจัดการองคความรูและเครื่องมือที่จำเปนในการสรางแพ็คเกจซอฟตแวร ซึ่งเครื่องมือเหลานั้นมีความแตกตางและซับซอนกันไปเมื่อภาษาที่ใชเขียนโปรแกรมแตกตางกัน แตด อ็ กเกอรชว ยใหนกั พฒั นาเขยี นคำสั่งของซอฟตแวรท ่ีตนเองรบั ผดิ ชอบเกบ็ ไวในแฟมขอมลู เดยี ว 2) การรวมซอฟตแวรแอพพลิเคชั่นและแฟมขอมูลของระบบปฏิบัติการที่จำเปนเขาดวยกันในรูปแบบ มาตรฐานเดยี ว ในอดีต การรวมซอฟตแวรไมใชแคการรวมแฟมขอมูลของซอฟตแวรเพียงอยางเดียว แตจะตอง รวมไลบรารีที่ตองใชดวย ไลบรารีบางตัวมาพรอมกับระบบปฏิบัติการ ทำใหเวลารวมแพ็คเกจอาจ 170

ประสบความสำเร็จและทำงานไดในเครือ่ งของผูอาน แตไมใชกับเครือ่ งของลกู คา เพราะในบางครั้ง ทง้ั ไลบรารแี ละเวอรชนั ของไลบรารีจะตองตรงกันกับที่แอปพลิเคชันเรียกใช แมซอฟตแ วรจะทำงาน บนระบบปฏิบตั กิ ารลีนุกซเ หมือนกัน แตเพียงเวอรชันของระบบปฏิบตั ิการตา งกันก็ทำใหเกิดปญหา ทางทดสอบการปรับใชซอฟตแวร แตดวยด็อกเกอร เมื่อตองการรวมซอฟตแวรเขาดวยกันกับ ไลบรารี ด็อกเกอรจะรวมไลบรารีของระบบปฏิบัติการเวอรชันที่ใชพัฒนาและตั้งใจจะนำไปปรับใช อยูดวยในคอนเทนเนอรทำใหกระบวนการการติดตั้งซอฟตแวรมีประสิทธิภาพและตรวสอบไดวา ทำงานไดเมอ่ื สงมอบลูกคา อยางแนนอน 3) การใชสิ่งประดิษฐที่แพ็กเกจสรางเพื่อทดสอบและสงมอบสิ่งประดิษฐเดียวกันใหกับทุก ระบบปฏบิ ตั กิ ารและในทกุ สภาพแวดลอม เม่ือนักพัฒนาอัพเดทการเปลยี่ นแปลงลงไปในฐานขอมูลรหสั ตน ฉบับแลว ซอฟตแวรเวอรชันใหม ในรูปแบบอิมเมจของด็อกเกอรสามารถถูกสรางขึ้นได ซึ่งจะผานกระบวนการทดสอบและสามารถ นำไปปรบั ใชไ ดใ นสภาพการใชง านจริงโดยที่ไมต องคอมไพลหรือสรางแพ็คเกจแยกสำหรบั สภาพการ ใชง านจริง 4) ซอ นลักษณะของฮารดแวรจ ากมุมมองของซอฟตแวรโดยที่ไมต องเสยี ทรัพยากร ในอดีตการซอนลักษณะของฮารดแวรจากมุมมองของซอฟตแวรสามารถทำไดโดยมีไฮเปอรไว เซอรเปนตัวจัดการทำใหเครื่องคอมพิวเตอรเสมือนทุกเครื่องใชไดรเวอรเหมือนกันทั้งหมด แตตอง เสียทรัพยากรทั้งเวลาของหนวยประมวลผลกลางและหนวยความจำหลัก เพราะจะตองติดตั้ง ระบบปฏิบัตกิ ารอีกชน้ั ซึ่งมาพรอมกับโพรเซสบางตวั ที่ทำงานอยูเบ้ืองหลังเต็มไปหมด ในขณะที่ด็อก เกอรไมตองใชทรัพยากรเหลานั้นเลย เพราะไมตองมีระบบปฏิบัติการอีกชั้นหนึ่ง ทั้งนี้เพราะแกน ของระบบปฏิบัติการลีนุกซที่ทันสมัยในทุกดิสตริบิวนั้นมีคุณสมบัติการทำงานพื้นฐานที่เหมือนกัน หมด การใชเ ทคโนโลยบี รรจุคอนเทนเนอรม ีขอดีกวา เทคโนโลยีเสมือนหลายประการ แตเทคโนโลยีบรรจุคอน เทนเนอรไ มสามารถแทนท่ีเทคโนโลยเี สมือนได เน่ืองจากมขี อ จำกัดบางประการ โดยเฉพาะประเดน็ ความมั่นคง ปลอดภัย (Combe, Martin, and di Pietro 2016) เชน เพราะไมมีไฮเปอรไวเซอรแยกออกจากกัน แอปพลิเคชันที่ทำงานในคอนเทนเนอรจะตองเปนของระบบปฏิบัติการแพลตฟอรมเดียวกันเทานั้น เชน หาก ระบบปฏิบัติการเปนลีนุกซ ตัวซอฟตแวรภายในคอนเทนเนอรจะตองเปนซอฟตแวรที่ทำงานบนลีนุกซ เหมือนกัน เนื่องจากไมไดมีแกนของระบบปฏิบัติการวินโดวสถูกติดตั้งในคอนเทนเนอรด วย อีกประการหนึ่งที่ สำคัญ คือ เนอ่ื งจากการแยกสภาพแวดลอมของเทคโนโลยีคอนเทนเนอรไมมรี ะบบปฏิบัติการค่ันกลางระหวาง ซอฟตแวรทำใหทุกซอฟตแวรแบงปนฮารดแวรเ ดียว ซึ่งรวมถึงที่อยูไอพีและอินเตอรเฟสเครอื ขายเดียวกันดวย ซึ่งตางจากเทคโนโลยีเสมือนที่จะจำลองอินเตอรเฟสเครือขายและที่อยูทางกายภาพ (MAC Address) ให ตางกันเสมือนเปนคอมพวิ เตอรทางกายภาพอีกเครื่อง 171

9.4 องคประกอบและการปฏสิ ัมพันธร ะหวางองคประกอบ ด็อกเกอรใชสถาปตยกรรมแบบแมขายลูกขาย ระบบนิเวศของด็อกเกอรมีองคประกอบที่สำคัญอยู 3 องคประกอบ คือ ด็อกเกอรลูกขาย (Docker Client) ด็อกเกอรโฮสต (Docker Host) และรีจีสตรี (Registry) โดยผูใชสั่งงานระบบด็อกเกอรผา นดอ็ กเกอรลูกขาย โดยเริ่มตนด็อกเกอรลูกขา ยจะชี้ไปยังดอ็ กเกอรโฮสตท่ีอยู ในเครื่องเดียวกัน (localhost) เมื่อด็อกเกอรโฮสตที่ทำงานอยูเบื้องหลังตลอดเวลา (Daemon) รับคำสั่ง ด็อก เกอรโฮสตอาจตองการดาวนโหลดอิมเมจจากรีจีสตรี รีจีสตรีเปนศูนยกลางที่รวบรวมอิมเมจไวใหด็อกเกอร โฮสตส ามารถดาวนโ หลดมาใชงานได รจี สี ตรหี ลกั ของระบบด็อกเกอร คอื ด็อกเกอรฮับ (Docker Hub) ซึ่งเปน รีจีสตรีสาธารณะที่ผูผลิตซอฟตแวรที่ตองการเผยแพรซอฟตแวรใหทุกคนดาวนโหลดไปใชงานสามารถสราง อิมเมจของซอฟตแ วรแ ละนำมาฝากใหด็อกเกอรฮับแจกจา ยได ดังภาพที่ 9.2 ขอดีของสถาปตยกรรมนี้ คือ ด็อกเกอรลูกขาย และด็อกเกอรโฮสตไ มจำเปน ตองอยูเครื่องเดียวกัน โดย ทางเทคนิค ด็อกเกอรรองรับการเชื่อมตอหลายรูปแบบ เชน REST API หรือผานโพรโตคอล SSH เปนตน ดังนั้น ในกรณีของการติดตั้งบนเครือ่ งเดีย่ ว (Standalone) เครื่องคอมพิวเตอรเครื่องหนึ่งจำเปนจะตองมีด็อก เกอรลกู ขา ย และดอ็ กเกอรโ ฮสตติดตั้งไวในเคร่อื งจงึ จะสามารถทำงานได ภาพท่ี 9.2 การทำงานของระบบด็อกเกอร ดดั แปลงมาจาก: (Docker Inc. 2020b) วัตถุพื้นฐานท่ีสำคัญในระบบด็อกเกอรประกอบดวยวัตถุ 4 ประเภท ดังError! Reference source not found.นี้ 1) อิมเมจ (Image) คือ ซอฟตแวรที่ถูกสรางดวยด็อกเกอรโฮสตและบรรจุไวอยูในรูปแบบแพ็คเกจ ของดอ็ กเกอร คุณลักษณะท่สี ำคัญของอิมเมจ คือ ไมสามารถแกไขได (Immutable) ดงั น้ัน อิมเมจ ถูกใชใหเ ปน แมแบบในการทำงานของซอฟตแวร ทัง้ นี้เพ่อื รองรับการทำงานของซอฟตแวรหลายตัว 172

พรอมกัน (Multiple Instance) และใชเปนแหลงอางอิงในการสรางอิมเมจอื่น เชน หากตองการ บรรจุเว็บแอปพลิเคชันที่พัฒนาลงคอนเทนเนอร นักพัฒนาอาจตองอางอิงอิมเมจที่บรรจุเว็บ เซิรฟเวอร และเฟรมเวิรกที่ใชพัฒนาเว็บแอปพลิเคชันดวย อิมเมจที่ถูกสรางจะมีลักษณะเปนช้ัน ขอมูล (Layer) เมื่อถูกอางอิงและสรางอิมเมจใหม ด็อกเกอรจะสรางชั้นขอมูลที่บรรจุแฟมขอมูลท่ี แตกตางไปจากชั้นขอมูลที่อางอิงไปเรื่อย ๆ ทำใหหากด็อกเกอรโฮสตตองบรรจุอิมเมจของเว็บ แอปพลิเคชันหลายตัวที่ใชเว็บเซิรฟเวอรแ ละเฟรมเวริ ก เดียวกนั ด็อกเกอรจะไมเก็บขอมูลของช้ันท่ี เปนเว็บเซริ ฟ เวอรแ ละเฟรมเวริ ก น้นั ซำ้ ซอ นกนั 2) คอนเทนเนอร (Container) คือ ตัวอยางของอิมเมจท่ีทำงาน ผูอานสามารถสราง เรมิ่ ตน หยุด ยาย และลบคอนเทนเนอรได เมื่อเริ่มตน การคอนเทนเนอรจ ะอาศัยขอมูลจากอิมเมจมาเรียกการทำงาน หากมีการบันทึกขอมูลเพิ่มหรือการแกไขในคอนเทนเนอร การเปลี่ยนแปลงนั้นจะไมถูกบันทึกกลับ เขาไปในอิมเมจ แตจะถูกเก็บไวในที่เก็บขอมูลของด็อกเกอร (Data Volume) แทน ดังนั้น เมื่อปด การทำงานหรอื ลบคอนเทนเนอรทงิ้ ไป หากทเ่ี ก็บขอ มูลของด็อกเกอรไมถกู ลบไปดวย ผูอา นสามารถ สรางคอนเทนเนอรไดใหมโดยอางอิงจากอิมเมจ และที่เก็บขอมูลเดิม โดยที่คอนเทนเนอรใหมจะมี ลักษณะเหมอื นคอนเทนเนอรเดิมทุกประการ เพราะขอมูลท่คี อนเทนเนอรอางอิงและอาศัยอยูยังคง เหมือนเดมิ 3) ที่เก็บขอมูล (Data volume) ในด็อกเกอรสามารถเปนไดเรกทอรีหนึ่งในระบบแฟมขอมูล ไดเรกทอรีที่แบงปนผานเครือขา ย หรือท่ีเก็บขอมูลที่ด็อกเกอรสรางขึน้ มาโดยเฉพาะก็ได โดยที่เก็บ ขอมูลจะถูกอางอิงจากคอนเทนเนอรที่สรางขึ้น เพื่อใชเก็บขอมูลที่คงทน (Persistent data) เนอื่ งจากหากไมมีท่ีเก็บขอมลู เชื่อมตอกบั คอนเทนเนอรแลว ขอ มูลทเี่ ก็บในคอนเทนเนอรจะถูกเก็บ เสมอื นหนง่ึ เปนช้ันขอ มูลตอ จากอมิ เมจ แตจ ะไมมีการบนั ทึกชั้นขอมูลทส่ี รางขนึ้ กลับเขาไปในอิมเมจ ทำใหเ มื่อลบคอนเทนเนอรทงิ้ ไป ขอ มลู ทัง้ หมดทอ่ี ยูในคอนเทนเนอรจะหายไปดวย 4) เครือขาย (Network) หมายถึงเครือขายเสมือนที่ด็อกเกอรสรางขึ้น มีไวเพื่อจำลองสภาพแวดลอม ของคอนเทนเนอร และอนุญาตใหคอนเทนเนอรสามารถเชื่อมตอระหวางคอนเทนเนอรดวยกันหรือ คอนเทนเนอรเชื่อมตอกับโฮสตดวยกัน เครือขายในเทคโนโลยีบรรจุคอนเทนเนอรมีความแตกตาง จากเครือขายในเทคโนโลยีเสมือนตรงที่ เครือขายในเทคโนโลยีบรรจุคอนเทคเนอรเปนเครือขาย เสมือนทางซอฟตแวรเทานั้น ดังนั้น เครือขายในด็อกเกอรไมสามารถเชื่อมตอกับฮารดแวรหรือ อินเตอรเฟสเครือขายทางกายภาพไดโดยตรง สงผลให ทุกคอนเทนเนอรที่ทำงานอยูบนด็อกเกอร โฮสตจะไดเปนท่อี ยูไอพีจำลองทสี่ ามารถเขาถึงผานด็อกเกอรโ ฮสตเทา นัน้ และจะไมส ามารถไดที่อยู ไอพีที่เหมือนกับที่อยูไอพีของด็อกเกอรโฮสตได ในขณะที่เครือขายเสมือนในเทคโนโลยีเสมือน สามารถเขาถึงอินเตอรเฟสทางกายภาพและจับจองท่ีอยูไอพีในเครือขายเดียวกันกับไฮเปอรไวเซอร ทำใหเคร่ืองอ่นื ไมทราบไดว า ทอี่ ยูไอพีน้ันมาจากเครือขายเสมือนหรืออนิ เตอรเฟสทางกายภาพ 173

ภาพท่ี 9.3 วตั ถุพื้นฐานท่ีสำคญั ในระบบด็อกเกอร ดดั แปลงรปู : (Docker Inc. 2020b) ดวยหลักการทำงานโดยการทำงานแยกสวน โดยมีอิมเมจ คอนเทนเนอร ที่เก็บขอมูล และเครือขายที่ แยกสวนออกมาดังภาพที่ 9.3 ทำใหผูอานสามารถเปลี่ยนองคประกอบทีละสวนได ซึ่งการออกแบบแบบแยก สวนนี้มีประโยชนมากในการสงมอบซอฟตแวร เพราะซอฟตแวรที่สงมอบจากนักพัฒนาซอฟตแวรจะเปน อิมเมจเสมอ หากมีเวอรชันใหมที่ยังคงมีรูปแบบการเก็บขอมูลแบบเดิม หรือเวอรชันใหมที่สนับสนุนการ อัพเกรดโครงสรางขอมูลของซอฟตแวรเวอรชันเกา ผูอานสามารถหยุดและลบการทำงานของคอนเทนเนอรท่ี สรางจากอิมเมจตัวเกา และสรางคอนเทนเนอรจากอมิ เมจตัวใหมโดยทีย่ ังมที ่เี ก็บขอมูลและเครือขายเดมิ จะทำ ใหผูอานสามารถอัพเกรดเวอรชันของซอฟตแวรไดโดยที่เกือบไมมีระยะเวลาหยุดใหบริการ (Down time) เพราะอมิ เมจเวอรช นั ใหมสามารถตรวจสอบและดาวนโหลดมาไวกอนลวงหนา ได 9.5 เครื่องมอื และอนิ เตอรเ ฟสสำหรบั การบริหารจดั การเทคโนโลยีบรรจุคอนเทนเนอร วธิ ีการบริหารจดั การกับเทคโนโลยบี รรจุคอนเทนเนอรหรอื ระบบของด็อกเกอรน ี้ โดยท่ัวไปมีอยู 2 รูปแบบ คือ 1) การสรางและสง ออกอิมเมจ (Build image, Push image) เมื่อนักพัฒนาซอฟตแวรตองการเผยแพรซอฟตแวรที่พัฒนาขึ้น นักพัฒนาซอฟตแวรจะตองสราง อิมเมจของซอฟตแวรที่พัฒนาขึ้นมา ขั้นตอนเริ่มตนจาก นักพัฒนาใชด็อกเกอรลูกขายสั่งงานไปที่ ด็อกเกอรโฮสตวาตองการสรางอิมเมจขึ้นดวยคำสั่งที่กำหนด ด็อกเกอรโฮสตจะดาวนโหลดคำส่ัง และแฟมขอมูลที่กำหนดจากไดเรกทอรีที่ตัง้ อยูบนเครื่องด็อกเกอรลูกขายเพื่อประมวลผลบนเครือ่ ง ของด็อกเกอรโฮสต ดังนั้น การประมวลผลสรางอิมเมจจะใชทรัพยากรฝงด็อกเกอรโฮสตทั้งหมด ทั้งน้รี วมถงึ การเขาถึงอนิ เทอรเน็ต ความเรว็ เครือขา ย แตรหัสผใู ชและรหัสผา นสำหรับเขาถึงรีจีสตรี ในกรณีที่เปนรีจีสตรีสวนตัวจะถูกเก็บไวที่เครื่องฝงด็อกเกอรลูกขาย หลังจากที่ด็อกเกอรโฮสตรับ คำสั่งมาจากด็อกเกอรลูกขายแลว บอยครั้งที่คำสั่งที่ใชสรางอิมเมจของซอฟตแวรใหมจะอางอิง 174

อิมเมจมาตรฐาน ซ่งึ เปนอมิ เมจท่ีผูผ ลิตซอฟตแวรเ ผยแพรใ หใชงาน เชน อมิ เมจของระบบปฏิบตั ิการ CentOS หรืออิมเมจของเว็บเซิรฟเวอรอยาง Apache และ PHP เปนตน ในกรณีที่คำสั่งไดอางอิง อิมเมจมาตรฐาน ด็อกเกอรโฮสตจะดาวนโหลดอิมเมจมาตรฐานจากรีจีสตรีมาเก็บไวที่เครื่องของ ด็อกเกอรโฮสต และใชอิมเมจนั้นประมวลผลสรางอิมเมจใหมที่บรรจุซอฟตแวรที่พัฒนาลงไปดวย เมื่อสรางอิมเมจเสร็จ ด็อกเอรโฮสตจะสงออกอิมเมจโดยการอัพโหลดอิมเมจที่สรางใหมและถูกเก็บ ไวในเคร่อื งขนึ้ ไปรจี ีสตรี 2) การดึงอิมเมจและสรา งคอนเทนเอร (Pull image, Build Container) เม่อื ลูกคารับมอบซอฟตแวรจากนักพัฒนาผานแพลตฟอรมการบรรจุคอนเทนเนอร ลูกคาจะไดรับท่ี อยูของรีจีสตรี และรหัสผูใชกับรหสั ผานในกรณีที่เขาถึงรีจสี ตรีสว นตัว ขั้นตอนเริ่มตนจาก ลูกคาใช ด็อกเกอรลูกขายสั่งงานไปที่ด็อกเกอรโฮสตวาตองการดึงอิมเมจจากรีจีสตรีที่ปอน และสรางเปน คอนเทนเนอรตามการตั้งคาที่กำหนดผานคำสัง่ ด็อกเกอรโฮสตจะตรวจสอบหากมีชั้นขอมูลไหนใน อิมเมจที่ไมซ้ำกันกับที่อยูในเครื่องด็อกเกอรโฮสต ด็อกเกอรโฮสตจะเริ่มดาวนโหลดชั้นขอมูล ดังกลาว เมื่อครบแลวจะเชื่อมโยงชั้นขอมูลใหกลางเปนอิมเมจ จากนั้น ด็อกเกอรโฮสตจะสราง คอนเทนเนอรโดยมชี ั้นขอมูลกอนหนาอางอิงไปทชี่ ั้นขอมูลของอิมเมจ และสรางท่ีช้ันขอมูลใหมเพื่อ เช่อื มโยงกบั ทเ่ี ก็บขอมูล และเครือขายเสมอื นตามการต้ังคา เม่อื สรางเสรจ็ ด็อกเกอรโ ฮสตจะเริ่มตน การทำงานซอฟตแวรต ามคำสง่ั ท่ีระบุไวในอมิ เมจ ดวยเครื่องมือฝงด็อกเกอรฝงลูกขายที่ออกแบบมาใหใชงานงาย แมทำงานในรูปแบบบรรทัดคำสั่ง แต เคร่อื งมือ docker เพียงโปรแกรมเดยี วสามารถดำเนินการไดทั้งการสรางและสงออกอิมเมจ และการดึงอิมเมจ และการสรางคอนเทนเนอรไดทั้งหมดจึงทำใหด็อกเกอรเปนที่เครื่องที่นิยมที่สุดสำหรับบริหารจัดการกับ เทคโนโลยบี รรจุคอนเทนเนอร 175

บทสรปุ เทคโนโลยีบรรจุคอนเทนเนอรมีหลักการ คือ การรวมนำไลบรารีและสภาพแวดลอมที่เกี่ยวของกับ ซอฟตแวรที่ตองการสงมอบมารวมอยูไวในบรรจุภัณฑหนึ่ง โดยเมื่อเวลาซอฟตแวรทำงาน ซอฟตแวรจะ มองเห็นสภาพแวดลอมในมุมที่จำกัด เรียกวา คอนเทนเนอร (Container) เสมือนหนึ่งทำงานอยูบนเครื่อง คอมพวิ เตอรอีกเคร่ืองหนงึ่ โดยอิสระ ด็อกเกอรเปน โปรแกรมท่ีนิยมใชก ันมากท่สี ุด ดอ็ กเกอรใชสถาปตยกรรมแบบแมข ายลูกขาย ระบบนิเวศ ของด็อกเกอรมีองคประกอบที่สำคัญอยู 3 องคประกอบ คือ ด็อกเกอรลูกขาย (Docker Client) ด็อกเกอรโฮสต (Docker Host) และรีจสี ตรี (Registry) โดยผูใชสง่ั งานระบบด็อกเกอรผานด็อกเกอรล กู ขายไป ยังด็อกเกอรโฮสตที่ทำงานอยูเบื้องหลังตลอดเวลา (Daemon) รับคำสั่งเพื่อรับสงขอมูลอิมเมจจากรีจีสตรีซึ่ง เปนศูนยกลางที่รวบรวมอิมเมจไวใหด็อกเกอรโฮสตสามารถดาวนโหลดมาใชงานได รีจีสตรีหลักของระบบ ดอ็ กเกอร คือ ด็อกเกอรฮับ (Docker Hub) วตั ถุพนื้ ฐานทีส่ ำคญั ในระบบด็อกเกอรประกอบดว ยวัตถุ 4 ประเภท 1) อมิ เมจ คอื ซอฟตแ วรท่ถี กู สรางดว ยด็อกเกอรโ ฮสตแ ละบรรจุไวอยูใ นรปู แบบแพ็คเกจของด็อกเกอร 2) คอนเทนเนอร คือ ตัวอยางของอิมเมจที่ทำงาน ผูอานสามารถสรา ง เริ่มตน หยุด ยาย และลบคอน เทนเนอรไ ด 3) ที่เก็บขอมูลในด็อกเกอรสามารถเปนไดเรกทอรีหนึ่งในระบบแฟมขอมูล ไดเรกทอรีที่แบงปนผาน เครือขาย หรือที่เก็บขอมูลที่ด็อกเกอรสรางขึ้นมาโดยเฉพาะ โดยที่เก็บขอมูลจะถูกอางอิงจากคอน เทนเนอรทีส่ รา งขนึ้ เพอื่ ใชเ กบ็ ขอมูลท่ที นทาน 4) เครอื ขาย หมายถึง เครอื ขายเสมือนท่ีด็อกเกอรสรา งขึ้น มไี วเพื่อจำลองสภาพแวดลอมของคอนเทน เนอร การบริการจัดการอิมเมจมีการใชงาน 2 ทิศทาง คือ นักพัฒนาซอฟตแวรสรางอิมเมจไปฝากไวที่รีจสี ตรี และผใู ชงานดาวนโ หลดอมิ เมจจากรีจีสตรีมาไวท่เี ครื่อง 176

บบฝก หดั บทที่ 9 1. บอกความหมายของเทคโนโลยบี รรจคุ อนเทนเนอร 2. หลักการทำงานของเทคโนโลยบี รรจคุ อนเทนเนอรต างจากหลกั การทำงานของเทคโนโลยเี สมอื นอยางไร 3. บอกประโยชนข องเทคโนโลยคี อนเทนเนอรม าอยา งนอย 3 ขอ 4. อธบิ ายปฏิสมั พันธระหวางองคป ระกอบของระบบด็อกเกอร 5. อธิบายรูปแบบวธิ ีการบรหิ ารจัดการกับเทคโนโลยบี รรจุคอนเทนเนอร 177

178

เทคนคิ การเตรียมเครอ่ื งสำหรับฝกปฏบิ ตั ิการเทคโนโลยบี รรจุคอนเทนเนอร บทนำ ในชวงเริ่มตน โปรแกรมด็อกเกอรพัฒนาถูกออกแบบใหทำงานเฉพาะบนระบบปฏิบัติการตระกูลยูนิกซ หรือลีนุกซเทานั้น แตหลังจากที่ไดรับความนิยม บริษัทไมโครซอฟทจึงเขามาทำความรวมมือดวยจึงทำใหใน ปจจุบันโปรแกรมด็อกเกอรสนับสนุนการทำงานของระบบปฏิบัติการวินโดวสและระบบปฏิบัติการลีนุกซดวย อยางไรก็ตาม แมด็อกเกอรจะสามารถทำงานบนระบบปฏิบัติการวินโดวสได แตก็มีขอจำกัดบางประการ เชน วินโดวสรุนโฮมอิดิชันที่ไมสามารถติดตั้ง Hyper-V ไดโดยตรง ในบทเรียนนี้ ผูอานจะไดเรียนรูแนวทาง หรือ วิธีการที่สามารถเรียกใชงานโปรแกรมด็อกเกอรเมื่อใชงานบนระบบปฏิบัติการวินโดวส และสามารถเลือก วิธกี ารติดตง้ั ท่เี หมาะกบั ตนเองได 10.1 แนวทางการติดตัง้ โปรแกรมดอ็ กเกอร ในกรณีที่ผูอ า นกำลังใชงานระบบปฏบิ ัติการลีนุกซ หรอื ใชเ ครอื่ งคอมพวิ เตอรเสมือนท่ีสรางจากบทเรียน กอนหนาเพื่อฝกปฏิบัติเทคโนโลยีเสมือน ผูอานสามารถขามไปหัวขอขั้นตอนการติดตั้งโปรแกรมด็อกเกอรใน ระบบปฏิบัติการลีนุกซไดท นั ที สำหรับระบบปฏิบัติการวินโดวสนั้น เนื่องจากโปรแกรมด็อกเกอรถูกสรางเพื่อไวเรียกใชงานโปรแกรม ลนี กุ ซเ ปนหลงั ดังน้นั โปรแกรมดอ็ กเกอรสำหรับวนิ โดวสสามารถทำงานไดผ า นชองทาง 3 ชองทาง คือ วิธีที่หนึ่ง ติดตั้งด็อกเกอรสำหรับระบบปฏิบัติการวินโดวส และใชเทคโนโลยีเสมือน Hyper-V เปน แบ็กเอนดสำหรับเรียกใชงานโปรแกรมด็อกเกอรแมขาย ขอดีของวิธีการนี้ คือ 1) ผูอานสามารถดาวนโหลด ด็อกเกอรสำหรับระบบปฏิบัติการวินโดวสมาติดตั้งไดโดยงาย 2) ระบบปฏิบัติการวินโดวส 10 ไมจำเปนตอง เปนเวอรชันลาสุดคือ เวอรชัน 2004 สวนขอเสียของวิธีการนี้คือ ระบบปฏิบัติการวินโดวส 10 จะตองเปน อิดิชันที่สูงกวาโฮมอิดิชัน (Home edition) เชน Pro Enterprise หรือ Education เทานั้น เพราะวินโดวส โฮมอดิ ิชนั ไมสามารถติดต้งั โปรแกรม Hyper-V ได วิธีที่สอง คือ ติดตั้งด็อกเกอรสำหรับระบบปฏิบัติการวินโดวส และใชระบบยอยลีนุกซสำหรับวินโดวส (Linux subsystem for Windows) เปนแบ็กเอนดสำหรับเรียกใชงานโปรแกรมด็อกเกอรแมขาย ขอดีของ วิธีการนี้ คือ 1) ผูอานสามารถดาวนโหลดด็อกเกอรสำหรับระบบปฏิบัติการวินโดวสมาติดตั้งไดโดยงาย 2) ระบบปฏิบัติการวินโดวส รุนโฮมอิดิชันสามารถใชงานได แตขอเสียของวิธีการนี้ คือ 1) ระบบปฏิบัติการ วินโดวส 10 จะตองเปน เวอรชนั 2004 เทานั้น 2) มขี ้ันตอนการตดิ ตั้งท่ยี ุงยากและซบั ซอนกวา วธิ ที ่ีหนึ่ง วิธีที่สาม คือ สรางเครื่องคอมพิวเตอรเสมือนดวยโปรแกรม Hyper-V หรือ VMWare Workstation Player และติดตั้งโปรแกรมด็อกเกอรสำหรับลนี ุกซและเรยี กใชง านผา นโปรแกรม Putty ขอดีของวิธีการน้ี คือ ไดระบบปฏบิ ตั กิ ารวนิ โดวส ท่ีสะอาดเพราะไมต องติดต้งั โปรแกรมหรือไลบลารที ่จี ำเปนอ่ืน ๆ เหมือนในวิธที ่ีหนึ่ง และวิธีที่สอง แตขอเสียของวิธีการน้ี คือ 1) ผูอานจะตองติดตั้งระบบปฏิบตั ิการลีนุกซ เชน CentOS ในเครื่อง คอมพิวเตอรเ สมอื น 2) ผูอา นจำเปนตองคัดลอกแฟมขอมูลที่อยูในเครื่องวนิ โดวส ไปเครื่องคอมพิวเตอรเสมือน ดว ยตนเอง เนือ่ งจากทง้ั ดอ็ กเกอรฝง แมขายและด็อกเกอรฝง ลกู ขายถูกติดตงั้ อยูในเคร่ืองคอมพวิ เตอรเ สมอื น 179

ในกรณีที่ผูอานไดสรางเครื่องคอมพิวเตอรเสมือนจากการฝกปฏิบัติเทคโนโลยีเสมือน ผูอานสามารถ เลือกวิธีที่สามไดทันที เพราะขั้นตอนการติดตั้งไมซับซอนและใชเวลาไมนาน แตถาผูอานยังไมมีเครื่อง คอมพิวเตอรเสมือนที่ติดตั้งระบบปฏิบัติการลีนุกซ หรือเครื่องคอมพิวเตอรที่ใชงานฝกปฏิบัติอยูมีหนวย ประมวลผลกลางเปน AMD หรือใชวินโดวสรุนโฮมอิดิชัน ผูเขียนแนะนำใหใชวิธีการที่สอง เพราะเครื่องของ ผอู า นจะยังคงสามารถฝกปฏิบัตเิ ทคโนโลยีเสมอื นไปพรอ มกนั ไดด ว ยโปรแกรม VMWare Workstation Player และสุดทาย หากเครื่องของผูอานไมไดอัพเดทใหทันสมัยหรือไมสามารถอัพเดทเครื่องที่ฝกปฏิบัติใหเปน วินโดวส 10 เวอรชัน 2004 ได ผูเขียนแนะนำใหผูอานใชวิธีที่หนึ่ง โดยศึกษาวิธีการติดตั้ง Hyper-V ไดจาก บทเรียนเรือ่ งเทคนิคการเตรียมเครือ่ งสำหรับฝกปฏิบัติการเทคโนโลยีเสมือน 10.2 การตดิ ตง้ั ระบบยอยลนี กุ ซสำหรับวินโดวส ในปจจุบันระบบยอยลีนุกซสำหรับวินโดวสมีเวอรชัน 1 และเวอรชัน 2 แตหากตองการใหโปรแกรม ดอ็ กเกอรสำหรับระบบปฏบิ ตั ิการวินโดวส ใชระบบยอยลีนุกซ ผอู านจำเปน จะตอ งใชระบบยอ ยลนี ุกซเวอรช นั 2 เทานั้น โดยเงื่อนไขสำหรับการใชงานระบบยอยลีนุกซสำหรับวินโดวสเวอรชัน 2 นั้น ผูอานตองอัพเดท ระบบปฏบิ ัติการวินโดวส 10 ใหท ันสมัยโดยเปนรุน 2004 หรอื ใหมกวา จากนั้น ผูอานจำเปนตองติดตั้งคุณสมบัติของระบบปฏิบัติการวินโดวส 10 ทั้งหมด 2 คุณสมบัติ คือ Microsoft-Windows-Subsystem-Linux และ VirtualMachinePlatform โดยผูอานสามารถเปดหนาตาง Powershell ที่มีสิทธิ์ผูดูแลระบบจากปุมสตารท โดยคลิกขวาที่ปุมสตารท และเลือก Powershell (Administrator) เพอื่ เปดหนาตาง Powershell แลว พมิ พค ำสัง่ # Enable-WindowsOptionalFeature -Online -FeatureName Microsoft- Windows-Subsystem-Linux -All -NoRestart # Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform -All -NoRestart หรือหากผอู า นสะดวกใชงาน Command Prompt ผูอ านสามารถเปดหนาตา ง Command Prompt ที่ มีสิทธิ์ผูดูแลระบบไดโดยคลิกที่ปุมสตารท และพิมพวา Command Prompt จากนั้นคลิกขวาแลวเลือก Run as Administrator เพื่อเปดหนาตา ง Command Prompt แลวพมิ พค ำส่งั # dism.exe /online /enable-feature /featurename:Microsoft-Windows- Subsystem-Linux /all /norestart # dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart ผูอานเพียงเลือกหนาตางบรรทัดคำส่ังของวินโดวสท่ีตองการ เมอื่ พมิ พคำส่ังจะไดผ ลลัพธดังภาพท่ี 10.1 จากนั้นใหรีบูตเครื่องกอนแลวติดตั้งแกนของลีนุกซเพิ่มโดยดาวนโหลดแกนของลีนุกซเวอรชันใหมไดจาก https://docs.microsoft.com/en-us/windows/wsl/wsl2-kernel ผูอานจะสามารถดาวนโหลดแฟมขอมูล wsl_update_x64.msi เพื่อมาตดิ ตัง้ กอนดำเนนิ การในข้ันตอนถดั ไป 180


Like this book? You can publish your book online for free in a few minutes!
Create your own flipbook