SetupVM for Testing

Clone VM

สิ่งต้องเตรียมให้พร้อม

  • เครื่อง host จะต้องติดตั้ง package kvm,libvirt,virt-manager ให้พร้อม Install Virtualization System
  • ให้ Download iso image ให้พร้อม

Geting clone vm with virt-tools

Install

สร้าง Centos 7 vm ด้วย virt manager มีขึ้นตอนดังนี้

  1. เปิด virt-manager เลือกเมนู File > New Virtual Machine
  2. จะแสดง กล่องข้อความ ขึ้นมาดังรูป ให้เลือก ตัวเลือก แรก Local install media (ISO image or CDROM) เนื่องจากจะทำการติดตั้งจากไฟล์ชนิด iso ที่ต้องเตรียมไว้
_images/vm001.png
  1. ต่อมาให้เลือก ปุ่มที่เขียนไว้ว่า Forward โดยจะอยู่ในแถวด้านล่าง
  2. หลังจากนั้นให้เลือกตัวเลือก ``Use ISO image``และเลือกfile iso ที่ได้ Download ไว้ก่อนล่วงหน้า
_images/vm002.png
  1. เลือก ขนาดของ CPU ที่ต้องการ โดยจะหน่วยเป็น MiB ดังนั้นตัวอย่างถ้าเราต้องการ vm ที่มี ขนาดหน่วยความจำ 2G ให้กำหนดเป็น 2048 และเลือกขนาด CPU เป็น 2 เมื่อเลือกเสร็จแล้วก็กด ``Forward``เพืิ่มดำเนินการต่อ
_images/vm003.png
  1. เลือกขนาดของ disk ที่ต้องการ ในที่นี้เลือกขนาด 40 มีหน่วยเป็น GiB ในบางกรณีที่ไม่ต้องการใช้เนื้อที่มากก็สามารถเลือกขนาดการทดสอบได้เป็น 20 GiB หลังจากเลือกขนาดที่ต้องการแล้ว ก็กด ``Forward``เพืิ่มดำเนินการต่อ
_images/vm004.png
  1. ตั้งชื้อของ Vm ที่ต้องการเช่น base-centos7 โดยตั้งชี้อเป็นอะไรก็ได้ตามที่ต้องการ แนะนำให้ตั้งชื่อ base-* เพื่อให้สังเกตุเท่านั้น
_images/vm005.png
  1. เข้าสู่ขั้นตอนการตั้ดตั้ง โดยจะต้องเลือก เมนู ``Install CentOS `` สามารถสัั่งเกตุว่าจะต้องมีอักษรสีขาวแสดงว่าได้ทำการเลือกแล้ว โดยสามารถใช้ cursor up/down เพื่อที่การเลื่อน
_images/vm006.png
  1. เลือกภาษาในระหว่างการติดตั้ง โดยจะเลือก English สามารถเลือกเมนูเสริมให้สะดวกในการติดตั้ง View > Resize to VM เพื่อให้มีขนาดยืดหยุ่นตาม
_images/vm007.png
  1. เข้าสู่การหน้าหลักสำหรับการติดตั้ง
_images/vm008.png
  1. เริ่มโดยการกำหนด timezone โดยใช้ mouse คลิกไปที่แผนที่บริเวณประเทศไทย และแสดงผลในกล่องข้อความด้านบน Asia | Bangkok หลังจากนัั้นให้กด Done เพื่อกลับไปยัง เมนู หลัก
_images/vm009.png
  1. กดเมนู SOFTWARE SELECTION เลือกติดตั้ง แบบ Server with GUI กด Done
_images/vm011.png
  1. กดเมนู INSTALLATION DESTINATION
_images/vm012.png
  1. กดเลือก Click here to create the automatically เพื่อสร้าง partition
_images/vm013.png
  1. ลักษณะ patition จะแบ่งเป็น 3 ส่วน ประกอบด้วย /boot มีลักษณะเป็น standard partion มีขนาด 500 MiB ทำหน้าสำหรับเก็บ kernel สำหรับการ boot ส่วนต่อมา root filesystem แทนด้วย / โดยมีลักษณะที่เรียกว่า single root file system เพราะไม่มีการแบ่ง file system ไปอยู่ที่ partition อื่นเนื่องจากเป็นการติดตั้งแบบ Server
_images/vm014.png
  1. หลังจาก กด Done แล้วให้ กด Accept Changes เพื่อยืนยัน
_images/vm015.png
  1. อีกส่วนที่ต้องการตั้งค่าคือ NETWORK & HOST NAME เพืื่อต้องการให้ network เริ่มต้นการทำงาน ร้องขอ ไป ยัง DHCP Server ทุกครั้ง (onboot=YES)
_images/vm016.png
  1. ให้เปลี่ยนสถานะของเป็น on จะได้แสดง ค่า ของ ip address โดย ip ที่ได้จะมี subnet 192.168.122.118 มี gateway 192.168.122.1 และ DNS 192.168.122.1 โดยค่าที่ได้นั้นจะได้ รับมาจาก DHCP Server และจะมีค่า ของ Mac address 52:54:00:FE:A1:F2
_images/vm017.png
  1. หลังจาก กดเลือก configure นั้นเพื่อเป็นการตั้งค่าให้แก่ การ์ด eth0 โดยเลือก ที่ tab แรก มีชื่อว่า general และเลือก Automatically connect to this network when it is avialable
_images/vm019.png

หากต้องการที่จะ กำหนด ip แบบ manual โดยค่า Default จะกำหนดเป็น DHCP

_images/vm020.png

เมื่อเรียบร้อยให้กด Begin Installation

  1. กำหนด password ให้แก่ user root พร้อมกับการสร้าง user อีกคนเพื่อใช้งาน ในตัวอย่างนี้ user คนที่สองมีชื่อ ว่า admin โดยสามารถตั้งชื่อเป็น อะไรก็ได้ ตามที่ต้องการ
_images/vm022.png

กำหนด root password

_images/vm023.png

กำหนด admin user

_images/vm024.png

รอจนเสร็จสิ้นกระบวนการ แล้วกด reboot

_images/vm027.png _images/vm028.png _images/vm029.png

Clone process

ขี้นตอนการ clone โดยการทำงานบน KVM host หรือ Management node (โหนดที่ติดตั้ง kvm ไม่ใช่สั่งใน vm):

[root@localhost networks]# virsh list
 Id    Name                           State
----------------------------------------------------
 5     base-centos7                   running


[root@localhost networks]# virsh suspend  base-centos7
Domain base-centos7 suspended

[root@localhost networks]# virsh list
 Id    Name                           State
----------------------------------------------------
 5     base-centos7                   paused

[root@localhost networks]# virt-clone --original base-centos7 --name clone-centos7 --file /var/lib/libvirt/images/clone-centos7.qcow2
WARNING  Setting the graphics device port to autoport, in order to avoid conflicting.
Allocating 'clone-centos7.qcow2'                                                                                                        |  40 GB  00:00:05

Clone 'clone-centos7' created successfully.
Option value Descrition
–original base-centos7 base vm name
–name clone-centos7 clone vm name
–file /var/lib/libvirt/images/clone-centos7.qcow2 clone image name

ถึงแม้ว่าจะclone สำเร็จ แต่มีการ warning ว่า มี conflicting เนื่องจาก clone นั้นจะทำให้ mac address ของ network card ซ้ำกันดังนั้นต้อง ล้าง

[root@localhost networks]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 5     base-centos7                   paused
 -     clone-centos7                  shut off

[root@localhost networks]# virt-sysprep -d clone-centos7
[   0.0] Examining the guest ...
[  21.2] Performing "abrt-data" ...
[  21.2] Performing "bash-history" ...
[  21.2] Performing "blkid-tab" ...
[  21.2] Performing "crash-data" ...
[  21.2] Performing "cron-spool" ...
[  21.2] Performing "dhcp-client-state" ...
[  21.2] Performing "dhcp-server-state" ...
[  21.2] Performing "dovecot-data" ...
[  21.2] Performing "logfiles" ...
[  21.3] Performing "machine-id" ...
[  21.3] Performing "mail-spool" ...
[  21.3] Performing "net-hostname" ...
[  21.3] Performing "net-hwaddr" ...
[  21.3] Performing "pacct-log" ...
[  21.3] Performing "package-manager-cache" ...
[  21.3] Performing "pam-data" ...
[  21.3] Performing "puppet-data-log" ...
[  21.3] Performing "rh-subscription-manager" ...
[  21.3] Performing "rhn-systemid" ...
[  21.3] Performing "rpm-db" ...
[  21.3] Performing "samba-db-log" ...
[  21.3] Performing "script" ...
[  21.3] Performing "smolt-uuid" ...
[  21.3] Performing "ssh-hostkeys" ...
[  21.3] Performing "ssh-userdir" ...
[  21.3] Performing "sssd-db-log" ...
[  21.3] Performing "tmp-files" ...
[  21.3] Performing "udev-persistent-net" ...
[  21.3] Performing "utmp" ...
[  21.3] Performing "yum-uuid" ...
[  21.3] Performing "customize" ...
[  21.3] Setting a random seed
[  21.8] Performing "lvm-uuids" ...

set password:

[root@localhost networks]# virt-sysprep -d clone-centos7  --hostname clone-centos7 --root-password password:123456
[   0.0] Examining the guest ...
[   2.9] Performing "abrt-data" ...
[   2.9] Performing "bash-history" ...
[   2.9] Performing "blkid-tab" ...
[   2.9] Performing "crash-data" ...
[   3.0] Performing "cron-spool" ...
[   3.0] Performing "dhcp-client-state" ...
[   3.0] Performing "dhcp-server-state" ...
[   3.0] Performing "dovecot-data" ...
[   3.0] Performing "logfiles" ...
[   3.0] Performing "machine-id" ...
[   3.0] Performing "mail-spool" ...
[   3.0] Performing "net-hostname" ...
[   3.0] Performing "net-hwaddr" ...
[   3.0] Performing "pacct-log" ...
[   3.0] Performing "package-manager-cache" ...
[   3.0] Performing "pam-data" ...
[   3.0] Performing "puppet-data-log" ...
[   3.0] Performing "rh-subscription-manager" ...
[   3.0] Performing "rhn-systemid" ...
[   3.0] Performing "rpm-db" ...
[   3.0] Performing "samba-db-log" ...
[   3.0] Performing "script" ...
[   3.0] Performing "smolt-uuid" ...
[   3.0] Performing "ssh-hostkeys" ...
[   3.0] Performing "ssh-userdir" ...
[   3.0] Performing "sssd-db-log" ...
[   3.0] Performing "tmp-files" ...
[   3.0] Performing "udev-persistent-net" ...
[   3.0] Performing "utmp" ...
[   3.0] Performing "yum-uuid" ...
[   3.0] Performing "customize" ...
[   3.0] Setting a random seed
[   3.0] Setting the hostname: clone-centos7
[   3.0] Setting passwords
[   4.9] Performing "lvm-uuids" ...

Start vm:

[root@localhost networks]# virsh start  clone-centos7
Domain clone-centos7 started

[root@localhost networks]# virsh list
 Id    Name                           State
----------------------------------------------------
 5     base-centos7                   paused
 8     clone-centos7                  running

[root@localhost networks]# virt-viewer 8
_images/vm030.png

ให้ทดสอบ การ login ด้วย root และ password ใหม่ โดยให้กด not listed ที่ เพื่อเปลี่ยนเป็น root user แทน admin

Install Virtualization System

ให้เปิด terminal และติดตั้งด้วยสิทธิ root

1
2
#verify cpu support virtualization
egrep '^flags.*(vmx|svm)' /proc/cpuinfo
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# fedora 24
dnf groupinstall "Development Tools" -y
dnf groupinfo virtualization
dnf install @virtualization
dnf -y install qemu-kvm libvirt virt-install bridge-utils

lsmod | grep kvm

systemctl start libvirtd
systemctl enable libvirtd

# add user ``admin`` to libvirt group
useradd -a -G libvirt admin

Network Virtualization

Libvirt network

เมื่อทำการติดตั้ง libvirt และ เริ่มต้นการทำงานแล้วนั้นจะ มีการสร้าง Linux bridge มีชื่อว่า virbr0 โดยทดสอบโดยการใช้คำสั่ง ip a โดยมี ip 192.168.122.1 ทำหน้าเป็น Gateway ให้ Vm เพื่อ ออกสู่ internet โดยถือว่าเป็น Default bridge และทำหน้าที่เปรียบเสมือน network switch มีการทำงานในลักษณะ NAT สามารถตรวจสอบ ไปยัง เมนู Edit > Connection Detail จะแสดงผลดังรู

_images/vm025.png

ตรวจสอบด้วยคำสั่ง ip a:

    ip a

    4: virbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
            link/ether 52:54:00:c1:9f:ed brd ff:ff:ff:ff:ff:ff
            inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
               valid_lft forever preferred_lft forever
    5: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc fq_codel master virbr0 state DOWN group default qlen 1000
            link/ether 52:54:00:c1:9f:ed brd ff:ff:ff:ff:ff:ff

    8: vnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master virbr0 state UNKNOWN group default qlen 1000
link/ether fe:54:00:fe:a1:f2 brd ff:ff:ff:ff:ff:ff
inet6 fe80::fc54:ff:fefe:a1f2/64 scope link
   valid_lft forever preferred_lft forever

เมื่อ มีการสร้าง VM ขึ้นมา VM ที่สร้างขึ้นจะกูกสร้างมาเกาะบน Bridge ดังกล่าวนี้ โดย KVM จะสร้าง Port (vnet0) ไว้รองรับ การเชื่อมต่อ จาก vif (virtual interface - eth0) จาก vm

_images/vm026.png

Network XML

การกำหนดรายละเอียด ของ config จะอยู่ใน format xml:

cd /etc/libvirt/qemu/networks

cat default.xml

<network>
  <name>default</name>
  <uuid>88ec8022-2026-461b-bf66-7daaf33c8fc5</uuid>
  <forward mode='nat'/>
  <bridge name='virbr0' stp='on' delay='0'/>
  <mac address='52:54:00:c1:9f:ed'/>
  <ip address='192.168.122.1' netmask='255.255.255.0'>
        <dhcp>
          <range start='192.168.122.2' end='192.168.122.254'/>
        </dhcp>
  </ip>
</network>

Note

การต้องเปลี่ยน ip default สามารถทำได้ โดยการแก้ไข file xml นี้