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 --discovery-token-ca-cert-hash sha256:
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:
- 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
- Helm’i Kurun:
sudo apt update
sudo apt install helm
- **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:
- Metrics Server’ı Yükleyin:
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
- **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:
- Dashboard Manifest Dosyasını Uygulayın:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.4.0/aio/deploy/recommended.yaml
- **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
- **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
- **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ı:
- 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
- **Uygulamayı Dağıtın:**Aşağıdaki komutu çalıştırarak Nginx uygulamasını dağıtın:
kubectl apply -f nginx-deployment.yaml
- **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
- **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
- **Servisi Uygulayın:**Servisi oluşturmak için aşağıdaki komutu çalıştırın:
kubectl apply -f nginx-service.yaml
- **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://:
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.