Takip et

Kubernetes Kümesi Kurulumu: Adım Adım Rehber

Kubernetes Kümesi Kurulumu: Adım Adım Rehber Günümüzün hızla değişen teknoloji dünyasında, uygulamaların dağıtımı, ölçeklenmesi ve yönet…

Kubernetes Kümesi Kurulumu: Adım Adım Rehber

Günümüzün hızla değişen teknoloji dünyasında, uygulamaların dağıtımı, ölçeklenmesi ve yönetimi her zamankinden daha kritik hale gelmiştir. İşte tam bu noktada Kubernetes (K8s), container tabanlı uygulamaları otomatik olarak dağıtmak, ölçeklemek ve yönetmek için açık kaynaklı bir platform olarak öne çıkıyor. Bu makalede, kendi Kubernetes kümenizi adım adım nasıl kuracağınızı, gerekli ön hazırlıkları ve kurulum sonrası temel yapılandırmaları detaylı bir şekilde ele alacağız. Kendi kümenizi kurmak, platformun derinliklerini anlamanıza ve özel ihtiyaçlarınıza göre optimize etmenize olanak tanır.

Kubernetes’e Giriş ve Neden Kendi Kümenizi Kurmalısınız?

Kubernetes, Google tarafından geliştirilen ve şu anda Cloud Native Computing Foundation (CNCF) tarafından sürdürülen, container’lı iş yüklerini ve hizmetleri yönetmek için taşınabilir, genişletilebilir, açık kaynaklı bir platformdur. Deklaratif yapılandırma ve otomasyon sunar. K8s, container orkestrasyonunda endüstri standardı haline gelmiştir ve modern mikroservis mimarilerinin temelini oluşturur.

Kubernetes Nedir?

Kubernetes, uygulamalarınızı barındıran container’ları yönetmek için bir dizi soyutlama ve araç sağlar. Temel olarak, uygulamalarınızı çalıştıran sunucuların (düğümlerin) bir kümesini yönetir ve bu uygulamaların her zaman çalışır durumda olmasını, yük dengelemesini ve otomatik olarak ölçeklenmesini sağlar. Bu, geliştiricilerin altyapı karmaşıklığı yerine uygulama geliştirmeye odaklanmasına olanak tanır. K8s, yüksek erişilebilirlik, felaket kurtarma ve otomatik iyileşme gibi kritik özellikler sunar.

K8s Kümesi Kurmanın Avantajları

Kendi Kubernetes kümenizi kurmak, bulut sağlayıcılarının sunduğu yönetilen hizmetlere (EKS, AKS, GKE) kıyasla bazı benzersiz avantajlar sunar. Öncelikle, altyapı üzerinde tam kontrol sahibi olursunuz. Bu, özel ağ yapılandırmaları, belirli depolama çözümleri veya güvenlik politikaları gibi özelleştirmeler yapmanızı sağlar. Ayrıca, özellikle büyük ölçekli veya uzun vadeli projelerde maliyet avantajları sağlayabilir. Kendi kümenizi kurmak, Kubernetes’in iç işleyişini daha iyi anlamanıza ve sorun giderme becerilerinizi geliştirmenize yardımcı olur.

Bulut Sağlayıcılar vs. Kendi Kümenizi Kurmak

Bulut sağlayıcıları tarafından sunulan yönetilen Kubernetes hizmetleri, kurulum ve bakım yükünü üzerinizden alarak kolaylık sağlar. Ancak, bu hizmetler genellikle daha yüksek maliyetli olabilir ve belirli kısıtlamalara sahip olabilir. Kendi kümenizi kurmak ise başlangıçta daha fazla çaba ve teknik bilgi gerektirse de, uzun vadede daha fazla esneklik, maliyet kontrolü ve öğrenme fırsatı sunar. Bu makaledeki rehber, özellikle test, geliştirme ortamları veya belirli on-premise gereksinimleri olan kullanıcılar için idealdir.

Küme Topolojisi ve Gereksinimler

Bir Kubernetes kümesi kurmadan önce, küme topolojinizi planlamanız ve donanım/yazılım gereksinimlerini belirlemeniz kritik öneme sahiptir. Doğru planlama, kurulum sürecini sorunsuz hale getirir ve gelecekteki ölçeklenebilirlik ihtiyaçlarınızı karşılar.

Kontrol Düzlemi ve Çalışan Düğümler

Bir Kubernetes kümesi genellikle en az bir kontrol düzlemi (eski adıyla master node) ve bir veya daha fazla çalışan düğümden (worker node) oluşur.

  • Kontrol Düzlemi (Control Plane): Kümenin beynidir. API sunucusu, zamanlayıcı, kontrolör yöneticisi ve etcd (küme veritabanı) gibi temel bileşenleri barındırır. Kümenin genel durumunu yönetir ve çalışan düğümler üzerindeki iş yüklerini dağıtır.
  • Çalışan Düğümler (Worker Nodes): Uygulamalarınızı çalıştıran Pod’ları barındıran makinelerdir. Her çalışan düğümde kubelet (düğüm ajanı) ve container runtime (Docker, containerd vb.) bulunur.

Minimum bir küme için bir kontrol düzlemi ve bir çalışan düğüm yeterlidir. Üretim ortamları için ise yüksek erişilebilirlik (HA) sağlamak amacıyla genellikle üç veya daha fazla kontrol düzlemi düğümü ve birden fazla çalışan düğüm önerilir.

Donanım ve Yazılım Gereksinimleri

Kurulum için her düğümde belirli minimum donanım ve yazılım gereksinimleri bulunmaktadır.

Bileşen Minimum Gereksinim Önerilen Gereksinim (Test Ortamı)
CPU 2 Çekirdek 4+ Çekirdek
RAM 2 GB 4+ GB
Disk Alanı 20 GB 50+ GB SSD
İşletim Sistemi Ubuntu 20.04+, CentOS 7/8, RHEL 8+, Debian 10+
İnternet Bağlantısı Paket indirmek için gerekli

Tüm düğümler arasında tam ağ bağlantısı (hem genel hem de özel ağlarda) ve her düğüm için benzersiz bir ana bilgisayar adı, MAC adresi ve product_uuid gereklidir.

Ağ Yapılandırması (CNI) Seçimi

Kubernetes, Pod’lar arasında ağ iletişimi sağlamak için bir Container Network Interface (CNI) eklentisine ihtiyaç duyar. Popüler CNI seçenekleri arasında Calico, Flannel, Cilium ve Weave Net bulunur. Her birinin kendine özgü avantajları ve dezavantajları vardır (performans, güvenlik, özellikler). Bu rehberde, kurulum kolaylığı nedeniyle Flannel’ı kullanacağız, ancak üretim ortamları için daha gelişmiş bir CNI (örneğin Calico) düşünülmelidir.

İşletim Sistemi Seçimi ve Ayarları

Ubuntu (20.04 LTS veya üstü) veya CentOS (7/8) gibi modern bir Linux dağıtımı kullanmanız önerilir. Tüm düğümlerde aynı işletim sistemini ve sürümünü kullanmak uyumluluk sorunlarını azaltır.
Her düğümde aşağıdaki ayarların yapılması gerekmektedir:

  • Swap’ın devre dışı bırakılması: Kubernetes’in kararlı çalışması için swap kullanılmamalıdır.
  • iptables ayarlarının yapılması: br_netfilter modülünün yüklenmesi ve net.bridge.bridge-nf-call-iptables ayarının 1 olarak belirlenmesi gerekmektedir.

Ön Hazırlıklar ve Gerekli Araçlar

Küme kurulumuna başlamadan önce, her bir düğümde belirli ön hazırlıkların ve gerekli araçların kurulumunun yapılması gerekmektedir. Bu adımlar, kümenin sorunsuz bir şekilde başlatılmasını sağlar.

Düğüm İsimlendirmesi ve IP Planlaması

Her düğüm için benzersiz ve anlamlı ana bilgisayar adları belirleyin (örneğin, k8s-master-1, k8s-worker-1). Ayrıca, her düğüm için statik IP adresleri atamanız önerilir. Bu, küme bileşenlerinin birbirini her zaman doğru şekilde bulmasını sağlar. Örneğin:

  • Kontrol Düzlemi: 192.168.1.100
  • Çalışan Düğüm 1: 192.168.1.101
  • Çalışan Düğüm 2: 192.168.1.102

SSH Erişimi ve Güvenlik

Tüm düğümlere SSH üzerinden erişiminizin olduğundan emin olun. Güvenlik için parola yerine SSH anahtar çiftleri kullanmanız şiddetle tavsiye edilir. Ayrıca, güvenlik duvarı (firewall) kurallarını yapılandırmanız gerekecektir. Kubernetes’in ihtiyaç duyduğu portları açmalısınız:

Port Protokol Kaynak Hedef Açıklama
6443 TCP Tüm düğümler Kontrol Düzlemi Kubernetes API Sunucusu
2379-2380 TCP Kontrol Düzlemi Kontrol Düzlemi etcd istemci ve eşler arası iletişim
10250 TCP Tüm düğümler Tüm düğümler Kubelet API
10251 TCP Kontrol Düzlemi Kontrol Düzlemi kube-scheduler
10252 TCP Kontrol Düzlemi Kontrol Düzlemi kube-controller-manager
30000-32767 TCP Harici Çalışan Düğümler NodePort Hizmetleri (isteğe bağlı)

Container Runtime Kurulumu (Docker/containerd)

Kubernetes, container’ları çalıştırmak için bir container runtime’a ihtiyaç duyar. Modern Kubernetes sürümlerinde containerd önerilmektedir. Her düğümde containerd‘ı kuralım:

# Tüm düğümlerde çalıştırın
sudo apt update && sudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y containerd.io
sudo systemctl enable --now containerd
sudo mkdir -p /etc/containerd
sudo containerd config default | sudo tee /etc/containerd/config.toml
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml
sudo systemctl restart containerd

kubeadm, kubelet ve kubectl Kurulumu

Bu üç araç, Kubernetes kümesini kurmak ve yönetmek için temel bileşenlerdir.

  • kubeadm: Küme başlatmak için kullanılan komut satırı aracı.
  • kubelet: Her düğümde çalışan ve Pod'ları yöneten aracı.
  • kubectl: Küme ile etkileşim kurmak için kullanılan komut satırı aracı.
# Tüm düğümlerde çalıştırın
sudo apt update
sudo apt install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt update
sudo apt install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

Swap'ı devre dışı bırakın ve br_netfilter modülünü etkinleştirin:

# Tüm düğümlerde çalıştırın
sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

sudo modprobe br_netfilter
echo "net.bridge.bridge-nf-call-iptables = 1" | sudo tee -a /etc/sysctl.conf
echo "net.bridge.bridge-nf-call-ip6tables = 1" | sudo tee -a /etc/sysctl.conf
echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.conf
sudo sysctl --system

Kontrol Düzlemi (Master Node) Kurulumu

Ön hazırlıklar tamamlandıktan sonra, kontrol düzlemi düğümünü başlatmaya hazırız. Bu, kümenin temelini oluşturacaktır.

kubeadm init ile Küme Başlatma

Kontrol düzlemi düğümünde kubeadm init komutunu çalıştırarak kümenin başlatılmasını sağlıyoruz. pod-network-cidr parametresi, Pod'ların kullanacağı IP aralığını belirtir ve seçtiğiniz CNI eklentisi ile uyumlu olmalıdır (Flannel için genellikle 10.244.0.0/16).

# Sadece kontrol düzlemi düğümünde çalıştırın
sudo kubeadm init --pod-network-cidr=10.244.0.0/16


Komutun çıktısı, kubectl'i yapılandırmak için gereken adımları ve çalışan düğümlerin kümeye katılmasını sağlayacak kubeadm join komutunu içerecektir. Bu çıktıyı dikkatlice kopyalayın ve saklayın!

Kubeconfig Dosyasının Yapılandırılması

kubeadm init komutundan sonra, kubectl'i kullanarak küme ile etkileşim kurabilmek için kullanıcı yapılandırmasını ayarlamanız gerekir.

# Sadece kontrol düzlemi düğümünde çalıştırın
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

Pod Ağ Eklentisi (CNI) Kurulumu

Küme başlatıldıktan sonra, Pod'lar arası iletişimi sağlamak için bir CNI eklentisi kurmalısınız. Bu rehberde Flannel kullanıyoruz.

# Sadece kontrol düzlemi düğümünde çalıştırın
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml


Bu komut, Flannel Pod'larını kümenize dağıtacak ve ağ yapılandırmasını tamamlayacaktır. Birkaç dakika içinde Pod'ların Running durumuna geçtiğini görmelisiniz.

Çalışan Düğümleri (Worker Nodes) Ekleme

Kontrol düzlemi hazır olduğunda, çalışan düğümleri kümeye dahil edebiliriz.

Çalışan Düğümlerde Ön Hazırlıklar

Çalışan düğümlerde de kontrol düzlemi düğümünde yaptığınız containerd, kubeadm, kubelet, kubectl kurulumlarını, swap kapatma ve br_netfilter ayarlarını yapmış olmanız gerekmektedir. Tüm bu ön hazırlıkların tamamlandığından emin olun.

kubeadm join ile Düğümleri Küme'ye Dahil Etme

Kontrol düzlemi kurulumu sırasında size verilen kubeadm join komutunu, her bir çalışan düğümde sudo ile çalıştırın. Bu komut, bir token ve kontrol düzlemi IP adresi içerir.

# Her bir çalışan düğümde çalıştırın (örnek komut)
sudo kubeadm join 192.168.1.100:6443 --token  --discovery-token-ca-cert-hash sha256:


ve değerlerini kendi kubeadm init çıktınızdan aldığınız değerlerle değiştirin. Bu komut, çalışan düğümün kontrol düzlemi ile iletişim kurmasını ve kümeye katılmasını sağlar.

Düğümlerin Durumunu Kontrol Etme

Tüm çalışan düğümleri kümeye ekledikten sonra, kontrol düzlemi düğümünden kubectl get nodes komutunu çalıştırarak düğümlerin durumunu kontrol edebilirsiniz.

# Sadece kontrol düzlemi düğümünde çalıştırın
kubectl get nodes


Birkaç dakika içinde tüm düğümlerin Ready durumuna geçtiğini görmelisiniz. Eğer bir düğüm NotReady durumundaysa, sudo systemctl status kubelet ve sudo journalctl -u kubelet komutları ile logları kontrol ederek sorun gidermeye çalışın.

Küme Doğrulama ve Temel Kullanım

Kümeniz artık çalışır durumda. Şimdi, küme bileşenlerinin düzgün çalıştığından emin olalım ve basit bir uygulama dağıtalım.

Küme Bileşenlerini Kontrol Etme

Kümenizin sistem Pod'larının durumunu kontrol etmek için aşağıdaki komutu kullanın:

# Sadece kontrol düzlemi düğümünde çalıştırın
kubectl get pods -A


Tüm Pod'ların Running durumunda olması gerekmektedir. Özellikle kube-system namespace'indeki Pod'lar (kube-apiserver, kube-controller-manager, kube-scheduler, etcd, kube-proxy, flannel) kritik öneme sahiptir.

İlk Uygulamanızı Dağıtma (Deployment ve Service)

Basit bir Nginx uygulaması dağıtarak kümenizin çalıştığını test edelim.

# Nginx Deployment oluşturma
kubectl create deployment nginx-app --image=nginx --replicas=3

# Deployment'ın durumunu kontrol etme
kubectl get deployments
kubectl get pods -l app=nginx-app

# Nginx uygulamasını dışarıya açmak için bir NodePort Service oluşturma
kubectl expose deployment nginx-app --type=NodePort --port=80


kubectl get services komutunu çalıştırarak Nginx servisi için atanan NodePort'u görebilirsiniz (genellikle 30000-32767 aralığında bir port). Daha sonra, herhangi bir çalışan düğümün IP adresini ve bu NodePort'u kullanarak Nginx sayfasına web tarayıcınızdan erişebilirsiniz (örn. http://:).

Küme Kaynaklarını İzleme

Küme kaynaklarını izlemek için kubectl top nodes ve kubectl top pods gibi komutları kullanabilirsiniz. Bu komutlar için Metrics Server'ın kurulu olması gerekir:

# Sadece kontrol düzlemi düğümünde çalıştırın
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml


Birkaç dakika sonra kubectl top nodes ve kubectl top pods komutlarını kullanarak CPU ve bellek kullanımını görüntüleyebilirsiniz.

Sonraki Adımlar ve Önemli Konular

Temel Kubernetes kümesi kurulumunu tamamladınız. Ancak, üretim ortamları için veya daha gelişmiş senaryolar için dikkate almanız gereken birçok ek konu bulunmaktadır.

Yüksek Erişilebilirlik (HA) Yapılandırması

Tek bir kontrol düzlemi düğümü, tek hata noktası (Single Point of Failure) oluşturur. Üretim ortamları için, birden fazla kontrol düzlemi düğümü ile yüksek erişilebilirlik (HA) yapılandırması şiddetle önerilir. Bu genellikle bir yük dengeleyici (load balancer) ve harici bir etcd kümesi veya kubeadm'in dahili etcd replikasyon mekanizması ile gerçekleştirilir.

Depolama Çözümleri (Persistent Storage)

Pod'lar geçicidir ve yeniden başlatıldıklarında veya başka bir düğüme taşındıklarında verilerini kaybederler. Uygulamalarınızın kalıcı verilere ihtiyacı varsa, bir depolama çözümü (Persistent Volume) entegre etmeniz gerekir. NFS, Ceph, GlusterFS gibi depolama sistemleri veya bulut sağlayıcılarının sunduğu blok depolama hizmetleri Kubernetes ile entegre edilebilir.

Güvenlik En İyi Uygulamaları

Kubernetes kümenizin güvenliğini sağlamak kritik öneme sahiptir. Bu, RBAC (Role-Based Access Control) yapılandırması, ağ politikaları (Network Policies), güvenlik bağlamları (Security Contexts) ve güncel güvenlik yamalarının uygulanması gibi konuları içerir. Ayrıca, küme bileşenlerinin sertifika yönetimini de düzenli olarak kontrol etmelisiniz.

Yükseltme ve Bakım

Kubernetes sürekli gelişen bir platformdur ve düzenli olarak yeni sürümler yayınlanır. Kümenizi güncel tutmak, yeni özelliklerden yararlanmak ve güvenlik açıklarını kapatmak için önemlidir. kubeadm upgrade komutu ile kümenizi yükseltebilirsiniz, ancak yükseltme öncesinde mutlaka yedekleme yapmalı ve dokümantasyonu dikkatlice okumalısınız.

Sonuç

Bu makalede, kendi Kubernetes kümenizi baştan sona nasıl kuracağınızı detaylı bir şekilde ele aldık. Ön hazırlıklardan başlayarak, kontrol düzlemi ve çalışan düğümlerin kurulumuna, küme doğrulama ve temel uygulama dağıtımına kadar tüm adımları kapsadık. Kendi kümenizi kurmak, Kubernetes'in temel prensiplerini anlamak ve platform üzerinde tam kontrol sahibi olmak için harika bir yoldur. Her ne kadar bu süreç başlangıçta karmaşık görünse de, adım adım ilerleyerek başarılı bir kurulum gerçekleştirebilirsiniz. Unutmayın, bu kurulum bir başlangıç noktasıdır ve üretim ortamları için daha fazla optimizasyon, güvenlik ve yüksek erişilebilirlik yapılandırmaları gerekecektir.

SSS (Sık Sorulan Sorular)

1. K8s kümesi kurmak ne kadar sürer?

Ön hazırlıklar dahil olmak üzere, bu rehberdeki adımları takip ederek temel bir küme kurulumu 1-2 saat sürebilir. Deneyimli kullanıcılar için bu süre daha da kısalabilir.

2. Hangi CNI eklentisini seçmeliyim?

Başlangıç için Flannel kolay kurulumu nedeniyle iyi bir seçenektir. Üretim ortamları için Calico (gelişmiş ağ politikaları için), Cilium (eBPF tabanlı yüksek performans) veya Weave Net (kolay kurulum ve özellikler) gibi seçenekler daha uygun olabilir. Seçiminiz, güvenlik, performans ve özellik gereksinimlerinize bağlıdır.

3. Küme kurulumunda karşılaşılan yaygın sorunlar nelerdir?

Yaygın sorunlar arasında swap'ın devre dışı bırakılmaması, güvenlik duvarı (firewall) portlarının açık olmaması, container runtime ile ilgili sorunlar, CNI eklentisinin düzgün çalışmaması ve kubeadm join komutunun yanlış kullanılması yer alır. Logları (journalctl -u kubelet, kubectl logs -n kube-system ) kontrol etmek sorun gidermede çok yardımcı olacaktır.

4. Üretim ortamı için bu kurulum uygun mu?

Bu rehber, Kubernetes'i öğrenmek ve test ortamları oluşturmak için harika bir başlangıç noktasıdır. Ancak, üretim ortamları için yüksek erişilebilirlik (HA kontrol düzlemi), gelişmiş depolama çözümleri, kapsamlı izleme ve loglama, güvenlik sertleşmesi ve otomatik yedekleme gibi ek yapılandırmalar gereklidir. Bu adımlar, kümenizin dayanıklılığını ve güvenliğini artıracaktır.

5. kubeadm init komutunu yanlış çalıştırdım, nasıl sıfırlayabilirim?

Eğer kubeadm init komutunu yanlış çalıştırdıysanız veya kümenizi sıfırlamak isterseniz, kontrol düzlemi düğümünde aşağıdaki komutu çalıştırabilirsiniz:

sudo kubeadm reset
sudo rm -rf $HOME/.kube


Bu komut, küme bileşenlerini kaldıracak ve düğümü temizleyecektir. Ardından kurulum adımlarını baştan tekrar edebilirsiniz. Çalışan düğümler için de sudo kubeadm reset komutu kullanılabilir.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.