Giriş
Kubernetes açık kaynaklı bir araçtır ve konteyner orkestrasyonunda kritik öneme sahiptir. Kubernetes, çeşitli bulut ortamlarında ve hatta şirket içi sunucularda kümeleri büyük ölçekte orkestre ederek ve yöneterek çalışır. Küme, konteynerleştirilmiş uygulamaları ve hizmetleri çalıştırmak için tasarlanmış bir ana makine grubudur. Bir kümenin çalışması için en az iki düğüme ihtiyacı vardır – biri master düğüm ve bir worker düğüm. Ölçeklenebilirliği göz önünde bulundurarak, kümeyi ihtiyaç duyulduğu kadar worker düğümü ile genişletme seçeneğine sahipsiniz.
Kubernetes'te bir node bir sunucuyu ifade eder. Master node, kümenin durumunu yöneten bir sunucudur. Worker node'lar ise iş yüklerini çalıştıran sunuculardır – bunlar genellikle konteynerleştirilmiş uygulamalar ve servislerdir.
Bu rehber, Ubuntu 20.04 üzerinde iki node'dan oluşan bir Kubernetes kümesini kurma ve dağıtma adımlarında size yol gösterecektir. Belirtildiği gibi, Kubernetes ile çalışırken iki node'a sahip olmak en temel yapılandırmadır. Temel bilgileri anladıktan sonra daha fazla worker node ekleme seçeneğine de sahipsiniz. Ayrıca, master node'un worker node'u kontrol etmesini sağlamak için iki sunucuyu nasıl birbirine bağlayacağınızı da göstereceğiz.
Yapılandırmamızı test etmek için, Docker konteynerinde çalışan bir Nginx web sunucusunu kümeye dağıtacağız. Bu, Kubernetes'in tipik bir gerçek hayat uygulamasıdır. Kubernetes'in aşağıdakiler gibi bazı tanımlayıcı bileşenleri hakkında daha fazla bilgi edineceksiniz: kubectl ve kubeadm ilerledikçe. Ayrıca, Kubernetes platformunun temellerine aşina olmak için öncelikle Kubernetes araç kiti temellerini tanıma eğitimimize göz atmanız tavsiye edilir.
Şimdi başlayalım!
Önkoşullar
Şu işletim sistemi üzerinde çalışan iki adet sunucu hazırlamanız gerekecektir: Ubuntu 20.04. En iyi performans için Kubernetes için minimum sistem gereksinimleri 2 GB RAM ve 2 CPU'dur. Bu Ubuntu sunucunuzu kurmanıza yardımcı olacak adım adım eğitim kılavuzunun 1 ila 4. adımlarını takip edebilirsiniz. CloudSigma üzerinde. Bir sunucu master düğümü, diğeri ise worker düğümü olacak. İki sunucumuzu uygun bir şekilde kubernetes-master ve kubernetes-worker. Bu, eğitimi takip etmeyi kolaylaştırır. Ancak, tercih ettiğiniz ana makine adlarını seçmekte özgürsünüz.
-
Her iki düğümde de sudo yetkilerine sahip ve yukarıdaki eğitimde belirtilen komutları çalıştırmak için kullanacağımız bir kullanıcı eklediğinizden emin olun. Talimatlar için bu Linux sudoers dosyasını yapılandırma eğitimini takip edin.
-
Ağ bağlantısı – kümedeki sunucular iletişim kurabilmelidir. VM'lerinizi CloudSigma üzerinden dağıttığınızda, varsayılan olarak genel bir IP ile internete bağlanacaklardır. Yerel bir ağdan çalışıyorsanız, her sunucudaki /etc/hosts dosyanızı düzenlemeniz ve bunları uygun şekilde bağlamanız gerekebilir.
-
Şunu kurmanız ve etkinleştirmeniz gerekecektir: Docker düğümlerin her birinde. Kubernetes, pod'lar içinde konteynerleri çalıştırmak için bir konteyner çalışma zamanına güvenir. Seçilebilecek başka konteyner platformları olsa da, bu eğitimde Docker kullanacağız. Docker, Ubuntu'nun ihtiyaç duyduğu çalışma zamanı ortamını sağlayacaktır. 1, 2 ve 3. adımlar için şu rehberimizi takip edebilirsiniz: Docker'ı kurma ve çalıştırma eğitimi.
1. Adım: Kubernetes Kurulumu
Bu adımda Kubernetes'i kuracağız. Tıpkı Docker ile ön gereksinimler bölümünde yaptığınız gibi, Kubernetes'i kurmak için komutları her iki düğümde de çalıştırmalısınız. Şunu kullanın: ssh her iki düğümde de oturum açıp devam etmek için. İlk olarak apt-transport-https paketini yükleyerek başlayacaksınız. Bu paket, http ve https ile Ubuntu’nun depolarında çalışmayı sağlar. Ayrıca, curl paketini de yükleyin, çünkü sonraki adımlar için gerekli olacaktır. Aşağıdaki komutu çalıştırın:
|
1 |
sudo apt install apt-transport-https curl |
Ardından, Kubernetes imzalama anahtarını aşağıdaki komutu çalıştırarak her iki düğüme de ekleyin:
|
1 |
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add |
Ardından, Kubernetes deposunu aşağıdaki komutu kullanarak her iki düğümde de bir paket kaynağı olarak ekliyoruz:
|
1 2 |
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" >> ~/kubernetes.list sudo mv ~/kubernetes.list /etc/apt/sources.list.d |
Bundan sonra, düğümleri güncelleyin:
|
1 |
sudo apt update |
- Kubernetes araçlarını kurun
Güncelleme tamamlandığında Kubernetes'i kuracağız. Bu, Kubernetes'i oluşturan çeşitli araçların kurulmasını içerir: kubeadm, kubelet, kubectl, ve kubernetes-cni. Bu araçlar her iki düğüme de kurulur. Her bir aracı aşağıda tanımlıyoruz:
-
kubelet – her düğümde çalışan ve konteyner çalışma zamanındaki iş yüklerini başlatmak için ana düğüm ile iletişimi yöneten bir aracıdır. kubelet'i kurmak için aşağıdaki komutu girin:
|
1 |
sudo apt install kubelet |
-
kubeadm – Kubernetes projesinin bir parçasıdır ve bir Kubernetes kümesini başlatmaya yardımcı olur. kubeadm'i kurmak için aşağıdaki komutu girin:
|
1 |
sudo apt install kubeadm |
-
kubectl – Kubernetes kümeleri içinde komutlar çalıştırmanızı sağlayan Kubernetes komut satırı aracıdır. kubectl'i kurmak için aşağıdaki komutu yürütün:
|
1 |
sudo apt install kubectl |
-
kubernetes-cni – konteynerlerin iletişim kurabilmesini ve veri alışverişinde bulunabilmesini sağlayarak konteynerler içinde ağ oluşturmayı etkinleştirir. Kurmak için aşağıdaki komutu yürütün:
|
1 |
sudo apt-get install -y kubernetes-cni |
İsteğe bağlı olarak, dördünü de tek bir komutla kurabilirsiniz:
|
1 |
sudo apt-get install -y kubelet kubeadm kubectl kubernetes-cni |
Adım 2: Swap Belleğini Devre Dışı Bırakma
Kubernetes, swap belleği kullanan bir sistemde çalışamaz. Bu nedenle, master düğümünde ve tüm worker düğümlerinde devre dışı bırakılmalıdır. Swap belleğini devre dışı bırakmak için aşağıdaki komutu çalıştırın:
|
1 |
sudo swapoff -a |
Bu komut, sistem yeniden başlatılana kadar swap belleğini devre dışı bırakır. Yeniden başlatmalardan sonra bile kapalı kalmasını sağlamalıyız. Bu işlem master ve tüm worker düğümlerinde yapılmalıdır. Bunu, fstab dosyasını düzenleyerek ve /swapfile satırını bir ile yorum satırı haline getirerek#. Aşağıdaki komutu girerek dosyayı nano metin düzenleyici ile açın:
|
1 |
sudo nano /etc/fstab |
Dosya içinde, swapfile satırını aşağıdaki ekran görüntüsünde gösterildiği gibi yorum satırı yapın:

Eğer swapfile satırını görmüyorsanız, bunu göz ardı edin. Düzenlemeyi tamamladığınızda dosyayı kaydedip kapatın. Her iki düğüm için de aynı işlemi uygulayın. Artık sunucunuz yeniden başlatılsa bile takas belleği ayarları kapalı kalacaktır.
Adım 3: Benzersiz Hostname'leri Ayarlama
Daha kolay tanımlama için düğümlerinizin benzersiz ana bilgisayar adlarına sahip olması gerekir. Çok sayıda düğüme sahip bir küme dağıtıyorsanız, bunu çalışan düğümleriniz için node-1, node-2 vb. gibi tanımlayıcı adlar belirleyecek şekilde ayarlayabilirsiniz. Daha önce de belirttiğimiz gibi, düğümlerimizi şu şekilde adlandırdık: kubernetes-master ve kubernetes-worker. Bunları sunucuyu oluştururken ayarlamıştık. Ancak, komut satırından henüz yapmadıysanız kendinizinkini ayarlayabilir veya düzenleyebilirsiniz. Master düğümündeki ana bilgisayar adını düzenlemek için aşağıdaki komutu çalıştırın:
|
1 |
sudo hostnamectl set-hostname kubernetes-master |
Worker düğümünde aşağıdaki komutu çalıştırın:
|
1 |
sudo hostnamectl set-hostname kubernetes-worker |
Mevcut terminal oturumunu kapatabilir ve ssh ile sunucuya tekrar bağlanarak değişiklikleri görebilirsiniz.
Adım 4: Iptables'ın Köprülenmiş Trafiği Görmesini Sağlama
Master ve worker düğümlerinin köprülenmiş trafiği doğru şekilde görmesi için, net.bridge.bridge-nf-call-iptables değerinin yapılandırmanızda 1 olarak ayarlandığından emin olmalısınız. İlk olarak, br_netfilter modülünün yüklü olduğundan emin olun. Bunu şu komutu çalıştırarak doğrulayabilirsiniz:
|
1 |
lsmod | grep br_netfilter |
İsteğe bağlı olarak, bunu şu komutla açıkça yükleyebilirsiniz:
|
1 |
sudo modprobe br_netfilter |
Şimdi, değeri 1 olarak ayarlamak için bu komutu çalıştırabilirsiniz:
|
1 |
sudo sysctl net.bridge.bridge-nf-call-iptables=1 |
Adım 5: Docker Cgroup Sürücüsünü Değiştirme
Varsayılan olarak Docker, “cgroupfs” cgroup sürücüsü olarak kurulur. Kubernetes, Docker'ın çalışmasını with “systemd” sürücüsüyle önermektedir. Bu adımı atlar ve bir sonraki adımda kubeadm'i başlatmaya çalışırsanız, terminalinizde aşağıdaki uyarıyı alırsınız:
|
1 2 |
[preflight] Çallıştırılıyor uçuş-öncesi kontrolleri [UYARI IsDockerSystemdCheck]: tespit edildi "cgroupfs" olarak the Docker cgroup sürücüsü. The önerilen sürücü dir "systemd". Lütfen takip edin the kılavuzu adresindeki https://kubernetes.io/docs/setup/cri/ |
Hem master hem de worker düğümlerinde, cgroupdriver değerini aşağıdaki komutlarla güncelleyin:
|
1 2 3 4 5 6 7 8 9 |
sudo mkdir /etc/docker cat <<EOF | sudo tee /etc/docker/daemon.json { "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2" } EOF |
Ardından, sistem başlangıcında Docker'ı yeniden başlatmak ve etkinleştirmek için aşağıdaki komutları çalıştırın:
|
1 2 3 |
sudo systemctl enable docker sudo systemctl daemon-reload sudo systemctl restart docker |
Bu ayarlandıktan sonra, eğlenceli kısma, yani Kubernetes kümesini dağıtmaya geçebiliriz!
Adım 6: Kubernetes Master Düğümünü Başlatma
Bir Kubernetes kümesi dağıtmanın ilk adımı, master düğümünü ayağa kaldırmaktır. Master düğümünüzün terminalindeyken, kubernetes-master'ını başlatmak için aşağıdaki komutu çalıştırın:
|
1 |
sudo kubeadm init --pod-ağ-cidr=10.244.0.0/16 |
Yukarıdaki komutu çalıştırırsanız ve sisteminiz, Gereksinimler bölümünde açıklandığı gibi minimum RAM veya CPU gibi beklenen gereksinimleri karşılamıyorsa, bir uyarı alırsınız ve küme başlatılmaz:

Aşağıdaki ekran görüntüsü başlatmanın başarılı olduğunu gösteriyor. Ayrıca 10.244.0.0 IP'sine sahip pod ağını belirtmek için bir bayrak ekledik. Bu, kube-flannel'in kullandığı varsayılan IP'dir. Bir sonraki adımda pod ağı hakkında daha fazla konuşacağız.

Çıktıda, kubeadm join komutunu (IP adresimizi gizledik) ve worker node'da ve bu kümeye katılmasını istediğiniz diğer tüm worker node'larda çalıştıracağınız benzersiz bir token'ı görebilirsiniz. Ardından, daha sonra worker node'da kullanacağınız için bu komutu kopyalayıp yapıştırın.
Çıktıda Kubernetes, kümeyi kullanmaya başlamadan önce master düğümünde normal bir kullanıcı olarak çalıştırmanız gereken bazı ek komutları da görüntüler. Bu komutları çalıştıralım:
|
1 2 3 |
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config |
Artık master düğümünü başlattık. Ancak, worker düğümlerini eklemeden önce master düğümünde pod ağını da kurmamız gerekiyor.
Adım 7: Pod Ağı Dağıtımı
Bir pod ağı, sunucular arasındaki iletişimi kolaylaştırır ve Kubernetes kümesinin düzgün çalışması için gereklidir. Resmi belgelerdeki Kubernetes Küme Ağ İletişimi bölümünden daha fazla bilgi edinebilirsiniz. Bu eğitim için Flannel pod ağını kullanacağız. Flannel, Kubernetes gereksinimlerini karşılayan basit bir katman ağıdır.
Pod ağını dağıtmadan önce güvenlik duvarı durumunu kontrol etmemiz gerekir. Eğer Ubuntu sunucunuzu kurma eğitiminin 5. adımını takip ettikten sonra güvenlik duvarını etkinleştirdiyseniz, öncelikle bir güvenlik duvarı kuralı ekleyerek şu port için istisna tanımlamalısınız: 6443 (Kubernetes için varsayılan port). Aşağıdaki ufw komutlarını hem master hem de worker düğümlerinde çalıştırın:
|
1 2 |
sudo ufw allow 6443 sudo ufw allow 6443/tcp |
Bundan sonra, pod ağını master düğümünde dağıtmak için aşağıdaki iki komutu çalıştırabilirsiniz:
|
1 2 |
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/k8s-manifests/kube-flannel-rbac.yml |
Flannel ağının yüklenmesi ortamınıza bağlı olarak birkaç saniye ile bir dakika arasında sürebilir. Her şeyin çalıştığını doğrulamak için aşağıdaki komutu çalıştırın:
|
1 |
kubectl get pods --all-namespaces |
Her şey başarılı olduysa, komutun çıktısı tüm hizmetlerin durumunu çalışıyor olarak göstermelidir:

Ayrıca bileşenlerin sağlık durumunu get component status komutunu kullanarak görüntüleyebilirsiniz:
|
1 |
kubectl get componentstatus |

Bu komutun kısa bir biçimi vardır cs:
|
1 |
kubectl get cs |

Sağlıksız (unhealthy) durumunu görürseniz, aşağıdaki dosyaları düzenleyin ve (spec->containers->command) kısmında bu ifadeyi içeren satırı silin - --port=0 :
|
1 |
sudo nano /etc/kubernetes/manifests/kube-scheduler.yaml |
Aynı işlemi bu dosya için de yapın:
|
1 |
sudo nano /etc/kubernetes/manifests/kube-controller-manager.yaml |
Son olarak, Kubernetes servisini yeniden başlatın:
|
1 |
sudo systemctl restart kubelet.service |
Adım 8: Worker Node'ları Kubernetes Kümesine Dahil Etme
With the kubernetes-master düğümü çalışır durumda ve pod ağı hazır olduğunda, worker düğümlerimizi kümeye dahil edebiliriz. Bu eğitimde yalnızca bir worker düğümümüz var, bu nedenle onunla çalışacağız. Daha fazla worker düğümünüz varsa, kümeye dahil etmek için her zaman aşağıda açıklayacağımız adımların aynısını takip edebilirsiniz.
İlk olarak, ayrı bir terminal oturumunda worker düğümünüze giriş yapın. kubeadm join komutunu kullanacaksınız. Bu komut, master düğümünü Adım 6'da başlattığımızda terminalinizde gösterilmişti. Komutu çalıştırın:
|
1 |
sudo kubeadm join 127.0.0.188:6443 --token u81y02.91gqwkxx6rnhnnly --keşif-token-ca-sertifika-hash sha256:4482ab1c66bf17992ea02c1ba580f4af9f3ad4cc37b24f189db34d6e3fe95c2d |
Küme katılımı tamamlandığında aşağıdaki ekran görüntüsüne benzer bir çıktı görmelisiniz:

Katılma işlemi tamamlandıktan sonra, master node terminaline geçin ve worker node'unuzun kümeye katıldığını doğrulamak için aşağıdaki komutu çalıştırın:
|
1 |
kubectl get nodes |
Yukarıdaki komutun çıktısına ait ekran görüntüsünde, worker node'un kümeye katıldığını görebiliriz:

Adım 9: Kubernetes Kümesine bir Uygulama Dağıtma
Bu noktada, bir Kubernetes kümesini başarıyla kurdunuz. Üzerine bir servis dağıtarak kümeyi kullanılabilir hale getirelim. Nginx, binlerce bağlantıda bile inanılmaz hızlar sunan popüler bir web sunucusudur. Bu kurulumu gerçek hayattaki bir uygulamada kullanabileceğinizi kanıtlamak için Nginx web sunucusunu kümeye dağıtacağız.
Nginx için bir Kubernetes dağıtımı oluşturmak üzere master node üzerinde aşağıdaki komutu çalıştırın:
|
1 |
kubectl create deployment nginx --image=nginx |
Oluşturulan deployment'ı, describe deployment komutunu kullanarak görüntüleyebilirsiniz:
|
1 |
kubectl describe deployment nginx |

To make the nginx servisini internet üzerinden erişilebilir hale getirmek için aşağıdaki komutu çalıştırın:
|
1 |
kubectl create service nodeport nginx --tcp=80:80 |

Yukarıdaki komut, Nginx deployment'ı için dışa açık bir servis oluşturacaktır. Bunun bir nodeport deployment'ı olması nedeniyle, Kubernetes servise aralığında bir port atar.32000+.
Mevcut servisleri şu komutu çalıştırarak alabilirsiniz:
|
1 |
kubectl get svc |

Atanan portumuzun olduğunu görebilirsiniz32264. Bir sonraki adımda kullanmak üzere terminalinizde görüntülenen portu not edin.
Nginx servis dağıtımının başarılı olduğunu doğrulamak için master düğümünden worker düğümüne bir curl çağrısı yapın. Worker düğümünüzün IP'sini ve yukarıdaki komuttan aldığınız portu değiştirin:
|
1 |
curl kendi-kubernetes-worker-ip:32264 |
Varsayılan Nginx çıktısını görmelisiniz: index.html:

İsteğe bağlı olarak, tarayıcınızda worker node IP adresi ve port kombinasyonunu ziyaret edebilir ve varsayılan Nginx dizin sayfasını görüntüleyebilirsiniz:

Bir dağıtımı silmek için dağıtımın adını belirtebilirsiniz. Örneğin, bu komut dağıtımımızı silecektir:
|
1 |
kubectl delete deployment nginx |
Artık kümemizi başarıyla test ettik!
Sonuç
Bu eğitimde, Ubuntu 20.04 üzerinde bir Kubernetes kümesi kurmayı öğrendiniz. Bir master ve worker düğümünden oluşan bir küme kurdunuz. Kubernetes araç setini yüklemeyi başardınız, bir pod ağı oluşturdunuz ve worker düğümünü master düğümüne bağladınız. Ayrıca kümeye temel bir Nginx web sunucusu dağıtımı yaparak konseptimizi test ettik. Bu, Ubuntu üzerinde Kubernetes kümeleriyle çalışmak için bir temel oluşturacaktır.
Biz sadece tek bir worker node kullanmış olsak da, kümenizi dilediğiniz kadar node ile genişletebilirsiniz. Eğer Ansible gibi otomasyon araçlarıyla DevOps konusunda daha derinlere inmek isterseniz, Ansible ve Kubeadm ile Kubernetes kümesi kurulumu gerçekleştirmeyi derinlemesine inceleyen bir eğitimimiz var, göz atın. Eğer bir Kubernetes kümesinde PHP uygulamasının nasıl dağıtılacağını öğrenmek istiyorsanız bu eğitime göz atın.
Keyifli Çalışmalar!
Yorumlar
Henüz yorum yapılmamış. İlk siz olun.