Kubernetes 1.30 Install - Onprem


Gereksinimler
Onprem DNS Server : Windows veya Linux Bind vb 
Yeni kurulmuş ve update edilmiş Rocky Linux 9.3
Sudo ile birlikte admin yetkisine sahip bir kullanıcı veya direkt root user
Her makinede en az 2 vCPU 2 GB ram
Stabil bir internet bağlantısı

Lab ortamı 
ilk olarak DNS Server üzerinde gerekli dns ve sunucu isimlerini açıyoruz.
dns.1w2.io     -> 192.168.1.60 -> Windows Server
master.1w2.io  -> 192.168.1.65 -> Rocky Linux Server
worker1.1w2.io -> 192.168.1.66 -> Rocky Linux Server
worker2.1w2.io -> 192.168.1.67 -> Rocky Linux Server

1 - Linux makinelerin isimlerini aşağıdaki gibi ayarlıyoruz.
sudo hostnamectl set-hostname “master.1w2.io” && exec bash
sudo hostnamectl set-hostname “worker1.1w2.io” && exec bash
sudo hostnamectl set-hostname “worker2.1w2.io” && exec bash

Bu adımda eğer ortamınızda Windows veya Linux DNS sever yok ise kullanın, eğer dns server var ise dns kayıtlarını açmalısınız. Her bi node içindeki /etc/hosts dosyasına aşağıdaki girdileri ekleyin.

192.168.1.65   master.1w2.io
192.168.1.66   worker1.1w2.io
192.168.1.67   worker2.1w2.io


2 - Her node üzerinde takas alanının disable edin. Kubelet' in sorunsuz çalışması için tüm node’ lar takas alanını devre dışı bırakmalıyız. Swap alanının server açılışına eklenmesini de aynı aşamada yapıyoruz. Sırası ile, aşağıdaki komutları çalıştırın,

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

3 - Kubernetes için SELinux ve Güvenlik Duvarı (Firewall) Kurallarını Ayarlama
Aşağıdaki komutları kullanarak tüm node'lardaki SELinux modunu izinli olarak ayarlayın,
(Bu ayarları her node üzerinde yapıyoruz)

sudo setenforce 0
sudo sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/sysconfig/selinux

Master Node, firewall aşağıdaki bağlantı noktalarına izin verin.

sudo firewall-cmd --permanent --add-port={6443,2379,2380,10250,10251,10252,10257,10259,179}/tcp
sudo firewall-cmd --permanent --add-port=4789/udp
sudo firewall-cmd --reload

Worker Node, firewall alttaki bağlantı noktalarına izin verin,

sudo firewall-cmd --permanent --add-port={179,10250,30000-32767}/tcp
sudo firewall-cmd --permanent --add-port=4789/udp
sudo firewall-cmd --reload

4 - Gerekli Kernel Modüllerini ve Parametreleri ekliyoruz.
Kubernetes cluster için, tüm master ve worker üzerinde overlay ve br_netfilter kernel modüllerini eklemeliyiz.

sudo tee /etc/modules-load.d/containerd.conf <<EOF
overlay
br_netfilter
EOF

Modulleri yüklemek için komutlar aşağıda

sudo modprobe overlay
sudo modprobe br_netfilter

Kernel parametreleri için aşağıdaki dosyayı oluşturup içine satırları ekleyip kayıt ediyoruz. ( vi veya nano kullanılabilir)
sudo vi /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables   = 1
net.ipv4.ip_forward                        = 1
net.bridge.bridge-nf-call-ip6tables = 1

Bu komut ile yaptığımız kernel modul ve parametreleri devreye alıyoruz load yapıyoruz. 

sudo sysctl --system

5 - Containerd Runtime yüklüyoruz ( Docker Yerine )
Kubernetes bir konteyner runtime gerektirir ve en popüler seçeneklerden biri containerd dir. Ancak Rocky Linux varsayılan paket depolarında mevcut değildir, bu nedenle tüm master ve worker nodeler' e aşağıdaki docker deposunu ekleyin.

sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

Şimdi tüm master ve worker nodeler üzerinde containerd yüklemesi yapıyoruz.

sudo dnf install containerd.io -y

Sırada containerd' yi systemdcgroup kullanacak şekilde yapılandırma var, her master ve worker node  üzerinde aşağıdaki komutları çalıştırın.

containerd config default | sudo tee /etc/containerd/config.toml >/dev/null 2>&1
sudo sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml

Containerd servisini restart ediyoruz ve server açılışına ekliyoruz her master ve worker node üzerinde yapıyoruz.

sudo systemctl restart containerd
sudo systemctl enable containerd

Containerd çalışma durumunu bir kontrol edelim her master ve worker node üzerinde yapıyoruz.

sudo systemctl status containerd

6 - Kubernetes araçlarını (tools) yüklüyoruz.

Kubeadm, kubectl ve kubelet gibi Kubernetes araçları Rocky Linux 9'un varsayılan paket depolarında mevcut değildir. Bu nedenle, bu araçları yüklemek için aşağıdaki depoyu her master ve worker node üzerinde ekleyin.

cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.30/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.30/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF


Not: Bu yazının yazıldığı sırada Kubernetes 1.30 sürümü mevcuttur, bu nedenle depoyu eklerken v1.30'dan bahsettim.

Sırada aşağıdaki komut ile Kubernetes araçları kubeadm kubectl ve kubelet yüklemelerini her master ve her node üzerine yüklüyoruz.
sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes

 

Kubernetes araçlarını yükledikten sonra, kubelet servisini her master ve her node üzerinde server  açılışına ekliyoruz.

sudo systemctl enable --now kubelet

7- Kubernetes yüklemsine başlıyoruz şimdi :) 

Şimdi, Kubernetes kurmaya kurmaya hazırız. Kubernetes cluster' in master node' dan başlatmak için Kubeadm komutunu aşağıdaki gibi çalıştırın. Komut satırının sonundaki server ismine dikkat ederek ve değiştirerek komutu uygulayınız.

sudo kubeadm init --control-plane-endpoint=master

Yukarıdaki komut sonrasında aşağıdaki gibi bir çıktı vermesi gerekiyor master node. Burada alt satırda bulunan resimde sarı ve sarı okla işaretlediğim alanda isin worker node' larınızı cluster ortamına eklemek için gerekli olan komut satırlarını göreceksiniz bu alanı bir notapad e kayıt etmeniz sizin için iyi olacaktır. Hatta prod ortamınıza sonradan cluster' e ekleme yaparkende kullanabileceksiniz.

örnek : 

kubeadm join master:6443 --token 5hihin.pd0x69fm9c84lj0l \

        --discovery-token-ca-cert-hash sha256:358499b111f8b3e6da00add3eba8b58bce57c36d9768e30bd1f3caa7ef532e1d

Sürece master node üzerinde işlem yaparak devam ediyoruz aşağıdaki komutları girerek.

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

Arkasından yukarıda örneği ve resimde işaretli alandaki komut ile worker node' ları cluster içine ekliyoruz.

kubeadm join master:6443 --token 5hihin.pd0x69fm9c84lj0l \
--discovery-token-ca-cert-hash sha256:358499b111f8b3e6da00add3eba8b58bce57c36d9768e30bd1f3caa7ef532e1d

Her worker node üzerinde komut çalıştırıldıktan sonra aşağıdaki resimlerdeki gibi çıktıları almanız gerekiyor.

Worker1

Worker2


Sonrasında Master node arayüzüne geçip aşağıdaki komutu çalıştırıyoruz.

kubectl get nodes


Buraya kadar bir cluster kurulumunu yaptık ve bitirdik ama default olarak birkaç ekleme yapmamız lazım ki en önemlisi network ayarı ve yönetimi bunun için 8. adımdan devam ediyoruz. Zaten resimde not ready yani network yok iletişim yok diye sadece status bölümünü istediğimiz gibi göremiyoruz birkaç adım sonra görebileceğiz ok.

8 - Calico Network Addon yüklemesi
Kubernetes cluster içinde podlar arasında iletişimi sağlamak, DNS hizmetinin küme ile çalışmasını sağlamak, master ve worker durumunu Hazır hale getirmek için Calico network addın gereklidir.
calico CNI (Container Network Interface) eklentisini yüklemek için aşağıdaki kubectl komutlarını yalnızca master node üzerinden çalıştırmalısınız.

kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.27.3/manifests/calico.yaml

Calico yüklemesi sonrasında bir süre bekleyip aşağıdaki komut girelim bu komut calico pod durumlarını kontrol ediyor ve status durumları running modda olmalıdır.

kubectl get pods -n kube-system


Test öncesinde cluster durumu gözlemleyelim artık not ready bölümü resimde görebileceğiniz gibi ready hale geldi calico install sonrasında 
kubectl get nodes

Buraya ekstra bir not: Kubernetes Cluster kurulumu bittikten sonra ekranda 
kubectl get nodes ekran çıktısında worker node role ataması için aşağıdaki komut kullanılabilir.

kubectl label node worker1.1w2.io node-role.kubernetes.io/worker=worker
kubectl label node worker2.1w2.io node-role.kubernetes.io/worker=worker
Eklenen label silmek içinde aşağıdaki komutu kullanabilirsiniz

kubectl label node worker1.1w2.io node-role.kubernetes.io/worker- (sondaki isim ve - işareti çok önemli )
kubectl label node worker2.1w2.io node-role.kubernetes.io/worker- (sondaki isim ve - işareti çok önemli )

 Bu makaleyi 2024 Mayıs ta yazdım ama yayınlamak yeni nasip oldu bilgilerinize. :) 

OpenShift Container Platform Kurulumu için Yaygın Terimler Sözlüğü


Bu sözlük, seçilen kurulum metoduna göre kurulum içeriğiyle ilgili yaygın terimleri tanımlar. Kurulum sürecini daha iyi anlamak için aşağıdaki terimler listesini okuyun.

Kubernetes bileşenlerinin listesi


Kubernetes bileşenlerinin tam listesini hem on-premises (onprem) hem de bulut tabanlı (cloud) ortamlar için sağlayayım. Bu listede, Kubernetes kontrol bileşenlerinin yanı sıra, genellikle bu ortamlarda kullanılan diğer önemli bileşenler de bulunacaktır.
On-Premises (Onprem) Kubernetes Ortamı
1. kube-apiserver
  • Namespace: kube-system
  • Açıklama: Kubernetes API sunucusudur ve tüm API isteklerini kabul eder. Bütünleşik bir ön uç sağlar ve güvenlik kimlik doğrulaması ve yetkilendirme işlemlerini gerçekleştirir.
2. kube-scheduler
  • Namespace: kube-system
  • Açıklama: Pod'ların hangi nodelerde çalışacağını belirler. Çalışma yüklerinin dengelenmesi ve kaynakların etkin kullanımı için kararlar alır.
3. kube-controller-manager
  • Namespace: kube-system
  • Açıklama: Çeşitli kontrol döngülerini (replication controller, endpoint controller, namespace controller vb.) yönetir. Bu döngüler, kaynakları ve durumları düzenli olarak izler ve gereken değişiklikleri uygular.
4. etcd
  • Namespace: kube-system
  • Açıklama: Dağıtılmış bir anahtar-değer deposu olup, Kubernetes clusternin tüm veri ve yapılandırmalarını saklar. Veri tutarlılığı ve erişilebilirliği sağlar.
5. kube-proxy
  • Namespace: kube-system
  • Açıklama: Her nodede çalışır ve Kubernetes hizmetlerinin ağ yönlendirmesini sağlar. İsteklerin doğru pod'a iletilmesini sağlar.
6. coredns
  • Namespace: kube-system
  • Açıklama: Kubernetes cluster içinde DNS hizmetlerini sağlar. Pod'lar arasında ad çözümleme ve servis keşfi işlemlerini gerçekleştirir.
7. kubelet
  • Namespace: Her nodede çalışır, bu nedenle namespace'e bağlı değildir.
  • Açıklama: Kubernetes node ajanıdır. Pod'ların çalıştırılmasını ve yönetilmesini sağlar. API sunucusuyla iletişim kurarak nodedeki durumları günceller.
8. kube-controller-manager
  • Namespace: kube-system
  • Açıklama: Çeşitli kontrol döngülerini (replication controller, job controller, daemonset controller vb.) yöneten merkezi bileşendir. Kaynakları denetler ve durum değişikliklerini uygular.
9. metrics-server
  • Namespace: kube-system
  • Açıklama: Kubernetes cluster için temel kaynak ölçümlerini toplar ve sağlar. CPU ve bellek kullanımı gibi metriklerin izlenmesine olanak tanır.
10. calico/flannel
  • Namespace: kube-system veya özel namespace (genellikle CNI bileşenleri için özel bir namespace oluşturulabilir)
  • Açıklama: Kubernetes ağ yöneticisi olarak görev yapar. Pod'lar arasındaki ağ trafiğini yönlendirir ve güvenliğini sağlar.
Cloud Tabanlı Kubernetes Ortamı
1. kube-apiserver
  • Namespace: kube-system
  • Açıklama: Kubernetes API sunucusudur ve tüm API isteklerini kabul eder. Cloud ortamlarında, genellikle yüksek erişilebilirlik sağlamak için birden fazla bölgede dağıtılır.
2. kube-scheduler
  • Namespace: kube-system
  • Açıklama: Pod'ların hangi nodelerde çalışacağını belirler. Cloud kaynakları ile etkileşime geçer ve kaynakların verimli kullanımını sağlar.
3. kube-controller-manager
  • Namespace: kube-system
  • Açıklama: Cloud ortamlarında dinamik olarak ölçeklenebilir kontrol döngülerini yönetir. Bu, kaynakların otomatik olarak artırılması veya azaltılması gibi işlevleri içerir.
4. etcd
  • Namespace: kube-system
  • Açıklama: Dağıtılmış bir anahtar-değer deposudur ve Kubernetes cluster nin tüm veri ve yapılandırmalarını saklar. Cloud sağlayıcıları, genellikle yüksek erişilebilir ve yedekli etcd hizmetleri sunar.
5. kube-proxy
  • Namespace: kube-system
  • Açıklama: Kubernetes hizmetlerinin ağ yönlendirmesini sağlar. Cloud ortamlarında, ağ trafiğinin coğrafi olarak dağılmış kaynaklarla entegrasyonunu kolaylaştırır.
6. coredns
  • Namespace: kube-system
  • Açıklama: Kubernetes cluster içinde DNS hizmetlerini sağlar. Cloud ortamlarında, bölgesel DNS hizmetleriyle entegrasyon sağlayabilir.
7. kubelet
  • Namespace: Her nodede çalışır.
  • Açıklama: Kubernetes node ajanıdır. Cloud nodelerinde pod'ların çalıştırılmasını ve yönetilmesini sağlar.
8. cloud-controller-manager
  • Namespace: kube-system
  • Açıklama: Cloud kaynaklarının (load balancers, storage, network routes) yönetimini sağlayan bileşendir. Cloud sağlayıcılarının sunduğu hizmetlerle entegre çalışır.
9. metrics-server
  • Namespace: kube-system
  • Açıklama: Kubernetes cluster için temel kaynak ölçümlerini toplar. Cloud ortamlarında daha geniş ölçekli metrik toplama ve izleme hizmetleri ile entegre çalışır.
10. calico/flannel
  • Namespace: kube-system veya özel namespace
  • Açıklama: Cloud ortamlarında da ağ yöneticisi olarak görev yapar. Pod'lar arasındaki ağ trafiğini yönlendirir ve güvenliğini sağlar. Cloud ağ altyapısıyla entegre çalışabilir.
11. cloud-specific-components

  • Namespace: Sağlayıcıya göre değişir (örneğin aws-cloud-provider, gce-cloud-provider, azure-cloud-provider)
  • Açıklama: Cloud ortamlarında, sağlayıcıya özgü bileşenler olabilir. Bu bileşenler, kaynakların otomatik olarak sağlanmasını ve yönetilmesini sağlar. Örneğin, AWS, GCP veya Azure gibi sağlayıcıların sunduğu yük dengeleyici veya depolama çözümlerine özel bileşenler.

Özet
Her iki ortamda da Kubernetes bileşenlerinin temel görevleri benzerdir, ancak bulut ortamları genellikle yüksek erişilebilirlik, otomatik ölçeklenebilirlik ve geniş metrik toplama ve izleme yetenekleri gibi ek avantajlar sunar. Bileşenlerin namespace bilgisi çoğunlukla kube-system ile sınırlıdır, ancak bazı özel ağ ve yönetim bileşenleri farklı namespace lerde bulunabilir.

Redhat OpenShift içerisindeki servisler


OpenShift içerisindeki tüm servisler ve hangi namespace e ait oldukları hakkında detaylı bir liste sizlerin işine yarayacaktır umarım. Aşağıda yaygın olarak kullanılan OpenShift servislerinin ve ilgili namespace lerinin listesini bulabilirsiniz.

OCP Worker Node REBOOT

( işlemler sırası ile yapılmalı )
1 - bastion makinesine bağlanılır. (ocp oc komutları yüklü ve ssh key install edilmiş bir linux makinede olur.)
2 - bastion ile cluster yapısına bağlanılır.
3 - " oc get co " ile ilk olarak servis durumuna bakılır, yine " oc get nodes " ile nodes durumlarına bakılır.

Red Hat OpenShift'te securityContex Kullanımı


Red Hat OpenShift'te
securityContext ve runAsUser kullanımı oldukça önemlidir, çünkü bu özellikler konteynerlerinizin güvenliğini artırmanıza yardımcı olur. Şimdi adım adım bu konuyu açıklayacağım.

CI / CD Pipeline Nedir?


Continuous Integration (CI):
Geliştiricilerin kodlarını sık sık (günde birkaç kez) merkezi bir depoya entegre ettikleri bir yazılım geliştirme pratiğidir. Her entegrasyon otomatik olarak test edilir.

Continuous Deployment (CD):
Entegre edilen kodun otomatik olarak çeşitli testlerden geçirildikten sonra üretim ortamına (production) otomatik olarak dağıtılmasıdır. 

Continuous Delivery (CD): 
ise kodun üretim ortamına otomatik olarak dağıtılması yerine manuel onay gerektirebilir.