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 yum install openssh-clients |
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.
Ş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.
- Giriş ve Lab Ortamının Kurulması
- İstemci Araçlarının Kurulumu
- Harici Yük Dengeleyici Kurulumu
- Certificate Authority ve TLS Sertifikalarının Oluşturulması
- Kubeconfig Dosyalarının Oluşturulması
- Data Encryption Config ve Key Oluşturulması
- Etcd Cluster Kurulumu
- Control Plane'nin Kurulumu ve Konfigürasyonu
- Worker Node'ların Kurulumu ve Konfigürasyonu
- Uzak Bağlantı için Kubectl Konfigürasyonu
- Pod Network Route'larının Ayarlanması
- DNS'in Kurulumu ve Konfigürasyonu
- Smoke Test