KUBERNETES HARDWAY SERİSİ 1. YAZI: VAGRANT İLE KVM ÜZERİNDE SUNUCU PROVİZYONLAMA

Ömer Faruk URHAN
4 min readApr 18, 2021

Merhaba, bu yazı serisinde kubernetes mimarisini daha iyi anlamak ve derinlemesi incelemek aynı zamanda yeniden öğrenmek maksadıyla zor olan yöntemle kuracağız. Tüm kubernetes bileşenlerini manuel olarak kurup konfigürasyonalarını tek tek yapacağız. Bu işlem için adı kubernetes ile anılan, sempatik tavırlarıyla herkes tarafından bilinen Kelsey Hightower’ın oluşturduğu git reposunu (https://github.com/kelseyhightower/kubernetes-the-hard-way.git) kullanacağız. Belirtilen repoda Google Cloud Engine üzerinde provizyonlanan VM’ler üzerinde kurulumlar gerçekleştirilirken, biz kendi yerel makinemizde KVM (Kernel based Virtualization) ve Vagrant kullanarak altyapımızı oluşturacağız. Bu kısa açıklamanın ardından ilk adım olarak Vagrant ve KVM ile kurulumu yapacağımız ortamı oluşturalım.

Vagrant Hashicorp tarafından geliştirilen ve sunucu provizyonlama işini otomatik hale getiren bir yazılımdır. Çeşitli pluginlerle birlikte farklı sanallaştırma yazılımları ile entegre olarak çalışabilmektedir. Biz bu yazımızda vagrant’ı detaylıca incelemeden yalnzıca provizyonlama yapacak kadar inceleyeceğiz. Kurulumları yapacağımız makinemiz Ubuntu 20.04.Dolayısı ile kurulacak tüm paketler debian tabanlı olacaktır. Farklı bir linux dağıtımı kullanıyorsanız değişecek tek şey kullandığınız paket yöneticisi olacaktır. Bu hatırlatmadan sonra başlayalım.

Ubuntu makinemiz üzerinde KVM sanallaştırma için gerekli bileşenleri kurup servisleri aktif hale getiriyoruz.

sudo apt install -yqq bridge-utils libvirt-bin qemu-kvm fish netcat-openbsd
sudo systemctl enable libvirtd ; sudo systemctl start libvirtd

Vagrant kurulumunu yapıp daha sonra KVM üzerinde makine provizyonlayabilmek için vagrant libvirt pluginini kuracağız. Vagrantın sitesinden debian paketini indirip kurulumu gerçekleştiriyoruz.

wget https://releases.hashicorp.com/vagrant/2.2.14/vagrant_2.2.14_x86_64.debsudo dpkg -i vagrant_2.2.14_x86_64.deb

Vagrant libvirt pluginini yüklüyüyoruz.

sudo apt install ruby-dev libvirt-devCONFIGURE_ARGS="with-libvirt-include=/usr/include/libvirt with-libvirt-lib=/usr/lib" vagrant plugin install vagrant-libvirt

Vagrantta provizyonlayacağımız imajı (box) seçmemiz gerekiyor. İmajları https://app.vagrantup.com/boxes/search adresinden aratarak bulabilirsiniz. Libvirt desteği olan Ubuntu20.04 imajını bulup (generic/ubuntu2004) provizyonlanacak makinelerin ayarlarını yapabilmek projeyi oluşturuyoruz.

mkdir kubernetes-hard-way
cd kubernetes-hard-way
vagrant init generic/ubuntu2004

Bulunduğumuz dizinde Vagrantfile oluşuyor. Provizyonlayacağımız makinelerin tanımlarını Vagrantfile da yapacağız. Daha sonra ayrıntılı olarak anlatacağımız kurulum için 3 adet VM provizyonlayacağız.

#KVM PROVISIONER AYARLARIVagrant.configure("2") do |config|config.vm.provider "libvirt" do |libvirt|
libvirt.cpu_mode = "host-passthrough"
libvirt.storage_pool_name = 'default'
end
## MASTER NODEconfig.vm.define "master01" do |cfg|
cfg.vm.box = "generic/ubuntu2004"
cfg.vm.hostname = "master01"
cfg.vm.provision :shell, path: "bootstrap.sh"
cfg.vm.network :private_network, :ip => "192.168.121.21"
cfg.vm.provider "libvirt" do |lv, override|
lv.graphics_type = "vnc"
lv.video_type = "vga"
lv.input :type => "tablet", :bus => "usb"
lv.video_vram = 32768
lv.memory = 4096
lv.cpus = 2
override.vm.synced_folder './filetransfer', '/vagrant', type: 'rsync'
end
end
## WORKER NODE 01config.vm.define "worker01" do |cfg|
cfg.vm.box = "generic/ubuntu2004"
cfg.vm.hostname = "worker01"
cfg.vm.provision :shell, path: "bootstrap.sh"
cfg.vm.network :private_network, :ip => "192.168.121.22"
cfg.vm.provider "libvirt" do |lv, override|
lv.graphics_type = "vnc"
lv.video_type = "vga"
lv.input :type => "tablet", :bus => "usb"
lv.video_vram = 32768
lv.memory = 4096
lv.cpus = 2
override.vm.synced_folder './filetransfer', '/vagrant', type: 'rsync'
end
end
## WORKER NODE 02
config.vm.define "worker02" do |cfg|
cfg.vm.box = "generic/ubuntu2004"
cfg.vm.hostname = "worker02"
cfg.vm.provision :shell, path: "bootstrap.sh"
cfg.vm.network :private_network, :ip => "192.168.121.23"
cfg.vm.provider "libvirt" do |lv, override|
lv.graphics_type = "vnc"
lv.video_type = "vga"
lv.input :type => "tablet", :bus => "usb"
lv.video_vram = 32768
lv.memory = 4096
lv.cpus = 2
override.vm.synced_folder './filetransfer', '/vagrant', type: 'rsync'
end
end
end

Bu dosya ile 3 adet sanal makine (master01, worker01, worker02) oluşturulmasını sağlamaktayız. Bu makinelerde başlangıçta yapılacak olan ayarlar için aynı dizinde bootstrap.sh script dosyasını oluşturuyoruz. Bu dosyada ise işletim sistemi güncellemesi yapıp swap partitionunu kapatıyoruz. (swap’ın kapatılması kubernetes kurulumu için bir öngereksinimdir.)

#! /bin/bashexport DEBIAN_FRONTEND=noninteractiveapt_install_prerequisites() {
echo "[$(date +%H:%M:%S)]: Running apt-get update..."
apt-get -qq update
echo "[$(date +%H:%M:%S)]: Running apt-get upgrade..."
apt-get -qq upgrade -y
}
install_initial_setup() {
echo "[$(date +%H:%M:%S)]: Setting swapoff ..."
swapoff -a
sed -i '/swap sw/ s/./#&/' /etc/fstab
}
main() {
apt_install_prerequisites
install_initial_setup
}
main
exit 0

Son olarak oluşturucağımız makineler kolayca dosya transfer etmek için bulunduğumuz dizinde “filetransfer” adında bir klasör oluşturuyoruz.

mkdir filetransfer

Son durumda dizin yapımız aşağıda gösterildiği gibi oluyor.

Vagrant ile provizyonlamayı başlatıyoruz.

vagrant up --provider=libvirt

Provizyonlama başladığında ilk olarak generic/ubuntu2004 box’ı download edilecek ve sonrasında kurulum bir kaç dakika içerisinde tamamlanacaktır. Kurulum sonrası durumu kontrol ediyoruz.

vagrant status

Görüldüğü gibi makineleriniz çalışıyor. Makinelere ssh erişimi yapıp kontrol ediyoruz.

vagrant ssh master01

Görüldüğü üzere makinemize erişim sağlayabildik. IP adresini kontrol ettiğimizde 192.168.121.49 ve 192.168.121.21 adreslerini aldığını görüyoruz. Vagrant KVM üzerinde varsayılan olarak “vagrant-libvirt” networkunu (192.168.121.0/24) oluşturmaktadır. Makine başlatıldığında bu networkten dhcp aracılığı ile yönetim IP adresini (192.168.121.49)almaktadır. Kubernetes kurulum için vermiş olduğumuz IP adresi ise statik IP adresidir. (192.168.121.21) Kurulumumuz bu mimari üzerinde devam ettireceğiz.

Bir sonraki yazıda kurduğumuz VMler üzerinde kubernetes kurulumunu manuel olarak yapmaya başlayacağız. Şimdilik bu kadar. Anlatımda yer alan tüm dosyalara aşağıda yer alan github reposundan erişebilirsiniz.

https://github.com/omerurhan/vagrant-libvirt.git

İyi çalışmalar.

--

--