OpeSUSE 15.6 Leap İşletim Sistemi Kurulumu ve üzerine K3s(Kubernetes) kurulum adımları
Home » Uncategorized  »  OpeSUSE 15.6 Leap İşletim Sistemi Kurulumu ve üzerine K3s(Kubernetes) kurulum adımları
OpeSUSE 15.6 Leap İşletim Sistemi Kurulumu ve üzerine K3s(Kubernetes) kurulum adımları

K3s Nedir?

K3s, Rancher Labs tarafından geliştirilen hafif bir Kubernetes dağıtımıdır. Standart Kubernetes’e kıyasla daha az sistem kaynağı tüketir, kurulumu ve yönetimi daha kolaydır ve gömülü sistemler, IoT cihazları veya düşük kaynaklı sunucular için optimize edilmiştir.

 K3s'in Temel Özellikleri

1️⃣ Hafif ve Tek Dosyalık Kurulum

  • K3s, tek bir binari (k3s) olarak çalışır. Geleneksel Kubernetes kurulumları çok sayıda bağımlılığa sahipken, K3s daha az bileşenle gelir.

2️⃣ Düşük Sistem Kaynağı Kullanımı

  • Standart Kubernetes minimum 2 GB RAM gerektirirken, K3s 512 MB RAM ile çalışabilir.
  • Küçük makineler, Raspberry Pi, edge cihazları ve IoT sistemleri için idealdir.

3️⃣ Basitleştirilmiş Yönetim

  • kubectl komutları ile yönetilebilir.
  • Dahili SQLite desteği sayesinde, etcd gibi ağır bir veritabanına ihtiyaç duymaz.

4️⃣ Tümleşik Kubernetes API’si

  • Standart Kubernetes API’sini destekler, yani Kubernetes için yazılmış uygulamalar K3s üzerinde sorunsuz çalışabilir.

5️⃣ Kendi Embedded Container Runtime’ı ile Gelir

  • Containerd kullanır (Docker’ın yerine geçebilir).
  • Bu, K3s’in daha hızlı ve hafif çalışmasını sağlar.

6️⃣ Güvenlik İyileştirmeleri

  • Kullanılmayan bileşenler kaldırılarak daha güvenli hale getirilmiştir.
  • Kendi TLS sertifikalarını ve güvenlik yapılandırmalarını otomatik ayarlar.

🔹 K3s ile Kubernetes Arasındaki Farklar

ÖzellikK3sKubernetes
KurulumTek satırda kurulumDaha karmaşık, birden fazla bileşen
Sistem Kaynak Kullanımı512 MB RAM bile yeterliEn az 2 GB RAM önerilir
VeritabanıVarsayılan olarak SQLite kullanıretcd gerektirir
Kapsayıcı ÇalıştırıcısıContainerd (entegre)Docker veya Containerd
Kullanım AlanıIoT, Edge, Küçük SunucularBüyük Ölçekli Cluster’lar

🔹 K3s Kullanım Alanları

IoT ve Edge Computing → Küçük cihazlarda Kubernetes kullanımı için ideal.
CI/CD Ortamları → Hafif ve hızlı olduğu için test ortamlarında kullanılabilir.
Gömülü Sistemler → Raspberry Pi, ARM tabanlı cihazlar gibi donanımlarda çalışabilir.
Geliştirme Ortamları → Geliştiriciler için hızlı ve taşınabilir bir Kubernetes ortamı sağlar.

İP Adresi adımlarını takip edin isterseniz DHCP isterseniz sabit bir ip adresi vererek devam ediniz.

Yukarıdaki ekranda Server sekmesini seçerek devam ediniz. Bu seçenek GUI ekran içermez. CLI bir kurulum yapar.

Bölge, Dil ve Zaman ayarlarını seçin.

Bu ekranda otomatik bir bölümleme yaparak yani işletim sisteminin otomatik bölümleme ayarlarıyla veya Guided Setup kısmından LVM seçeneğiyle de devam edebilirsiniz.

Bir kullanıcı oluşturarak devam edebilirsiniz.

Burada firewall devre dışı bırakın, ssh servisini aktif hale getirin. Uzak bağlantı ssh için,

Kurulum paketlerinin yüklenmesini bekleyin...

Kurulum tamamlandıktan sonra gelen ekran bu şekilde olacaktır.

Bu komut dizisi, SUSE tabanlı bir Linux dağıtımında K3s Kubernetes kurulumunu yapmaya yönelik bir dizi adımdan oluşuyor. Aşağıda her adımı açıklayarak gözden geçirelim:

1. SUSE Paket Güncelleme ve Gerekli Araçların Kurulumu

sudo zypper refresh
sudo zypper update -y
sudo zypper install -y curl iptables bash-completion
 

  • zypper refresh → Paket listelerini günceller.
  • zypper update -y → Sistemdeki mevcut paketleri günceller.
  • zypper install -y curl iptables bash-completion → Gerekli bağımlılıkları yükler:
    • curl: K3s'in internetten indirilmesini sağlar.
    • iptables: Ağ yönlendirme için gereklidir.
    • bash-completion: Terminalde otomatik tamamlama desteği sağlar.

2. Güvenlik Duvarını Devre Dışı Bırakma ve Swap Kapatma

sudo systemctl stop firewalld
sudo systemctl disable firewalld
sudo swapoff -a
sudo sed -i '/swap/d' /etc/fstab
 

  • firewalld kapatılıyor ve kalıcı olarak devre dışı bırakılıyor. K3s ve Kubernetes’in ağ yönetimini düzgün yapabilmesi için bu genellikle önerilir.
  • swapoff -a → Swap’i kapatır. Kubernetes, swap alanının devre dışı olmasını zorunlu kılar.
  • sed -i '/swap/d' /etc/fstab → Yeniden başlatmalarda swap’in açılmasını önler.

3. K3s Kubernetes Kurulumu

curl -sfL https://get.k3s.io | sh -
 

  • K3s yükleyicisini internetten indirip çalıştırır. Bu, hafif Kubernetes çözümü olan K3s'in kurulumunu yapar.
  • K3s, Rancher tarafından geliştirilen hafif bir Kubernetes dağıtımıdır.

4. K3s Durum Kontrolü ve Başlangıçta Çalıştırma

sudo systemctl status k3s
sudo systemctl enable k3s
 

  • systemctl status k3s → K3s servisinin durumunu kontrol eder.
  • systemctl enable k3s → Sistem yeniden başlasa bile otomatik başlatılmasını sağlar.

5. K3s Kubernetes Node'larını Kontrol Etme

k3s kubectl get nodes
 

  • Kurulumun başarılı olup olmadığını kontrol etmek için Kubernetes düğümlerini listeler.

6. Kubeconfig Dosyasını Ayarlama

mkdir -p $HOME/.kube
sudo cp /etc/rancher/k3s/k3s.yaml $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
export KUBECONFIG=$HOME/.kube/config
 

  • K3s yapılandırmasını KUBECONFIG olarak ayarlar, böylece kubectl komutu kullanılabilir hale gelir.
  • $HOME/.kube/config dosyasına gerekli izinleri verir.

7. Kubernetes Node'larını Tekrar Kontrol Etme

kubectl get nodes
 

  • Kubernetes kümesine bağlı tüm düğümleri (node) tekrar listeler ve sistemin çalıştığını doğrular.

Sonuç ve Öneriler

✅ Eğer kubectl get nodes çıktısında Ready durumu görünüyorsa, kurulum başarılıdır.

 🔹 Eğer node “NotReady” olarak görünüyorsa, şu kontrolleri yapabilirsiniz:

  • sudo systemctl restart k3s ile servisi yeniden başlatın.
  • journalctl -u k3s --no-pager | tail -n 50 komutuyla hata mesajlarını kontrol edin.

K3s’in daha büyük bir cluster’a genişletilmesi veya ek node’lar eklenmesi gerekirse k3s agent komutuyla worker node’lar ekleyebilirsiniz.

K3s Node Kurulumları

K3s, hafif Kubernetes dağıtımı olduğu için master-worker mimarisi yerine tek bir master ve birden fazla agent (worker) node ile çalışır.

 Şimdi 2 adet worker node eklemek için adım adım nasıl ilerleyeceğinizi göstereceğim.

📌 Adım 1: Mevcut K3s Master (Server) Node’un Token'ını Alın

Worker node'ların K3s master’a bağlanabilmesi için token gerekiyor. Token'ı almak için master node'da şu komutu çalıştırın:

sudo cat /var/lib/rancher/k3s/server/node-token
 

Bu komut, worker node’ların master’a bağlanması için gereken token'ı ekrana yazdıracaktır. Bu çıktıyı bir kenara not edin.

📌 Adım 2: Master’ın IP Adresini Öğrenin

Worker node’ların master'a bağlanabilmesi için master’ın IP adresini bilmesi gerekiyor. Master node’un IP adresini öğrenmek için şu komutu çalıştırın:

ip a
 

Örneğin, eğer master node'un IP adresi 192.168.1.100 ise bunu bir kenara not edin.

📌 Adım 3: Worker Node'lara Gerekli Paketleri Kurun

Şimdi her iki worker node’a giriş yapın (SSH ile bağlanarak) ve aşağıdaki komutları çalıştırın:

sudo zypper refresh
sudo zypper update -y
sudo zypper install -y curl iptables bash-completion
sudo systemctl stop firewalld
sudo systemctl disable firewalld
sudo swapoff -a
sudo sed -i '/swap/d' /etc/fstab
 

Bu komutlar, güvenlik duvarını devre dışı bırakır, güncellemeleri yapar ve gerekli araçları yükler.

📌 Adım 4: Worker Node’ları K3s Cluster’a Ekleyin

Şimdi, worker node’lara K3s agent’ı kurmamız gerekiyor. Worker node’larda şu komutu çalıştırın:

curl -sfL https://get.k3s.io | K3S_URL="https://192.168.1.100:6443" K3S_TOKEN="TOKEN_BURAYA" sh -
 

Burada:

  • 192.168.1.100 → Master node'un IP adresidir. Sizin sisteminizde farklı olabilir, kendi IP’nizi kullanın.
  • "TOKEN_BURAYA" → Adım 1’de aldığımız token’ı buraya yapıştırmalısınız.

Bu komut K3s agent'ı kurar ve worker node olarak cluster’a ekler.

📌 Adım 5: Worker Node’ların Durumunu Kontrol Edin

Master node’a geri dönün ve şu komutu çalıştırarak worker node’ların eklendiğini doğrulayın:

kubectl get nodes
 

Çıktı şu şekilde olmalıdır:

NAME               STATUS   ROLES                  AGE   VERSION
master-node        Ready    control-plane,master   10m   v1.27.1+k3s1
worker-node-1      Ready    <none>                 5m    v1.27.1+k3s1
worker-node-2      Ready    <none>                 5m    v1.27.1+k3s1
 

Eğer worker node'lar Ready durumundaysa, başarıyla eklenmiştir. 🎉

📌 Adım 6: Worker Node’lar Bağlanmadıysa Ne Yapmalısınız?

Eğer kubectl get nodes çıktısında worker node'lar yoksa veya NotReady durumundaysa, aşağıdaki komutlarla hataları kontrol edin:

1️⃣ Worker Node'da Servisin Çalışıp Çalışmadığını Kontrol Edin

sudo systemctl status k3s-agent
 

Eğer çalışmıyorsa, başlatın:

sudo systemctl restart k3s-agent
 

2️⃣ Master Node'da API Sunucusunun Açık Olduğunu Kontrol Edin

Master node’da şu komutu çalıştırın:

sudo netstat -tulnp | grep 6443
 

Eğer 6443 portu dinlenmiyorsa, master node’u tekrar başlatın:

sudo systemctl restart k3s
 

✅ Sonuç

Artık 2 adet worker node’u K3s cluster’ınıza eklemiş oldunuz!

 Son olarak bir pod dağıtarak test etmek isterseniz:

kubectl create deployment nginx --image=nginx
kubectl get pods -o wide
 

Bu komut, worker node’lara otomatik olarak dağıtılacak bir Nginx pod’u oluşturur. Eğer pod’lar worker node’larda çalışıyorsa, her şey başarıyla tamamlanmıştır. 🚀

Bundan sonraki aşamalar kendi tecrübelerimdir. Aşağıdaki adımları takip ederek 1 master ve 2 node şeklinde bir kurulumu tamamlayabilirsiniz.

sudo zypper refresh
sudo zypper update -y
sudo zypper install -y curl iptables bash-completion
sudo systemctl stop firewalld
sudo systemctl disable firewalld
sudo swapoff -a
sudo sed -i '/swap/d' /etc/fstab

curl -sfL https://get.k3s.io | sh -

sudo systemctl status k3s

sudo systemctl enable k3s

k3s kubectl get nodes

mkdir -p $HOME/.kube
sudo cp /etc/rancher/k3s/k3s.yaml $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
export KUBECONFIG=$HOME/.kube/config

kubectl get nodes

opensuse 15 k3s kurulumu master kurulumu
zypper refresh
zypper update -y
zypper install -y curl iptables bash-completion
systemctl stop firewalld
systemctl disable firewalld
swapoff -a
sed -i '/swap/d' /etc/fstab
curl -sfL https://get.k3s.io | sh -
systemctl status k3s
systemctl enable k3s
k3s kubectl get nodes
mkdir -p $HOME/.kube
cp /etc/rancher/k3s/k3s.yaml $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
export KUBECONFIG=$HOME/.kube/config
kubectl get nodes

k3s-master1:~ # kubectl get nodes
NAME STATUS ROLES AGE VERSION
k3s-master1 Ready control-plane,master 15m v1.31.6+k3s1

k3s-master1:~ # sudo cat /var/lib/rancher/k3s/server/node-token
K1053b96f8acbfb6e582c3c7aa7df912e30d600b5a34032777589b3195ff0571eee::server:asfsdfdffsadfdsfsafsdafsfssfdsdfsdb663e52d9df8f59f

opensuse 15 k3s kurulumu node kurulumu
zypper refresh
zypper update -y
zypper install -y curl iptables bash-completion
systemctl stop firewalld
systemctl disable firewalld
swapoff -a
sed -i '/swap/d' /etc/fstab

curl -sfL https://get.k3s.io | K3S_URL="https://10.0.X.X:6443" K3S_TOKEN="K1053b96f8acbfb6e582c3c7aa7df912e30d600b5a34032777589b3195ff0571eee::server:bad8b1efd0f99ef7b663e52d9df8f59f" sh -

curl satırı ile başlayan komut node 1 ve node 2 sunucuları master'a dahil etmek için verilir. Cluster'a dahil etmek için kullanılır.

Opensuse tarafında, modprobe overlay ve modprobe br_netfilter yükleme işlemlerini yapmamış olmanıza rağmen K3s node'larınız çalıştıysa, sisteminizde bu modüller zaten varsayılan olarak etkin olabilir.

OpenSUSE 15 ve bazı modern Linux dağıtımları, bazı Kubernetes gereksinimlerini varsayılan olarak yükler. Özellikle:

br_netfilter ve overlay modülleri, modern kernel sürümlerinde çoğu zaman varsayılan olarak yüklenmiştir.
iptables ayarları (net.bridge.bridge-nf-call-iptables = 1) bazı Linux dağıtımlarında varsayılan olarak açık olabilir.

Neden Node'lar Çalıştı?
lsmod | grep overlay ve lsmod | grep br_netfilter komutlarını çalıştırırsan, bu modüllerin zaten yüklü olup olmadığını görebilirsin.
sysctl -a | grep net.bridge.bridge-nf-call-iptables komutunu çalıştırarak, iptables'in zaten ayarlı olup olmadığını kontrol edebilirsin.
Eğer bu ayarlar zaten yapılmışsa, manuel olarak yapmana gerek kalmadan K3s node'ların düzgün çalışacaktır.

tables = 1
EOF

sudo sysctl --system

k3s-node1:~ # lsmod | grep overlay
overlay 200704 5
k3s-node1:~ # lsmod | grep br_netfilter
br_netfilter 36864 0
bridge 450560 1 br_netfilter
k3s-node1:~ # sysctl -a | grep net.bridge.bridge-nf-call-iptables
net.bridge.bridge-nf-call-iptables = 1

Aşağıdaki adımlar node 1 ve node 2 tarafında çalıştırılacak master1 ip adresi ve token ile node lar tarafında çalıştırılması gerekmektedir.

node 1 ve node 2 çalıştırılacak:

curl -sfL https://get.k3s.io | K3S_URL="https://10.0.X.X:6443" K3S_TOKEN="K1053b96f8acbfb6e582c3c7aa7df912e30d600b5a34032777589b3195ff0571eee::server:bad8b1efd0f99ef7b663e52d9df8f59f" sh -

k3s-master1:~ # kubectl get nodes
NAME STATUS ROLES AGE VERSION
k3s-master1 Ready control-plane,master 96m v1.31.6+k3s1
k3s-node1 Ready 95s v1.31.6+k3s1
k3s-node2 Ready 9s v1.31.6+k3s1

node tarafında çalışacak komut : curl -sfL https://get.k3s.io | K3S_URL="https://:6443" K3S_TOKEN="" sh -

Aşağıdaki adımlar bir dns server A isim kayıtları girerek de yapılabilir ya da her sunucunun /etc/hosts dosyasına manual olarak ip ve sunucu isimleri girilebilir.

[root@ns1 ~]# cat /var/named/X.XXXXXXX.local
;
; BIND data file for the local loopback interface
;
$TTL 604800
@ IN SOA ns1.XXXXXX.local. admin.XXXXXX.local. (
3 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;

; NS records for name servers
@ IN NS ns1.XXXXXX.local.
@ IN NS ns2.XXXXXX.local.

; A records for name servers
ns1 IN A 10.0.X.31
ns2 IN A 10.0.X.32
k8s-master1 IN A 10.0.X.37
k8s-node1 IN A 10.0.X.43
k8s-node2 IN A 10.0.X.44
;opensuse 15.6 k3s test kurulum
k3s-master1 IN A 10.0.X.52
; Mail handler or MX record for the domain zngismlnxdns.local
;howtoforge.local. IN MX 10 mail.howtoforge.local.

; A records for domain names
XXXXXXX.local. IN A 10.0.X.31

k3s-master1:~ #

Manual sunucu adını girmek için:

nano /etc/hostname
k3s-master1

k3s-master1:~ #
cat /etc/hosts
#

hosts This file describes a number of hostname-to-address

mappings for the TCP/IP subsystem. It is mostly

used at boot time, when no name servers are running.

On small systems, this file can be used instead of a

"named" name server.

Syntax:

#

IP-Address Full-Qualified-Hostname Short-Hostname

#

127.0.0.1 localhost

special IPv6 addresses

::1 localhost ipv6-localhost ipv6-loopback

fe00::0 ipv6-localnet

ff00::0 ipv6-mcastprefix
ff02::1 ipv6-allnodes
ff02::2 ipv6-allrouters
ff02::3 ipv6-allhosts
10.0.X.52 k3s-master1.XXXXXXX.local k3s-master1

k3s-master1:~ # cat /etc/resolv.conf

/etc/resolv.conf is a symlink to /run/netconfig/resolv.conf

autogenerated by netconfig!

Before you change this file manually, consider to define the

static DNS configuration using the following variables in the

/etc/sysconfig/network/config file:

NETCONFIG_DNS_STATIC_SEARCHLIST

NETCONFIG_DNS_STATIC_SERVERS

NETCONFIG_DNS_FORWARDER

or disable DNS configuration updates via netconfig by setting:

NETCONFIG_DNS_POLICY=''

See also the netconfig(8) manual page and other documentation.

Call "netconfig update -f" to force adjusting of /etc/resolv.conf.

nameserver 10.0.X.31
nameserver 8.8.8.8

C:\Users\savas>nslookup k3s-master1.zngismlnxdns.local
Server: ns1.XXXXXXXX.local
Address: 10.0.X.31

Name: k3s-master1.XXXXXXXXX.local
Address: 10.0.X.X

ip a
yast2 lan
zypper refresh
zypper update -y
zypper install -y curl iptables bash-completion
systemctl stop firewalld
systemctl disable firewalld
swapoff -a
sed -i '/swap/d' /etc/fstab
curl -sfL https://get.k3s.io | sh -
systemctl status k3s
systemctl enable k3s
k3s kubectl get nodes
mkdir -p $HOME/.kube
cp /etc/rancher/k3s/k3s.yaml $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
export KUBECONFIG=$HOME/.kube/config
kubectl get nodes

Server adını giriniz: nano /etc/hostname
Server ip ve isimlerini giriniz: nano /etc/hosts
Server internet çıkışı için : nano /etc/resolv.conf

Master node token bilgisini görmek için aşağıdaki komutla görülebilir.

cat /var/lib/rancher/k3s/server/node-token

Bu token daha sonra node 1 ve node 2 de çalıştırılacak kısımdır.

curl -sfL https://get.k3s.io | K3S_URL="https://10.0.X.X:6443" K3S_TOKEN="K1053b96f8acbfb6e582c3c7aa7df912e30d600b5a34032777589b3195ff0571eee::server:bad8b1efd0f99ef7b663e52d9df8f59f" sh -

yukarıdaki komutla node 1 ve node 2 master sunucuyla ilişkilendirilmesi için gereken komuttur.

Daha sonra master da çalıştırılacak komut ile:

k3s-master1:~ # kubectl get nodes
NAME STATUS ROLES AGE VERSION
k3s-master1 Ready control-plane,master 96m v1.31.6+k3s1
k3s-node1 Ready 95s v1.31.6+k3s1
k3s-node2 Ready 9s v1.31.6+k3s1

master1, node1 ve node2 nin ready hazır olduğunu görebilirsiniz artık.

Tebrikler kurulum tamamlanmıştır.