KUBERNETES’E GİRİŞ VE KUBEADM İLE K8S CLUSTER OLUŞTURMA

Ömer Faruk URHAN
4 min readJul 19, 2020

Merhaba. Medium ortamında yazacağım ilk yazı olacak olan bu yazıda kubernetes’den (k8s)bahsedeceğiz ve k8s’e derinlemesine girmeden önce temel k8s cluster bileşenlerinden bahsedip kubeadm ile k8s cluster oluşturacağız.

Kubernetes Google tarafından GO dilinde geliştirilmiş Cloud Native Computing Foundation tarafından desteklenen mevcut konteyner haline getirilmiş uygulamalarınızı otomatik deploy etmek, provizyonlamak gibi işlemler ile birlikte yönetmenizi sağlayan bir Konteyner kümeleme (container cluster) platformudur. Kubernetes google ekibi içinde ilk önce Borg daha sonra Omega olarak ortaya çıkmış ve 2014 yılında open-source olarak tüm geliştiricilerin hizmetine açılmıştır. Popüler bir konteyner orkestrasyon platformudur.

K8S clusterı bir çok düğümden (sanal veya fiziksel sunucu) oluşabilir. Temelde iki tip düğüm vardır. Bunlar:

Master Node: K8S “Control Plane” birimini üzerinde barındıran hostdur. Bu düğüm tüm k8s clusterını yönetir ve yönetim bileşenlerini barındırır.

Worker Node: Deploy edilen uygulamaların çalıştırıldığı düğümlerdir.

K8S Cluster Bileşenleri

Control Plane (Master düğüm) üzerinde yer alan k8s bileşenlerine bakacak olursak:

API server: Kullanıcıların ve diğer cluster bileşenlerinin iletişim kurduklarını birimdir.

Scheduler: Uygulamaların (podların, konteynerlerin) düğümler üzerinde oluşturulmasını planlar.

Controller Manager: Cluster seviyesi işleri gerçekleştirir. Cluster bileşenlerini replike eder, worker düğümleri takip eder, cluster düğümleri hizmet veremez durumda olduklarında yarıda kalan işleri çözümler vb.

etcd: Cluster konfigürasyonlarının kalıcı olarak tutulduğu dağıtık veri depolama alanıdır.

Control Plane bileşenleri cluster durumunu tutar ve kontrol eder. Uygulamaları çalıştırmaz. Uygulamalar worker düğümler üzerinde çalışır:

Container Runtime: Konteynerleri çalıştırır. Örneğin Docker, rkt vb.

Kubelet: K8S API’si ile konuşur ve düğüm üzerinde bulunan konteynerleri kontrol eder.

Kube-proxy: Uygulama bileşenleri arasındaki trafiği dağıtır. (load-balance)

Bu kısa açıklamanın ardından K8S clusterı oluşturmaya başlayabiliriz. K8S clusterı oluşturmanın birçok yönetmi vardır. Biz bu yazıda kubeadm’yi (kubernetes admin) kullanacağız. Kubeadm k8s clusterı oluşturmayı kolaylaştıran bir tooldur. Kurulumumuzu tek control plana (master) ve iki adet worker düğüm olmak üzere üç (3) adet sunucu üzerinde gerçekeleştireceğiz. İşletim sistemi olarak Ubuntu 18.04'ü kullanacağız.

İlk olarak üç sunucuda da konteyner runtime olarak kullanacağımız docker’ı kuruyoruz.

sudo apt-get update
sudo apt-get install docker.io

Docker servisini başlatalım ve sunucular yeniden başlatıldığında docker servisinin otomatik olarak başlatılması için docker servisini aktif edelim.

sudo systemctl start docker
sudo systemctl enable docker

Docker’ın çalıştığından emin olalım.

sudo systemctl status docker

Kubernetes’i standart olmayan bir depodan indireceğimiz için, yazılımın orijinal olduğundan emin olmak önemlidir. Bunu bir imza anahtarı ekleyerek yapabiliriz. Bu komutu üç sunucuda da çalıştırmalısınız.

curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add

Kubernetes default ubuntu repolarında yer almadığından aşağıdaki komutu çalıştırarak kubernetes reposunu ekliyoruz. Üç sunucuda da çalıştırıyoruz. :)

sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"

Kubernetes kurmadan önce k8s yükleme araçlarını kuruyoruz. (Üç sunucuda da)

sudo apt-get install kubeadm kubelet kubectlsudo apt-mark hold kubeadm kubelet kubectl

Kurulumu doğrulamak için aşağıdaki komutu çalıştırıyoruz.

kubeadm version

Kubernetes deployment’ına başlayabiliriz. K8S deploymentına başlamadan önce tüm sunucularda swap belleği disable ediyoruz.

sudo swapoff –a

Her sunucuya özel isim atıyoruz. Master olacak sunucu için:

sudo hostnamectl set-hostname ubuntu-master01

Worker sunucular için:

sudo hostnamectl set-hostname ubuntu-worker01
sudo hostnamectl set-hostname ubuntu-worker02

Kubernetes clusterını podların kullanacağı IP bloğunu belirterek master düğümde (ubuntu-master) başlatıyoruz.

sudo kubeadm init --pod-network-cidr=10.244.0.0/16

Bu komut bittiğinde, komut çıktısının sonunda kubeadm join mesajı görüntülenir. Bu mesajı not etmeliyiz. Bu mesaj worker düğümlerin clustera üye edilmesinde kullanılacaktır.

Daha sonra cluster için master sunucuda bir dizin oluşturuyor, konfigürasyonu tamamlıyoruz.

ubuntu-master:~$ mkdir -p $HOME/.kubeubuntu-master:~$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configubuntu-master:~$ sudo chown $(id -u):$(id -g) $HOME/.kube/config

Clusterdaki farklı düğümlerde oluşacak olan podların birbirleri ile haberleşebilmesi için pod networkune (CNI/Container Network Interface)ihtiyaç duyulmaktadır. Pod networkunun IP aralığını kubeadm ile clusterı oluştururken belirlemiştik. CNI birçok seçenek mevcuttur. Biz bu yazıda flannel sanal networkunu kullanacağız. Ayrıntılı bilgi için https://github.com/coreos/flannel adresini ziyaret edebilirsiniz.

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

Bu komut ile başlayan kurulum tamamlandıktan sonra tüm cluster bileşenlerinin sağlıklı bir şekilde çalıştığını teyit etmek için aşağıdaki komutu çalıştırıyoruz.

kubectl get pods --all-namespaces

Clusterı başarılı bir şekilde oluşturduk. Şimdi sıra clustera worker düğümleri dahil etmeye geldi. Sırası ile worker düğümlere ssh ile bağlantı yaparak kubeadm init komutu çıksının sonunda verilen kubeadm join ile başlayan metni komut olarak çalıştırıyoruz.

kubeadm join --discovery-token abcdef.1234567890abcdef --discovery-token-ca-cert-hash sha256:1234..cdef 1.2.3.4:6443

Komutu çalıştırdıktan sonra birkaç dakika sonra clusterın durumunu kontrol ediyoruz.

kubectl get nodes

Komut çıktısının “STATUS” sekmesinde “ready” görüldüğünde worker düğümlerin clustera dahil edilmesi tamamlanmıştır.

Anlatılan tüm adımlar başarılı bir şekilde tamamlandığında üç düğümlü k8s clusterı kurulumu tamamlanmış olacaktır. K8S konseptleri ve kurulan cluster üzerinde yapılacak olan diğer işlemler ilerleyen yazılarda ele alınacaktır. İyi çalışmalar.

Yararlanılan Kaynaklar:

https://www.amazon.com/Kubernetes-Action-Marko-Luksa/dp/1617293725

--

--