Containerd Runtime ile Kubernetes 1.25 Cluster Kurulumu
Ubuntu 20.04
Merhabalarr,
Bu yazımda 1 master 1 worker node olacak şekilde ve yazımısın başlığı olan container runtime için de containerd kurulumu gerçekleştircez.
Containerd: Container runtime türlerinden bir tanesidir. Docker tarafından CNCF bağışlanmıştır. CNCF tarafından geliştirilip yöneltilmektedir. Containerd, Fiziksel( Physical ) yada Sanal( Virtual ) makinede container’ın yaşam döngüsünü yöneten bir container runtime’dır. Containerd, RunC’yi kontrol eden deamon dır diyebiliriz aslında. Performans ve yoğunluk için tasarlanmıştır. Containerd runC’nin seccomp ve kullanıcı namespace desteği gibi gelişmiş feature’nın yanısıra, container clone ve live migration (canlı geçişi) ve restore ( geri yüklemenden) sağlar. Containerd aslında, container yasam döngüsünü (life cycle) yönetir. Yaşam döngüsü olarak;
- Image Transfer ( Görüntü aktarımı )
- Mount Storage ( Depolama )
- Container Execution ( Container çalıştırma )
- Network Attachments ( Ağ ekleme )
- Container Create ( Container Oluşturma )
- Container Stop ( Container Durdurma )
- Container Destroy (Container Yoketme )
- Image pull ( Image çekme private veya public registry)
Containerd özelliklerine ( feature ) bakacak olursak;
- Client: Containerd ortamınıza entegre etmek için local ve ya cloud sistemlerde çalıştırabilceğiniz library.
- Namespaces: Aynı host container’ı gruplar arasında ayrımı etkinleştitrir.
- Containers: Container içindeki containerd bir metadata nesnesidir. OCI( Open Container Interface) , container image ve file systemler buna eklenebilir.
- OCI runtime specification: Containerd’nin runtime nasıl davranacağını belirler. OCI image tabanlı oluşturalan container’ların functionality sahiptir.
- Root Filesystems: Bir dosya sistemini bir container oluşturma ve başka bir container kullanması için snapshot oluşturmasına mğmkün kılar.
- Clone and restore: Container’ları kullanmak, diğer makinelerdeki container’lara taşımak ve container’ın checkpoint( kontrol noktası) bağlı olarak geri yüklemeyi sağlar.
- Snapshot plugins: GPRC aracı ile harici eklentiler yüklerek, containerd’nin snapshot kapasitesini genişletme imkanı sağlar.
İlk olarak containerd kurulumu yapalım. Aşağıdaki kodları terminal ekranından çalıştırak containerd kurulumu yapıyoruz.
sudo apt updatesudo apt install -y containerd
Yukarıdaki komutlar ile containerd kurulumu yaptık. Şimdide containerd configure geldi. Eğer configure yapılmaz ise kubernetes kurduğumuzda runtime olarak göremez.
Note: Containerd configure için config.toml dosyasında bulunur, fakat default yani official kurulumunda gelmemektedir.
sudo mkdir -p /etc/containerd/containerd config default | sudo tee /etc/containerd/config.toml
Containerd, kubernetes için container runtime olarak kullanmak için SystemdCgroup enable etmemiz gerekmektedir yani false olarak gelmektedir. Bunun için çalıştırcağımız komut,
sudo sed -i ‘s/SystemdCgroup \= false/SystemdCgroup \= true/g’ /etc/containerd/config.toml
Son olarak da deamon, enable ve start edip containerd statusüne bakalım.
sudo systemctl daemon-reloadsudo systemctl start containerdsudo systemctl enable containerdsudo systemctl status containerd
Note: Buraya kadar olan tüm kurulum adımlarını kubernetes cluster’ınızda master veya node olarak kullancağınız tüm node’lara kurulum yapmalısınız.
Şimdide kubernetes kurulumu yapalım. Kubernetes cluster’ımızı kubeadm ile gerçekleştircez. Aşağıdaki komutları terminalden tek tek sırası ile çalıştıralım.
Şimdide kubernetes versiyonlarını listelemek için,
apt list -a kubeadm
Şimdide kubectl, kubeadm ve kubelet’i kurulumu yapalım. Bunun için çalıştıracağımız komut,
sudo apt install -y kubeadm=1.25.1–00 kubelet=1.25.1–00 kubectl=1.25.1–00
Note: Eğer burada versiyon kendiniz belirtmez iseniz son versiyonu kuracaktır.
Kubectl, kubeadm ve kubelet’i kontrol etmek için,
sudo apt-mark hold kubelet kubeadm kubectl
Evet başarılı şekilde kubectl,kubeadm ve kubelet kurulumu tamamladık.
Note: Buraya kadar olan kurulum adımlarını kubernetes cluster’ınıza dahil edeceğiniz tüm master ve worker node’lara kurmalısınız.
Master olarak ilk kuracağımız makinede bazı ayarlamalar yapmamız gerekiyor. ilk olarak swap’ı alanını kapatmamız gerekiyor.
- Swap’ı geçiçi olarak kapatmak için;
sudo swapoff -a
- Swap’ı kalıcı olarak kapatmak için;
sudo vim /etc/fstab
Swapfile commend alıyoruz ve kaydedip çıkıyoruz.
Kurulumum yapacağımız makinenin etc/hosts kurulum yapacağımız makinenin IP adresi ile kendimizin belirlediği HOSTNAME giriyoruz.
192.168.1.6 kubernetes.deniz.master.internal
Şimdide Kubernetes Cluster yaratma komutunu çalıştıralım.
sudo kubeadm init --control-plane-endpoint="kubernetes.deniz.master.internal:6443" --apiserver-advertise-address=192.168.1.6 --node-name deniz-master --pod-network-cidr=192.168.0.0/24
Şimdide kube config ve admin.conf için,
mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/config
Bu komutları terminalden sıra ile çalıştırdıktan sonra kubectl get nodes komutunu koşalım ve Node’un statüsü NotReady çünkü bir tane CNI ( Container Network Interface) kurmamız gerekiyor. Ben Weave-Net kurulumu yapacam ama isterseniz calico, fanal yada canal birinide kurabilirsiniz.
WeaveNet kurulum komutu;
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d ‘\n’)"
Sonra kubernetes node’unun durumuna tekrar baktığımızda,
kubernetes get nodeskubernetes get nodes -owide
Yukarıda görüldüğü gibi kubernetes Clusterımızın container runtime olarak containerd görmüştür.
Bu yazımızın da sonuna gelmiş bulunmaktayız. Araştırmalarım ve sektörde karşılaştığım senaryolar üzerine yazılarımı yazmaya devam edeceğim. Umarım faydalı bir yazı olmuştur. Yazımı okuduğunuz için teşekkürler.
Referanslar;