8 min read

Kubernetes Cluster Kurulumu

Kubernetes Cluster Kurulumu

Bu kılavuzda, Ubuntu 22.04 LTS üzerinde Kubeadm kullanarak Kubernetes cluster kurulumu adım adım ele alınacaktır. Kurulum tamamlandığında, 1 master node ve 2 worker node’lu bir Kubernetes cluster'ınız olacak. Ayrıca, cluster üzerinde containerd runtime ve Calico ağ eklentisini kullanarak kapsayıcılar arası iletişim sağlanacak. Pod'lar için ağ aralığı olarak 172.16.1.0/24 kullanılacaktır.

Topoloji ve Node Bilgileri

Ağ ve node bilgileri aşağıdaki gibi yapılandırılacaktır. Tüm node'lar 172.16.1.0/24 ağında olacak ve bu yapı, Kubernetes cluster’ınızın iç iletişimini sağlayacaktır.

  • Master Node (172.16.1.10): Kubernetes kontrol düzlemini barındırır, API server, etcd ve scheduler gibi bileşenleri içerir.
  • Worker Node 01 (172.16.1.11): Uygulama iş yüklerini çalıştıracak ilk worker node.
  • Worker Node 02 (172.16.1.12): Uygulama iş yüklerini çalıştıracak ikinci worker node.

1. Tüm Node'larda Temel Ayarlar

Bu adımda, her bir node’da temel sistem güncellemeleri, saat senkronizasyonu ve gerekli paket kurulumları yapılacaktır.

Sistem güncellemeleri ve paket kurulumları:

sudo apt update && sudo apt upgrade -y
sudo apt install -y curl apt-transport-https vim git wget gnupg2 software-properties-common ca-certificates chrony

Hostname Ayarlama:

Her node’da hostname doğru şekilde ayarlanmalıdır.

  • Master Node:
sudo hostnamectl set-hostname kubernetes-master
  • Worker Node 01:
sudo hostnamectl set-hostname kubernetes-node01
  • Worker Node 02:
sudo hostnamectl set-hostname kubernetes-node02

Her node’da hostname komutu ile ayarları doğrulayabilirsiniz.


2. /etc/hosts Dosyasının Düzenlenmesi

Node'lar arasında isim çözümlemesi yapılabilmesi için her node'da /etc/hosts dosyasına diğer node'ların IP adreslerini ve isimlerini eklememiz gerekiyor.

Her node'da aşağıdaki düzenlemeyi yapın:

sudo vim /etc/hosts

Ve şu satırları ekleyin:

172.16.1.10 kubernetes-master
172.16.1.11 kubernetes-node01
172.16.1.12 kubernetes-node02

Bu işlem, node'ların IP adreslerine karşılık gelen hostname’leri kullanarak iletişim kurmasını sağlar.


3. NTP (Zaman Senkronizasyonu) Ayarları

Kubernetes node'ları arasındaki zaman senkronizasyonu önemlidir. Chrony servisi ile node'lar arasında doğru zaman senkronizasyonu sağlanmalıdır.

Chrony yapılandırması:

sudo vim /etc/chrony/chrony.conf

server satırını bulun ve güvenilir bir NTP sunucusunu ekleyin:

server 0.ubuntu.pool.ntp.org iburst

Sonrasında Chrony servisini yeniden başlatın:

sudo systemctl restart chrony.service
sudo systemctl enable chrony.service

Bu adımlar node'lar arasında zaman farkını en aza indirecektir, bu da Kubernetes cluster'ın kararlılığı için önemlidir.


4. Swap’i Devre Dışı Bırakma

Kubernetes'in düzgün çalışabilmesi için swap devre dışı bırakılmalıdır. Swap aktif olduğunda, Kubernetes performansı olumsuz etkilenebilir ve pod'ların zaman zaman düzgün çalışmamasına neden olabilir.

Geçici olarak swap’i devre dışı bırakma:

sudo swapoff -a

Kalıcı olarak devre dışı bırakmak için /etc/fstab dosyasını düzenleyin:

sudo sed -i '/swap/ s/^\(.*\)$/#\1/g' /etc/fstab

Bu, sistem yeniden başlatıldığında swap'in otomatik olarak devre dışı kalmasını sağlayacaktır.


5. Container Runtime Kurulumu: containerd

Kubernetes’in containerd runtime kullanarak çalışması için bu adımda containerd kurulumunu yapacağız.

Containerd’nin kurulması:

sudo apt install -y containerd

Containerd yapılandırması:

Varsayılan containerd yapılandırma dosyasını oluşturun:

sudo mkdir -p /etc/containerd
sudo containerd config default | sudo tee /etc/containerd/config.toml

Yapılandırma dosyasındaki bazı ayarlamaları yaptıktan sonra containerd servisini yeniden başlatın:

sudo systemctl restart containerd
sudo systemctl enable containerd

Not: containerd config.toml dosyasında gerekli olan cgroup yapılandırmasının doğru olduğundan emin olun. Bunun için SystemdCgroup = true satırının doğru olduğundan emin olun.


6. Kubernetes Kurulumu

Kubernetes’in temel bileşenleri olan kubeadm, kubelet ve kubectl'i kurarak cluster’ı başlatmaya hazır hale getireceğiz.

Kubernetes APT Reposunu Ekleyin:

sudo curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"

Kubeadm, Kubelet ve Kubectl Kurulumu:

sudo apt update
sudo apt install -y kubeadm kubelet kubectl
sudo apt-mark hold kubeadm kubelet kubectl

Bu komutlar, Kubernetes’in ana bileşenlerini yükler ve sistemdeki otomatik güncellemelere karşı sabitlenmiş şekilde tutulmasını sağlar.


7. Master Node'da Kubernetes Cluster’ın Başlatılması

Master node’da Kubernetes cluster’ını başlatmak için kubeadm init komutu kullanılır. Pod ağ aralığı Calico ile uyumlu olacak şekilde ayarlanmalıdır.

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

Bu işlem birkaç dakika sürebilir. İşlem tamamlandığında, komut satırında cluster’a worker node'ları eklemek için kullanılacak kubeadm join komutunu içeren bir çıktı göreceksiniz.

Kubectl komutlarını kullanabilmek için gerekli yapılandırmayı yapın:

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

Bu komutlar sayesinde kubectl komutlarını master node’da kullanabilirsiniz.


8. Calico Ağ Eklentisinin Yüklenmesi

Pod'ların birbirleriyle iletişim kurabilmesi için bir ağ eklentisine ihtiyaç vardır. Bu kurulumda Calico kullanılacaktır.

Calico’nun kurulumu için:

kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

Calico'nun kurulumu tamamlandığında, node'larınızda pod’lar arasında ağ iletişimi sağlanacaktır.


9. Worker Node'ları Cluster’a Katma

Master node’daki kubeadm init komutu sonrası ekranda çıkan kubeadm join komutu ile worker node'ları cluster'a ekleyebilirsiniz. Bu komut, master node’a bağlanacak worker node'ların cluster’a katılmasını sağlar.

Her worker node’da aşağıdaki gibi join komutunu çalıştırın:

sudo kubeadm join 172.16.1.10:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>

Worker node'lar başarılı bir şekilde master node’a katıldıklarında, kubectl get nodes komutuyla cluster’daki tüm node'ları görebilirsiniz.


10. Cluster'ı Kontrol Etme

Master node üzerinde kubectl get nodes komutunu çalıştırarak tüm node'ların doğru bir şekilde cluster’a katıldığını ve Ready durumuna geçtiğini doğrulayabilirsiniz:

kubectl get nodes

11. Sonraki Adımlar

Cluster kurulumunu tamamladıktan sonra, Kubernetes üzerine uygulamalar dağıtmak için hazır olacaksınız. Ayrıca, daha ileri adımlar olarak helm, metrics-server ve dashboard gibi bileşenler kurarak cluster'ı daha verimli yönetebilirsiniz.

12. Ek Bileşenlerin Kurulumu ve Yönetimi

Cluster kurulumunu tamamladıktan sonra, uygulamalarınızı yönetmek ve Kubernetes ortamınızı daha işlevsel hale getirmek için bazı ek bileşenler ve araçlar kurabilirsiniz. Bu bölümde, Helm, Metrics Server, ve Kubernetes Dashboard kurulum adımlarını ele alacağız.


12.1. Helm Kurulumu

Helm, Kubernetes için bir paket yöneticisidir ve uygulamaları kolayca dağıtmanıza, yönetmenize ve güncellemenize yardımcı olur. Helm kurulumunu gerçekleştirmek için aşağıdaki adımları takip edin.

Helm’in Kurulumu:

  1. Helm’in APT Repo’sunu Ekleyin:
curl https://baltocdn.com/helm/signing.asc | sudo apt-key add -
echo "deb https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable.list
  1. Helm’i Kurun:
sudo apt update
sudo apt install helm
  1. **Helm’i Başlatın:**Helm’i kullanabilmek için bir namespace (alan) oluşturmanız gerekebilir. Örneğin, kube-system namespace’ini kullanarak Helm’in değerlerini ve kurulumlarını yönetebilirsiniz.
kubectl create namespace kube-system

12.2. Metrics Server Kurulumu

Metrics Server, Kubernetes cluster’ınızdaki kaynak kullanımını izlemek için kullanılır. Pod'ların CPU ve bellek kullanımını izleyerek kaynak yönetimini kolaylaştırır.

Metrics Server’ın Kurulumu:

  1. Metrics Server’ı Yükleyin:
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
  1. **Kurulumun Doğrulanması:**Metrics Server’ın düzgün bir şekilde kurulduğundan emin olmak için aşağıdaki komutu kullanarak pod’ları kontrol edin:
kubectl get pods -n kube-system

Metrics Server’ın çalıştığını doğrulamak için, aşağıdaki komutu çalıştırarak kaynak kullanımını görebilirsiniz:

kubectl top nodes

12.3. Kubernetes Dashboard Kurulumu

Kubernetes Dashboard, cluster’ınızı görsel bir arayüzle yönetmenize olanak tanır. Pod'lar, servisler ve diğer kaynaklar üzerinde kolaylıkla işlem yapabilirsiniz.

Dashboard’ın Kurulumu:

  1. Dashboard Manifest Dosyasını Uygulayın:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.4.0/aio/deploy/recommended.yaml
  1. **Dashboard’a Erişim Sağlama:**Dashboard’a erişmek için bir kullanıcı yetkilendirmesi yapmanız gerekecek. Öncelikle, bir admin kullanıcı oluşturmanız gerekir.
kubectl create serviceaccount dashboard-admin -n kubernetes-dashboard
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kubernetes-dashboard:dashboard-admin
  1. **Token’i Alın:**Dashboard’a giriş yapmak için token kullanacaksınız. Aşağıdaki komut ile token’i alabilirsiniz:
kubectl get secret -n kubernetes-dashboard $(kubectl get secrets -n kubernetes-dashboard | grep dashboard-admin | awk '{print $1}') -o jsonpath="{.data.token}" | base64 --decode
  1. **Dashboard’a Bağlanma:**Dashboard’u aşağıdaki komut ile yerel bir proxy üzerinden açabilirsiniz:
kubectl proxy

Ardından, tarayıcınızda şu URL’yi ziyaret edin:

http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/

Giriş ekranında, token’i kullanarak giriş yapabilirsiniz.


13. Uygulamaların Dağıtımı

Artık Kubernetes cluster’ınız kurulmuş ve yönetim araçlarınız hazır. Uygulama dağıtımına geçmek için bir örnek uygulama dağıtımı yapabilirsiniz. Örneğin, bir Nginx web sunucusu dağıtımı yapabilirsiniz.

Nginx Dağıtımı:

  1. Nginx için bir YAML dosyası oluşturun:nginx-deployment.yaml adında bir dosya oluşturun ve içerisine aşağıdaki kodu ekleyin:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80
  1. **Uygulamayı Dağıtın:**Aşağıdaki komutu çalıştırarak Nginx uygulamasını dağıtın:
kubectl apply -f nginx-deployment.yaml
  1. **Dağıtımın Durumunu Kontrol Edin:**Dağıtımın başarılı bir şekilde oluşturulduğunu kontrol etmek için aşağıdaki komutu kullanabilirsiniz:
kubectl get deployments
  1. **Nginx Servisini Oluşturun:**Nginx uygulamanıza dışarıdan erişim sağlamak için bir servis oluşturmalısınız. nginx-service.yaml adında bir dosya oluşturun ve içerisine şu kodu ekleyin:
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  type: NodePort
  1. **Servisi Uygulayın:**Servisi oluşturmak için aşağıdaki komutu çalıştırın:
kubectl apply -f nginx-service.yaml
  1. **Servis Bilgilerini Kontrol Edin:**Servisin doğru bir şekilde oluşturulduğunu ve NodePort numarasını öğrenmek için aşağıdaki komutu kullanabilirsiniz:
kubectl get services

Bu komut, servisin hangi NodePort üzerinde çalıştığını gösterir.
7. **Nginx Uygulamanıza Erişim Sağlayın:**Herhangi bir worker node’un IP adresini ve yukarıda aldığınız NodePort numarasını kullanarak Nginx uygulamanıza tarayıcı üzerinden erişebilirsiniz:

http://<worker-node-ip>:<node-port>

14. Sonuç

Artık Kubernetes cluster’ınız başarıyla kurulmuş ve temel bileşenler ile yönetim araçları eklenmiştir. Bu kurulum ile birlikte uygulamalarınızı yönetmek, dağıtmak ve izlemenin temel adımlarını öğrenmiş oldunuz.

Öneriler:

  • Kaynak İzleme: Uygulamalarınızın ve node'larınızın kaynak kullanımını izlemek için kubectl top komutunu kullanın.
  • Pod Güncellemeleri: Uygulama güncellemeleri yaparken, Helm kullanarak daha verimli bir yönetim sağlayabilirsiniz.
  • Otomatik Ölçekleme: Kubernetes'in otomatik ölçekleme özelliklerini inceleyerek uygulamalarınızı daha dinamik hale getirebilirsiniz.

Bu kılavuz, Kubernetes üzerinde bir cluster kurma ve temel yönetim araçlarını kullanma konusunda size temel bir anlayış sağlamayı hedeflemektedir. Gelişmiş özellikler ve en iyi uygulamalar için resmi Kubernetes belgelerini incelemenizi öneririm.