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
| Özellik | K3s | Kubernetes |
| Kurulum | Tek satırda kurulum | Daha karmaşık, birden fazla bileşen |
| Sistem Kaynak Kullanımı | 512 MB RAM bile yeterli | En az 2 GB RAM önerilir |
| Veritabanı | Varsayılan olarak SQLite kullanır | etcd gerektirir |
| Kapsayıcı Çalıştırıcısı | Containerd (entegre) | Docker veya Containerd |
| Kullanım Alanı | IoT, Edge, Küçük Sunucular | Bü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.