Skip to content

Latest commit

 

History

History
executable file
·
360 lines (276 loc) · 13.2 KB

3.KVM-Qemu-Lab.md

File metadata and controls

executable file
·
360 lines (276 loc) · 13.2 KB

Kvm-Qemu ile Lab Ortamı Kurulumu

Bu lab ortamı kurulumunda sanallaştırma sistemi olarak KVM kullanıyoruz. Bu nedenle Mac ve Windows ortamlarında çalışmayacaktır. Linux kullanıyorsanız ve libvirt ve virsh araçlarını da deneyimlemek isterseniz bu kurulumu tercih edebilirsiniz.

İlk olarak KVM için gerekli araçları kuruyoruz.

sudo apt install qemu-kvm libvirt-dev \
         libvirt-daemon-system libvirt-clients \
         bridge-utils virtinst virt-manager 

root hesabıyla çalışmamak için ilgili gruplara kullanıcımızı ekliyoruz.

sudo usermod -aG libvirt $USER
sudo usermod -aG kvm $USER

"Virtual Machine Manager (VMM)" aracı ile lab ortamını kurabiliriz. Ancak biz böyle yapmayacağız. VMM ile lab ortamını kurmak için internette bir çok kaynak bulabilirsiniz. Kaynaklar bölümünde paylaştığım bazı linklerde de örnekleri bulabilirsiniz. Bu nedenle burada libvird kurulumuyla beraber gelen virsh cli kullanarak kuruluma devam edeceğiz.

Öncelikle ISO dosyalarımızı indiriyoruz. Server edititon işimizi göreceği için onu indiriyoruz ancak uzak masaüstü yapmak isterseniz desktop edititon'u da kullanabilirsiniz.

mkdir ~/kubernetes

wget https://releases.ubuntu.com/20.04/ubuntu-20.04.2-live-server-amd64.iso -P ~/kubernetes 

Daha sonra Kubernetes cluster'ımız için network oluşturuyoruz. Persistant (kalıcı) bir network istiyorsak net-create yerine net-define komutunu kullanmalıyız.

sudo virsh net-define /dev/stdin <<EOF
<network>
  <name>kubenetwork</name>
  <uuid>43ec3ad5-dd7d-4ed6-979c-36faef9e5bcc</uuid>
  <forward mode="nat">
    <nat>
      <port start="1024" end="65535"/>
    </nat>
  </forward>
  <bridge name="kubevirbr" stp="on" delay="0"/>
  <mac address="52:54:00:da:29:75"/>
  <domain name="kubenetwork"/>
  <ip address="10.240.10.1" netmask="255.255.255.0">
    <dhcp>
      <range start='10.240.10.2' end='10.240.10.254'/>
    </dhcp>
  </ip>
</network>
EOF

sudo virsh net-start kubenetwork

sudo virsh net-autostart kubenetwork

Oluşturduğumuz bir network'ü düzenlemek için virsh net_edit netwotk-adi komutu kullanabilirsiniz. Kurulum için bir diske ihtiyacımız olacak bunun için de qemu-img aracını kullanıyor olacağız. Bu araç aşağıdaki formatları destekliyor.

  • raw
  • cloop:Knoppix, live cd formatıdır
  • cow ve qcow: Geriye uyumluluk için kullanılır.
  • qcow2: qemu'nu yeni nesil copy-on-write (cow) formatıdır. Birçok özellği vardır; veri sıkıştırma, snapshot, veri şifreleme vb.
  • vmdk: VMware 3 & 4, ve 6 image format. Vmware ile disk formatı çevirmek için var. Kullanmak için değildir.
  • vdi: VirtualBox 1.1 compatible image format. VirtualBox ile disk formatı çevirmek için var.
  • vhdx: Hyper-V compatible image format, hyper-v ile disk formatı çevirmek için var.
  • vpc: Hyper-V legacy image format.
mkdir -p ~/kubernetes/vms/

qemu-img create -f qcow2 ~/kubernetes/vms/ubuntu2004.qcow2 10G
sudo chown libvirt-qemu:kvm ~/kubernetes/vms/ubuntu2004.qcow2

qemu-img info ~/kubernetes/vms/ubuntu2004.qcow2

# sonuç
image: ~/kubernetes/vms/ubuntu2004.qcow2
file format: qcow2
virtual size: 10 GiB (10737418240 bytes)
disk size: 196 KiB
cluster_size: 65536
Format specific information:
    compat: 1.1
    compression type: zlib
    lazy refcounts: false
    refcount bits: 16
    corrupt: false
    extended l2: false

Artık base image'ımızı kurabiliriz. Aşağıda cli üzerinden kurulum örneği var ancak bunu sadece bilgi amaçlı ekledim. Biz bir altta yer alan domain.xml ile kurulum yapacağız. Bunun en önemli nedeni ise yönetilebilirlik. Sonuçta cli da kullansak arkada tarafta herşey xml olarak tutuluyor bu nedenle xml dosyasına aşina olmak da fayda var. Diğer bir nedende xml dosyasını versiyonlamak, döküman olarak da kullanabilmek mümkün.

sudo virt-install --noautoconsole \ 
                  --os-type linux \
                  --os-variant generic \
                  --network network=kubenetwork,model=virtio \
                  --boot loader=/usr/share/qemu-efi/QEMU_EFI.fd \
                  --name=ubuntu2004 \
                  --virt-type=kvm \
                  --boot hd,cd \
                  --network=default,model=virtio \
                  --disk path=~/kubernetes/vms/ubuntu2004.qcow2,format=qcow2,device=disk,bus=virtio,cache=none \
                  --location ~/kubernetes/ubuntu-20.04.2-live-server-amd64.iso
                  --memory=2048 --vcpu=1 \
                  --cdrom=./bionic-server-arm64.iso \
                  --graphics none 

Virsh ile xml üzerinden kurulum yapmak için aşağıdaki domain.xml dosyasını kullanacağız. Domain.xml dosyasının detayları için için şu sayfayı ziyaret edebilirsiniz.

iso_path=~/kubernetes/ubuntu-20.04.2-live-server-amd64.iso
disk_path=~/kubernetes/vms/ubuntu2004.qcow2

sudo virsh create /dev/stdin <<EOF
<domain type='kvm'>
  <name>ubuntu2004</name>
  <uuid>bb6e0a0c-4cd9-458c-b7fd-60be7cff000c</uuid>
  <description>focal</description>
  <memory unit='MB'>2048</memory>
  <currentMemory unit='MB'>2048</currentMemory>
  <vcpu placement='static'>1</vcpu>
  <iothreads>1</iothreads>
  <os>
    <type arch="x86_64" machine="pc-i440fx-hirsute">hvm</type>
    <boot dev='cdrom'/>
    <boot dev='hd'/>
  </os>
  <clock offset='utc'/>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>preserve</on_crash>
  <devices>
    <emulator>/usr/bin/qemu-system-x86_64</emulator>
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source file='${iso_path}'/>
      <target dev='vda' bus='scsi'/>
      <readonly/>
      <shareable/>
    </disk>
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='${disk_path}'/>
      <target dev="sd**vpc:**a" bus="sata"/>
      <address type="drive" controller="0" bus="0" target="0" unit="0"/>
    </disk>
    <interface type='network'>
      <mac address='52:54:00:f1:fd:6c'/>
      <source network='kubenetwork'/>
      <model type='virtio'/>
        <address type="pci" domain="0x0000" bus="0x00" slot="0x06" function="0x0"/>
    </interface>

  <console type="pty">
      <target type="serial" port="0"/>
  </console>

 <serial type='pty'>
   <target port='0'/>
 </serial>

    <input type="mouse" bus="ps2"/>
    <input type="keyboard" bus="ps2"/>
    <graphics type="vnc" port="-1" autoport="yes" listen="127.0.0.1" keymap="en-us">
      <listen type="address" address="127.0.0.1"/>
    </graphics>
    <video>
      <model type="ci**vpc:**rrus" vram="256" heads="1" primary="yes"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x02" function="0x0"/>
    </video>
    <memballoon model="virtio">
      <address type="pci" domain="0x0000" bus="0x00" slot="0x04" function="0x0"/>
    </memballoon>
  </devices>
</domain>
EOF

Domain.xml oluşturulduktan sonra düzenlemek istenirse alttaki komut kullanabilirsiniz.

sudo virsh edit ubuntu2004

Komutu çalıştırdığınızda image'ımız oluşmuş olacak.Kurulumu tamamlamak amacıyla console'umuzdan ubuntu nun tty0 terminaline bağlanabiliyor olmamız lazım.Bunun için alttaki komutu kullanıyoruz

sudo virsh start ubuntu2004 
sudo virsh console ubuntu2004

Eğer Serial Console'a bağlanırken problem yaşayacak olursanız alttaki komutu çalıştırarak grub'u düzenleyiniz. Burada şuna dikkat etmek gerekiyor ubuntu 18.04 de itibaren grub2 ye geçiş yaptığı için grup dosyasının adresi /etc/default/grub olarak değişti.

sudo  virt-edit -d ubuntu2004 /etc/default/grub

aşağıdaki satırları ekleyiniz.

GRUB_CMDLINE_LINUX='console=tty0 console=ttyS0,19200n8'
GRUB_TERMINAL=serial
GRUB_SERIAL_COMMAND="serial --speed=19200 --unit=0 --word=8 --parity=no --stop=1"

İşlemlerimizi daha rahat yapabilmek için bu base image'ımıza bir de ssh kuracağız. Eğer ssh hakkında bilginiz yoksa başlamadan önce bu konuya çalışınız. Ssh için örnek kaynak.

Ssh servisimizi kontrol ediyoruz.

systemctl status sshd

Eğer kurulu değilse kuruyoruz.

Ubuntu için openSSH Centos için openSSH
sudo apt-get install openssh-server
sudo apt-get install openssh-client
sudo systemctl enable ssh
sudo systemctl start ssh>
sudo yum install openssh-clients
sudo yum install openssh-server
sudo systemctl enable ssh
sudo systemctl start ssh

daha sonra key oluşturuyoruz.

ssh-keygen
# bütün sorular için enter diyip devam ediyoruz.

Daha sonra host makinaımızdan ssh ile bağlanıyoruz

ssh vm_ip_adresi

Artık makinamızı clone'layabiliriz.Bunun için kullanacağımız araç virt_clone olacak.

Ancak devam etemeden asıl konumuz olan kubernetes cluster için hazırladığımız topolojiyi hatırlamamız gerekiyor.

topoloji.jpg

Şekilde de görüleceği üzere network subnet'imiz 10.240.10.0/24. lb-01 den başlayarak bütün makinaları clone'luyoruz. Aşağıda lb-01 adlı makinanın clone'lamasını beraber yapıyor olacağız. Diğer makinları da aynı şekilde isim, hostname ve statik ip ayarlarını yaparak clone'layabilirsiniz.

sudo virt-clone --original ubuntu2004 --name lb-01 --auto-clone

Daha sonra makinamaızı çalıştırıyoruz ve virsh ile giriş yapıyoruz.

sudo virsh start lb-01
sudo virsh console lb-01

İlk olarak hostname'i değiştirip ardından statik ip tanımlayacağız. Şu adresdeki /etc/hostname dosyanın içeriğini değiştireceğiz. Bunu vim yada nano ile değiştirebilirsiniz.Yada alttaki gibi komut da kullanabilirsiniz.

sudo hostnamectl set-hostname lb-01
sudo vim /etc/hosts
# ubuntu2004 yazan satırları değiştirmeliyiz.

Ubuntu son sürümleriyle birlikte persistent network oluşturabilmek için kendi geliştirmiş olduğu yaml tabanlı network yönetim sistemine geçti. Server edition'larda systemd-networkd desktop edition'larda ise networkmanager'ı renderer olarak kullanıyor. Netplan ise bizi renderer'lardan soyutlayarak konfigürasyon tabanlı bir network yönetim sistemi sunuyor.

Netplan dosyamızı açıp alttaki gibi düzenliyoruz.

sudo vim /etc/netplan/00-installer-config.yaml
# aşağıdaki gibi düzenliyoruz

network:
  ethernets:
    enp0s6:
      dhcp4: false
      addresses: [10.240.10.2/24]
      gateway4: 10.240.10.1
      nameservers:
        addresses: [8.8.8.8,8.8.4.4]
  version: 2

Daha sonra netplan dosyasmızda hata olup olmadığını test edrek apply ediyoruz.

netplan try
netplan apply

Makinanın internet erişimi olup olmadığını ve host makinasına erişilip erilemediğini de ping atarak test etmemiz gerekiyor. Ayrıca host makinamızdan bu makinya yani 10.240.10.2 (lb-01) ip'li makinaya ssh yapıdığından da emin olmalıyız.

Host makinasında aşağıdaki komutu çalıştırarak ssh bağlantısı yapıyoruz.

ssh 10.240.10.2

Diğer makiaları da aynı şekilde oluşturabilirsiniz.

  • lb-01

    • hostname: lb-01
    • ip: 10.240.10.2
  • lb-02

    • hostname: lb-02
    • ip: 10.240.10.3
  • controller-01

    • hostname: controller-01
    • ip: 10.240.10.4
  • controller-02

    • hostname: controller-02
    • ip: 10.240.10.5
  • controller-03

    • hostname: controller-03
    • ip: 10.240.10.6
  • worker-01

    • hostname: worker-01
    • ip: 10.240.10.7
  • worker-02

    • hostname: worker-02
    • ip: 10.240.10.8
  • worker-03

    • hostname: worker-03
    • ip: 10.240.10.9

Bu arada dokümanlarda geçen virt-image ve virt-storage araçlarının doğrudan disk ile ilgili değildir. virt-image aslında xml üzerinden tanımlanan bir vm instance'ının çalıştırılabilir image'ını disk araçları ile (örmeğin qemu-image) oluşturmuş disklerini kullarak oluşturur. virt-install ise qemu-image ile oluşturulan diski kullanrak cli üzerinden image oluşturur. Ancak image'ı nasıl oluşturursak oluşturalım son tahlilde oluşan image'ın metaverisi yine xml üzerinde turulur.