Modern uygulama geliştirmenin ve yönetmenin kalbinde, dağıtık sistemler ve konteynerizasyon yatıyor. Kubernetes, bu alanda adeta bir devrim yarattı ancak karmaşıklığı birçok geliştirici ve operasyon ekibi için göz korkutucu olabiliyor. Peki ya Kubernetes’in gücünü, çok daha hafif ve kurulumu kolay bir paketle elde edebilseydiniz? İşte bu noktada K3s devreye giriyor. Bu makalede, K3s ile ilk Kubernetes kümenizi kolayca kurmaya hazır mısınız? Bu detaylı rehber, K3s’in temellerinden ileri düzey konfigürasyonlara kadar her şeyi adım adım açıklıyor, karşılaşabileceğiniz zorlukları aşmanız için pratik bilgiler sunuyor. Hazırlanın, çünkü K3s ile tanıştığınızda Kubernetes deneyiminiz bambaşka bir boyuta taşınacak!
Kubernetes, konteynerleştirilmiş iş yüklerini ve hizmetleri yönetmek için açık kaynaklı, güçlü bir sistemdir. Ancak sunduğu bu gücün beraberinde getirdiği bir karmaşıklık da var. Özellikle küçük ölçekli projeler, kenar (edge) bilişim senaryoları, IoT cihazları veya geliştirme ortamları için tam teşekküllü bir Kubernetes kümesi kurmak, yönetmek ve bakımını yapmak ciddi kaynaklar gerektirebilir. İşte bu noktada K3s, Rancher Labs tarafından geliştirilen, hafif ve sertifikalı bir Kubernetes dağıtımı olarak karşımıza çıkıyor.
K3s’in “K3s” adındaki “3s” harfleri, geleneksel Kubernetes’in (K8s) beş harfinin (ubernetes) çıkarılmasıyla elde edilmiştir, bu da onun “küçük Kubernetes” olduğu fikrini vurgular. Gerçekten de K3s, geleneksel Kubernetes’in tüm temel özelliklerini korurken, gereksiz olduğu düşünülen birçok bileşeni (örneğin, cloud sağlayıcı entegrasyonları, bazı depolama eklentileri) kaldırır. Bununla birlikte, SQLite’ı varsayılan depolama olarak kullanarak harici bir veritabanı gereksinimini ortadan kaldırır. Bu optimizasyonlar sayesinde K3s, 50MB’ın altında bir ikili dosya boyutuna sahip olur ve sadece 512MB RAM ile bile çalışabilir. Bu, onu özellikle kaynak kısıtlı ortamlar için ideal bir çözüm haline getirir.
Peki, neden K3s’i tercih etmelisiniz? İlk ve en önemli neden, basitlik ve hafifliktir. Kurulumu tek bir komutla tamamlanabilir ve yönetimi çok daha az baş ağrısı yaratır. İkinci olarak, kaynak verimliliği sayesinde K3s, Raspberry Pi gibi tek kartlı bilgisayarlardan küçük sanal makinelere kadar geniş bir yelpazede donanım üzerinde çalışabilir. Bu, özellikle IoT projeleri, dağıtık sensör ağları veya ev otomasyonu sistemleri için kritik bir avantajdır. Ayrıca, CI/CD (Sürekli Entegrasyon/Sürekli Teslimat) boru hatlarında hızlı test ortamları oluşturmak veya geliştirme makinenizde yerel bir Kubernetes deneyimi yaşamak için de mükemmel bir seçenektir. K3s, Traefik gibi bir Ingress Controller, CoreDNS ve bir Local Storage Provisioner gibi temel bileşenleri varsayılan olarak içerir, böylece “kutudan çıktığı gibi” kullanıma hazırdır. Bu entegrasyonlar, bir küme kurar kurmaz uygulamalarınızı dağıtmaya başlamanızı sağlar. Kısacası, K3s Kubernetes’in gücünü demokratikleştirerek, herkesin dağıtık sistemlerin avantajlarından yararlanmasını kolaylaştırır.
K3s Kümesi Kurulumuna Hazırlık: Neler Gerekiyor ve Nasıl Başlamalıyız?
K3s kümesi kurma yolculuğuna çıkmadan önce, doğru hazırlıkları yapmak başarılı bir kurulumun anahtarıdır. Tıpkı bir bina inşa etmeden önce sağlam bir temel atmak gibi, K3s ortamımızı da doğru araçlar ve konfigürasyonlarla donatmalıyız. Bu bölümde, gerekli donanım ve yazılım gereksinimlerinden ağ topolojisine, hatta güvenlik duvarı ayarlarına kadar her şeyi adım adım inceleyeceğiz.
Donanım Gereksinimleri: Hangi Makineler En İyisidir?
K3s’in en çekici özelliklerinden biri, düşük donanım gereksinimleridir. Bir sunucu (master) ve bir veya daha fazla çalışan (agent) düğümden oluşan bir küme için minimum gereksinimler şunlardır:
- Ana Sunucu (Master/Server):
- RAM: En az 512MB (önerilen 1GB veya daha fazla)
- CPU: 1 çekirdek (önerilen 2 çekirdek veya daha fazla)
- Depolama: En az 1GB boş alan (önerilen 5GB veya daha fazla)
- Çalışan Sunucu (Agent/Worker):
- RAM: En az 512MB
- CPU: 1 çekirdek
- Depolama: En az 1GB boş alan
Bu gereksinimler, K3s’in Raspberry Pi 3 veya 4 gibi tek kartlı bilgisayarlar üzerinde bile sorunsuz çalışabilmesini sağlar. Eğer daha büyük bir iş yükü planlıyorsanız, sanal makineler veya fiziksel sunucular üzerinde daha fazla kaynak ayırmak performans açısından daha faydalı olacaktır. Örneğin, benim kendi deneyimimde, birkaç küçük uygulamanın çalıştığı bir kümeyi Raspberry Pi 4’lerden oluşan bir yapı üzerinde başarıyla işlettim. Ancak daha fazla kaynak tüketen mikro hizmetler için Vultr, DigitalOcean gibi bulut sağlayıcılarından düşük maliyetli sanal sunucular tercih etmek çok daha mantıklı olabilir.
İşletim Sistemi Seçimi ve Ağ Konfigürasyonu: Temel Altyapı
K3s, çeşitli Linux dağıtımları üzerinde çalışabilir. En yaygın ve önerilenler arasında Ubuntu, CentOS/RHEL, Debian ve Raspbian (Raspberry Pi için) bulunur. Kurulumdan önce, tüm sunucularınızın güncel olduğundan emin olun:
sudo apt update && sudo apt upgrade -y # Ubuntu/Debian tabanlı sistemler için
sudo yum update -y # CentOS/RHEL tabanlı sistemler için
Ağ yapılandırması kritik bir adımdır. Tüm düğümlerin birbirleriyle ve ana sunucuyla iletişim kurabilmesi gerekir. Her bir sunucuya statik bir IP adresi atamak veya DHCP rezervasyonu yapmak, özellikle kümenizin kararlılığı ve yönetimi için şiddetle tavsiye edilir. Küme içindeki sunucuların IP adreslerinin değişmemesi, ağda bağlantı sorunlarını önler.
Güvenlik duvarı (firewall) ayarları da göz ardı edilmemelidir. K3s'in düzgün çalışabilmesi için belirli portların açık olması gerekir. Varsayılan olarak K3s, bazı gerekli portları otomatik olarak açmaya çalışsa da, bu ayarları manuel olarak kontrol etmek ve yapılandırmak iyi bir uygulamadır. İşte açılması gereken temel portlar:
- Ana Sunucu (Master):
6443/TCP: Kubernetes API sunucusu2379-2380/TCP: etcd için (varsayılan SQLite yerine etcd kullanılıyorsa)8472/UDP: Flannel VXLAN overlay ağı için (varsayılan CNI)
- Çalışan Sunucular (Agent):
10250/TCP: Kubelet API8472/UDP: Flannel VXLAN overlay ağı için
Ayrıca, eğer kümenize dışarıdan erişim sağlamayı planlıyorsanız, Traefik gibi Ingress Controller'ın kullandığı 80/TCP ve 443/TCP portlarının da dışarıdan erişilebilir olması gerekebilir. Bu portları güvenlik duvarınızda nasıl açacağınıza dair örnek:
# UFW (Ubuntu) için örnek
sudo ufw allow 6443/tcp
sudo ufw allow 8472/udp
sudo ufw allow 10250/tcp
sudo ufw enable # UFW'yi etkinleştirin (eğer zaten etkin değilse)
Tüm düğümler arasında SSH erişiminin olması, uzaktan yönetim ve kurulum için hayati öneme sahiptir. SSH anahtarları kullanarak parola gereksinimini ortadan kaldırmak, güvenliği artırır ve otomasyonu kolaylaştırır.
K3s Ana Sunucu (Master) Kurulumu: Kümenizin Kalbini Nasıl Oluşturursunuz?
Hazırlık aşamasını başarıyla tamamladığımıza göre, artık K3s kümemizin kalbini, yani ana sunucuyu kurmaya geçebiliriz. Ana sunucu, Kubernetes kontrol düzlemini barındırır ve kümenizdeki tüm kararları alır. Bu, K3s kurulumunun en kritik adımıdır ve tek bir komutla gerçekleştirilebilen şaşırtıcı derecede basit bir işlemdir. Ancak bu basitliğin ardında yatan adımları ve dikkat edilmesi gerekenleri detaylıca inceleyelim.
Adım 1: K3s Kurulum Betiğini Çalıştırma
K3s, kurulum sürecini inanılmaz derecede kolaylaştıran tek satırlık bir yükleme betiği sunar. Ana sunucu olarak belirlediğiniz makinede (bu bir Raspberry Pi, sanal makine veya fiziksel bir sunucu olabilir) SSH ile oturum açtıktan sonra aşağıdaki komutu çalıştırmanız yeterlidir:
curl -sfL https://get.k3s.io | sh -
Bu komut, K3s ikili dosyasını indirir, sisteminize yükler, bir hizmet olarak yapılandırır ve başlatır. Ayrıca, kubectl, crictl, containerd ve diğer gerekli bağımlılıkları da otomatik olarak kurar. Kurulum tamamlandıktan sonra, K3s hizmeti otomatik olarak başlatılır ve kümenizin ana düğümü hazır hale gelir. Bu, diğer Kubernetes dağıtımlarına kıyasla gerçekten de olağanüstü bir kolaylıktır. Örneğin, bir Kubeadm kurulumunda onlarca komut, sertifika ayarı ve bileşen konfigürasyonu gerekiyorken, K3s bunu tek bir satıra indirger.
Kurulum süreci boyunca terminalinizde çeşitli mesajlar göreceksiniz. Bu mesajlar, K3s'in indirilmesi, kurulması ve başlatılması ile ilgili bilgileri içerir. İşlem genellikle birkaç dakika sürer, bu da internet hızınıza ve sunucunuzun performansına bağlıdır. Kurulum tamamlandığında, K3s sunucusunun başarıyla çalıştığını belirten bir çıktı alacaksınız.
Adım 2: Küme Token'ını Alma
Çalışan sunucuları (agentlar) kümenize dahil etmek için bir güvenlik token'ına ihtiyacınız olacak. Bu token, yeni düğümlerin ana sunucuya güvenli bir şekilde katılması için kullanılır. Bu token'ı, ana sunucuya yüklendikten sonra aşağıdaki komutla alabilirsiniz:
sudo cat /var/lib/rancher/k3s/server/node-token
Bu komut, size uzun bir dize döndürecektir. Bu dizeyi kopyalayın ve güvenli bir yerde saklayın, çünkü çalışan düğümlerin kurulumu sırasında buna ihtiyacınız olacak. Bu token'ı, sunucudan sunucuya kopyalarken yanlışlıkla boşluk veya yeni satır karakteri eklemediğinizden emin olun.
Adım 3: Kubeconfig Dosyasını Ayarlama
kubectl komut satırı aracını kullanarak K3s kümenizle etkileşim kurabilmek için kubeconfig dosyasını doğru şekilde yapılandırmanız gerekir. K3s, varsayılan olarak bu dosyayı ana sunucuda /etc/rancher/k3s/k3s.yaml konumuna yerleştirir. Bu dosyayı yerel makinenize (küme yönetimini yapacağınız bilgisayar) kopyalamanız ve ortam değişkenini ayarlamanız önerilir:
# Ana sunucuda, kubeconfig dosyasının içeriğini alın
cat /etc/rancher/k3s/k3s.yaml
# Kendi yerel makinenizde, bu içeriği bir dosyaya kaydedin (örn: ~/.kube/config)
# Dosyanın içindeki 'server' adresini ana sunucunuzun IP adresiyle değiştirmeniz gerekebilir.
# Örneğin, server: https://127.0.0.1:6443 yerine https://ANA_SUNUCU_IP_ADRESI:6443 yapın.
# Yerel makinenizde, kubeconfig yolunu belirtin
export KUBECONFIG=~/.kube/config
Bu adımı tamamladıktan sonra, yerel makinenizden K3s kümenizi yönetmeye başlayabilirsiniz. kubectl komutlarını kullanırken her seferinde --kubeconfig parametresini belirtmek yerine KUBECONFIG ortam değişkenini ayarlamak, işleri çok daha pratik hale getirir.
Adım 4: Küme Durumunu Kontrol Etme
Ana sunucunun başarıyla kurulduğundan emin olmak için aşağıdaki kubectl komutunu çalıştırabilirsiniz:
kubectl get nodes
Bu komut, kümenizdeki tüm düğümleri listeler. Şu anda sadece ana sunucuyu görmelisiniz ve durumu "Ready" olmalıdır. Eğer düğümünüz "NotReady" durumundaysa, kurulum loglarını kontrol etmek için sudo journalctl -u k3s --no-pager komutunu kullanabilirsiniz. Bu, olası sorunları teşhis etmenize yardımcı olacaktır.
K3S_DATASTORE_ENDPOINT="postgresql://user:pass@host:port/db" gibi bir değişken ekleyebilirsiniz. Bu, özellikle yüksek erişilebilirlik (HA) kurulumları için önemlidir.
K3s Çalışan Sunucuları (Agent) Kümeye Nasıl Dahil Edilir?
Ana sunucuyu başarıyla kurduktan ve token'ımızı aldıktan sonra, kümemizin işlem gücünü artırmak için çalışan sunucuları (agentlar) eklemeye hazırsınız. Çalışan sunucular, Kubernetes kümesinin uygulamalarınızı çalıştırdığı yerdir. Her bir agent, ana sunucudan gelen komutları dinler ve podları (uygulama konteynerlerinizi) barındırır. Bu bölümde, agent kurulumunun nasıl yapıldığını ve olası sorun giderme adımlarını ele alacağız.
Adım 1: Agent Kurulum Betiğini Çalıştırma
Her bir çalışan sunucuya SSH ile bağlanın ve aşağıdaki komutu çalıştırın. Bu komutu çalıştırmadan önce, iki önemli bilgiyi yer tutucularla değiştirmeniz gerekecek:
ANA_SUNUCU_IP_ADRESI: K3s ana sunucunuzun IP adresi veya hostname'i.K3S_TOKEN_BURAYA: Ana sunucudan aldığınız o uzun güvenlik token'ı.
curl -sfL https://get.k3s.io | K3S_URL="https://ANA_SUNUCU_IP_ADRESI:6443" K3S_TOKEN="K3S_TOKEN_BURAYA" sh -
Bu komut, K3s agent bileşenlerini indirir ve kurar. K3S_URL değişkeni, agent'ın hangi ana sunucuya bağlanacağını belirtir. K3S_TOKEN ise, agent'ın ana sunucuya kimliğini doğrulamak için kullandığı paylaşılan sırdır. Bu betik, agent'ı bir hizmet olarak yapılandırır ve başlatır. İşlem tamamlandığında, agent otomatik olarak ana sunucuya bağlanmaya çalışacaktır.
Bu kurulum, tıpkı ana sunucuda olduğu gibi oldukça hızlı ve basittir. Rancher'ın bu tek satırlık kurulum betiği, Kubernetes'in karmaşık agent kurulum süreçlerini bile basitleştirmiştir. Geleneksel Kubernetes kurulumlarında bir agent'ı kümeleyiciye dahil etmek, genellikle birkaç farklı bileşenin (kubelet, kube-proxy, container runtime) ayrı ayrı kurulmasını ve doğru sertifikalarla yapılandırılmasını gerektirir. K3s bu adımların hepsini sizin için otomatikleştirir.
Adım 2: Ağ İletişimi Sorun Giderme
Agent'lar kümeye katılırken en sık karşılaşılan sorunlardan biri ağ iletişimi sorunlarıdır. Agent, ana sunucuya 6443/TCP portu üzerinden erişebilmelidir. Eğer agent kümenize katılmazsa:
- Ana sunucunuzdaki güvenlik duvarının (UFW, firewalld vb.)
6443/TCPportuna gelen bağlantılara izin verdiğinden emin olun. - Agent sunucusundan ana sunucuya
pingveyatelnet ANA_SUNUCU_IP_ADRESI 6443komutlarıyla erişimi kontrol edin. K3S_URLveK3S_TOKENdeğişkenlerinin doğru olduğundan ve kopyala-yapıştır sırasında hata yapmadığınızdan emin olun.- Agent sunucusunun K3s hizmet loglarını kontrol edin:
sudo journalctl -u k3s-agent --no-pagerBu loglar, bağlantı sorunları veya kimlik doğrulama hataları hakkında değerli bilgiler sağlayabilir. Örneğin, bir SSL sertifika hatası, ana sunucunun IP adresini yanlış yazdığınızı gösterebilir.
Adım 3: Düğüm Durumunu Kontrol Etme
Agent'ı kurduktan sonra, kümenize başarıyla katıldığından emin olmak için ana sunucudan veya kubeconfig dosyasını yapılandırdığınız yerel makinenizden tekrar kubectl get nodes komutunu çalıştırın:
kubectl get nodes
Bu kez, ana sunucunun yanı sıra yeni eklediğiniz çalışan sunucuyu/sunucuları da görmelisiniz. Tüm düğümlerin durumu "Ready" olmalıdır. Eğer bir düğüm "NotReady" durumundaysa, yukarıdaki sorun giderme adımlarını tekrar gözden geçirin. Kümenize birden fazla çalışan düğüm eklemek isterseniz, her bir düğüm için yukarıdaki Adım 1 ve Adım 2'yi tekrarlamanız yeterlidir. Unutmayın, her düğümün benzersiz bir hostname'i olmalıdır.
--node-name veya --node-ip gibi ek parametreler kullanarak düğümün adını veya IP adresini manuel olarak belirleyebilirsiniz. Bu, özellikle dinamik IP adresleri olan ortamlarda veya daha düzenli bir isimlendirme şeması istediğinizde faydalı olabilir.
K3s Kümenizle Tanışın: Pod Dağıtımı ve Servis Açığa Çıkarma
K3s kümenizin ana ve çalışan sunucuları hazır olduğuna göre, artık asıl eğlenceli kısma geçebiliriz: Uygulamalarınızı dağıtmak! Bu bölüm, temel kubectl komutlarını kullanarak ilk pod'unuzu nasıl dağıtacağınızı, bir servisi nasıl açığa çıkaracağınızı ve K3s'in yerleşik özelliklerinden nasıl yararlanacağınızı açıklayacaktır. K3s, Kubernetes'in tüm temel API'lerini desteklediği için standart Kubernetes YAML dosyalarını kullanabilirsiniz.
Adım 1: Temel kubectl Komutları ve Ortama Aşinalık
Kümenizle etkileşim kurmak için kubectl komutlarını kullanacağız. Öncelikle, kümenizin sağlık durumunu ve düğümlerini kontrol edelim:
kubectl get nodes # Kümedeki tüm düğümleri listeler
kubectl get pods -A # Tüm ad alanlarındaki (namespaces) podları listeler
kubectl cluster-info # Küme hakkında temel bilgileri gösterir
Bu komutlar, kümenizin genel durumunu anlamak için iyi bir başlangıç noktasıdır. Özellikle kubectl get pods -A komutu, K3s'in varsayılan olarak kurduğu coredns, helm-install-traefik, metrics-server gibi sistem podlarını görmenizi sağlar. Bu podlar, kümenizin temel işlevleri için gereklidir.
Adım 2: İlk Uygulamanızı Dağıtma (Nginx Örneği)
Şimdi basit bir Nginx web sunucusu dağıtımı oluşturalım. Bunun için bir YAML dosyası kullanacağız. Adına nginx-deployment.yaml diyelim:
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
Bu YAML dosyası, Nginx konteynerini çalıştıran iki adet pod (replicas: 2) oluşturacak bir Deployment tanımlar. Dosyayı kaydettikten sonra, kümenize dağıtmak için aşağıdaki komutu kullanın:
kubectl apply -f nginx-deployment.yaml
Dağıtımın durumunu kontrol etmek için:
kubectl get deployments
kubectl get pods -o wide # Podların hangi düğümde çalıştığını da gösterir
Birkaç saniye içinde, iki Nginx podunuzun "Running" durumunda olduğunu görmelisiniz. Bu podlar, kümenizin çalışan düğümlerinden birinde veya ikisinde dağıtılmış olacaktır.
Adım 3: Servis Açığa Çıkarma (NodePort ve Ingress ile)
Uygulamanız (Nginx podları) şu anda küme içinde çalışıyor, ancak dışarıdan erişilemiyor. Dışarıdan erişim sağlamak için bir Kubernetes Service tanımlamamız gerekiyor. K3s, Traefik adlı bir Ingress Controller'ı varsayılan olarak kurar, bu da bize uygulamalarımıza dışarıdan erişim sağlamak için harika bir yol sunar.
NodePort Servisi Oluşturma (Alternatif Yöntem)
İlk olarak, basit bir NodePort servisi oluşturalım. Bu servis türü, küme düğümlerinizden birinin belirli bir portunu açarak trafiği Nginx podlarınıza yönlendirir:
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
type: NodePort
ports:
- protocol: TCP
port: 80
targetPort: 80
Bu dosyayı (nginx-service.yaml) kaydedin ve uygulayın:
kubectl apply -f nginx-service.yaml
Servisin durumunu kontrol edin:
kubectl get services
Çıktıda nginx-service için bir NodePort değeri göreceksiniz (örneğin, 30000-32767 aralığında bir port). Artık küme düğümlerinizden birinin IP adresi ve bu NodePort değeriyle Nginx'e erişebilirsiniz: http://ANA_SUNUCU_IP_ADRESI:NODE_PORT.
Ingress ile Servisi Açığa Çıkarma (Önerilen Yöntem)
K3s'in varsayılan olarak kurduğu Traefik Ingress Controller'ı kullanarak, uygulamalarınıza HTTP/HTTPS yoluyla daha esnek ve yapılandırılabilir bir şekilde erişim sağlayabiliriz. Bir Ingress tanımlamak için nginx-ingress.yaml adında bir dosya oluşturalım:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-ingress
annotations:
ingress.kubernetes.io/ssl-redirect: "false" # HTTPS yönlendirmesini şimdilik kapat
spec:
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx-service # Yukarıda oluşturduğumuz servisin adı
port:
number: 80
Bu Ingress kuralı, kök yolu (/) üzerinden gelen tüm HTTP trafiğini nginx-service'imize yönlendirecektir. Dosyayı uygulayın:
kubectl apply -f nginx-ingress.yaml
Ingress durumunu kontrol edin:
kubectl get ingress
Şimdi ana sunucunuzun IP adresini kullanarak web tarayıcınızdan Nginx'e erişebiliyor olmalısınız (örneğin, http://ANA_SUNUCU_IP_ADRESI). Traefik, gelen trafiği otomatik olarak uygun servise yönlendirecektir. Bu yöntem, alan adları ve TLS sertifikaları ile daha karmaşık yönlendirmeler için çok daha esnektir.
Adım 4: Depolama (Local Path Provisioner)
K3s, varsayılan olarak Local Path Provisioner'ı içerir. Bu, geliştirme veya küçük ölçekli dağıtımlar için Persistent Volume (PV) ve Persistent Volume Claim (PVC) kullanmanıza olanak tanır. Uygulamanızın diskte kalıcı verilere ihtiyacı varsa bu özelliği kullanabilirsiniz.
helm uninstall traefik -n kube-system komutuyla kaldırıp kendi Helm chart'ınızla Traefik'i yeniden dağıtabilirsiniz. Bu, daha gelişmiş konfigürasyonlar veya farklı Ingress Controller'lar için bir seçenektir.
Performansı Artıran İpuçları ve Sık Karşılaşılan Sorunlara Çözümler
K3s kümeniz artık çalışır durumda ve uygulamalarınızı barındırıyor. Ancak, bir kümenin gerçek potansiyelini ortaya çıkarmak ve sorunsuz bir deneyim sağlamak için bazı ileri düzey ipuçları ve sorun giderme stratejileri bilmek önemlidir. Bu bölüm, K3s performansını optimize etmenize, kümenizi daha dayanıklı hale getirmenize ve karşılaşabileceğiniz yaygın sorunları çözmenize yardımcı olacaktır.
Veritabanı Seçenekleri ve Yüksek Erişilebilirlik (HA)
K3s, varsayılan olarak SQLite'ı dahili veritabanı olarak kullanır. Bu, kurulumu basitleştirse de, büyük ölçekli veya yüksek erişilebilirlik gerektiren üretim ortamları için yeterli olmayabilir. Daha robust bir çözüm için K3s'i harici bir veritabanı ile yapılandırabilirsiniz. Desteklenen veritabanları arasında PostgreSQL, MySQL ve etcd bulunur.
- PostgreSQL / MySQL: K3s sunucusunu kurarken
K3S_DATASTORE_ENDPOINTortam değişkenini kullanarak harici bir PostgreSQL veya MySQL veritabanına bağlanabilirsiniz. Bu, veritabanı için ayrı bir sunucu kullanmanızı veya mevcut bir veritabanı sunucusundan faydalanmanızı sağlar.# PostgreSQL için örnek curl -sfL https://get.k3s.io | K3S_DATASTORE_ENDPOINT="postgresql://user:password@host:port/database" sh -s - - etcd: K3s, etcd v3 API'sini kullanarak yüksek erişilebilirlik (HA) için çoklu sunucu düğümleriyle birlikte çalışabilir. Bu, üç veya daha fazla K3s ana sunucusu dağıtarak ve bunları harici bir etcd kümesine bağlayarak yapılır. Bu yapılandırma, tek bir ana sunucu hatasında bile kümenizin çalışmaya devam etmesini sağlar. K3s HA kurulumu için genellikle bir yük dengeleyici (Load Balancer) ve harici bir veritabanı (etcd, PostgreSQL) gereklidir.
Yedekleme ve Geri Yükleme Stratejileri
Kümenizdeki verilerin güvenliği için düzenli yedeklemeler kritik öneme sahiptir. K3s, dahili bir yedekleme mekanizması sunar. Ana sunucunuzda aşağıdaki komutu çalıştırarak bir yedekleme oluşturabilirsiniz:
k3s etcd-snapshot save
Bu komut, K3s veritabanının (varsayılan olarak SQLite veya harici DB) bir anlık görüntüsünü alır ve /var/lib/rancher/k3s/server/db/snapshots/ dizinine kaydeder. Yedekleme dosyasını güvenli bir yere kopyalamayı unutmayın.
Bir felaket durumunda kümenizi geri yüklemek için K3s'in geri yükleme özelliğini kullanabilirsiniz. Yeni bir sunucuya K3s kurarken veya mevcut bir sunucuyu geri yüklerken, yedekleme dosyasının yolunu belirtmeniz gerekir:
# K3s'i yedekten geri yükleyerek başlatma
curl -sfL https://get.k3s.io | INSTALL_K3S_SKIP_START=true sh -
k3s etcd-snapshot restore --snapshot /path/to/your/snapshot.zip
sudo systemctl start k3s
Sık Karşılaşılan Sorunlar ve Çözümleri
Her sistemde olduğu gibi, K3s ile de bazı sorunlarla karşılaşabilirsiniz. İşte yaygın sorunlar ve olası çözümler:
- Düğüm "NotReady" Durumda:
- Logları Kontrol Edin: Ana sunucu için
sudo journalctl -u k3s --no-pager, agent içinsudo journalctl -u k3s-agent --no-pagerkomutlarını kullanarak K3s servis loglarını inceleyin. Bağlantı sorunları, sertifika hataları veya kaynak yetersizliği gibi nedenleri gösterebilir. - Ağ Bağlantısını Kontrol Edin: Tüm düğümlerin birbirleriyle ve ana sunucuyla gerekli portlar üzerinden iletişim kurabildiğinden emin olun (
6443/TCP,10250/TCP,8472/UDP). Güvenlik duvarı ayarlarını gözden geçirin. - Kaynak Yetersizliği: Düğümde yeterli RAM veya CPU olmadığından emin olun. Özellikle Raspberry Pi gibi kaynak kısıtlı cihazlarda bu yaygın bir sorundur.
- Logları Kontrol Edin: Ana sunucu için
- Podlar "Pending" veya "CrashLoopBackOff" Durumunda:
- Pod Loglarını Kontrol Edin:
kubectl logskomutuyla podun loglarını inceleyin. Bu, uygulamanızdaki hataları veya konteynerin başlangıç sorunlarını gösterebilir.-n - Olayları Kontrol Edin:
kubectl describe podkomutu, pod ile ilgili son olayları, planlama sorunlarını, ImagePullBackOff hatalarını veya kaynak taleplerini (CPU/RAM) gösterir.-n - Yetersiz Kaynak: Pod için talep edilen CPU veya RAM'in kümede karşılanamadığı durumlarda podlar "Pending" kalabilir. Düğümünüzün kaynaklarını veya podun taleplerini kontrol edin.
- Pod Loglarını Kontrol Edin:
- K3s Servisi Başlatılamıyor:
- Diskte Alan Yetersizliği: K3s, varsayılan olarak
/var/lib/rancher/k3s/dizinini kullanır. Bu dizinde yeterli boş alan olduğundan emin olun. - Port Çakışmaları: K3s'in kullandığı portların (özellikle
6443) başka bir servis tarafından kullanılmadığından emin olun.
- Diskte Alan Yetersizliği: K3s, varsayılan olarak
k3s uninstall komutunu kullanarak kümenizi kolayca kaldırabilir ve sıfırdan başlayabilirsiniz. Bu, hataları düzeltmek veya farklı konfigürasyonları denemek için pratik bir yöntemdir.
K3s ve Mobil Uyumluluk: Responsive Tasarım Neden Önemli?
K3s gibi dağıtık sistemlerin yönetiminde genellikle web tabanlı arayüzler ve panolar kullanılır. Örneğin, Rancher UI veya Kubernetes Dashboard gibi araçlar, kümenizin durumunu izlemek ve yönetmek için görsel bir arayüz sunar. Bu tür arayüzlerin veya kümede barındırdığınız web uygulamalarının mobil cihazlardan erişilebilir olması, günümüz dünyasında vazgeçilmez bir gerekliliktir. Responsive tasarım, bu noktada devreye girer ve içeriğinizin farklı ekran boyutlarına (telefonlar, tabletler, masaüstü bilgisayarlar) sorunsuz bir şekilde uyum sağlamasını garantiler.
Neden mobil uyumluluk bu kadar önemli?
- Esneklik: Kümenizi veya uygulamalarınızı her an, her yerden yönetebilme yeteneği, özellikle acil durum müdahaleleri veya uzaktan çalışma senaryoları için kritik öneme sahiptir.
- Kullanıcı Deneyimi: İyi tasarlanmış, mobil uyumlu bir arayüz, kullanıcıların işlerini daha hızlı ve verimli bir şekilde yapmasını sağlar. Kötü bir mobil deneyim ise verimsizliğe ve hayal kırıklığına yol açar.
- Geleceğe Hazırlık: Mobil cihazların kullanımı artmaya devam ettikçe, uygulamalarınızın ve yönetim araçlarınızın mobil uyumlu olması, gelecekteki ihtiyaçlara cevap verebilme açısından önemlidir.
Responsive tasarım genellikle CSS Media Query'leri kullanılarak yapılır. Bu, tarayıcının ekran boyutuna, çözünürlüğüne veya cihaz türüne göre farklı CSS kurallarını uygulamasını sağlar. İşte basit bir media query örneği:
/* Genel stil kuralları */
body {
font-size: 16px;
margin: 20px;
}
/* 768px genişliğinden küçük ekranlar için stiller */
@media screen and (max-width: 768px) {
body {
font-size: 14px;
margin: 10px;
}
.container {
width: 100%;
padding: 5px;
}
img {
max-width: 100%;
height: auto;
}
}
/* 480px genişliğinden küçük ekranlar için stiller (mobil) */
@media screen and (max-width: 480px) {
body {
font-size: 12px;
}
h1 {
font-size: 24px;
}
nav ul li {
display: block;
margin-bottom: 5px;
}
}
Bu örnekte, ekran genişliği azaldıkça font boyutları küçülür, konteyner genişliği %100 olur ve navigasyon menüsü dikey listeye dönüşür. K3s kümeniz üzerinde çalışan özel dashboard'lar veya web uygulamaları geliştiriyorsanız, bu tür yaklaşımları benimseyerek kullanıcılarınıza daha iyi bir deneyim sunabilirsiniz.
Sonuç: K3s ile Kubernetes Deneyiminizi Dönüştürmek
Bu rehber boyunca, K3s ile ilk Kubernetes kümenizi baştan sona nasıl kuracağınızı, yapılandıracağınızı ve yöneteceğinizi adım adım öğrendik. K3s'in sunduğu hafiflik, kurulum kolaylığı ve kaynak verimliliği sayesinde, Kubernetes'in gücüne artık çok daha erişilebilir bir şekilde sahip olabilirsiniz. İster tek bir Raspberry Pi üzerinde bir ev otomasyon sistemi kuruyor olun, ister CI/CD süreçleriniz için hızlı test ortamları arıyor olun, K3s her senaryo için uygun, esnek ve güvenilir bir çözüm sunar. Basit dağıtımlardan karmaşık yüksek erişilebilirlik konfigürasyonlarına kadar K3s, Kubernetes'i herkes için ulaşılabilir kılan önemli bir köprü görevi görür. Unutmayın, pratik yapmak ve belgeleri sürekli olarak gözden geçirmek, Kubernetes ve K3s konusundaki ustalığınızı artıracaktır. Artık ilk kümenizi başarıyla kurduğunuza göre, konteynerleştirilmiş uygulamalarınız için yeni ufuklara yelken açmaya hazırsınız!
Sıkça Sorulan Sorular (SSS)
-
K3s ile normal Kubernetes arasındaki temel fark nedir?
K3s, geleneksel Kubernetes'in daha hafif, daha küçük ve daha kolay kurulabilen bir sürümüdür. K3s, bulut sağlayıcı entegrasyonları ve bazı eski bileşenler gibi Kubernetes'in gereksiz özelliklerini kaldırarak, tek bir ikili dosyada çalışabilir hale gelir. Ayrıca, varsayılan olarak SQLite'ı dahili depolama olarak kullanır ve Traefik gibi temel bileşenleri kutudan çıktığı gibi sunar. Bu, özellikle kenar bilişim, IoT ve geliştirme ortamları için idealdir.
-
K3s üretim ortamlarında kullanılabilir mi?
Kesinlikle evet. K3s, Rancher Labs tarafından geliştirilen ve CNCF (Cloud Native Computing Foundation) tarafından sertifikalı bir Kubernetes dağıtımıdır. Düşük kaynak tüketimi ve yüksek performansı sayesinde birçok üretim ortamında başarıyla kullanılmaktadır. Özellikle kenar bilişim (edge computing) ve IoT projeleri için tercih edilen bir çözümdür. Yüksek erişilebilirlik (HA) ve harici veritabanı desteği ile daha robust üretim senaryolarına da uyarlanabilir.
-
K3s kümesine yeni bir düğüm eklemek ne kadar sürer?
Yeni bir çalışan (agent) düğümünü K3s kümenize eklemek oldukça hızlıdır. Gerekli hazırlıklar (işletim sistemi güncellemeleri, güvenlik duvarı ayarları) yapıldıktan sonra, tek satırlık kurulum komutunu çalıştırmak genellikle 1-2 dakika sürer. Bu süre, internet bağlantınızın hızına ve sunucunuzun performansına bağlı olarak değişebilir.
-
K3s için depolama çözümleri nelerdir?
K3s, varsayılan olarak
Local Path Provisioner'ı içerir, bu da bir düğümün yerel disk alanını Persistent Volume (PV) olarak kullanmanıza olanak tanır. Ancak üretim ortamları için daha gelişmiş depolama çözümleri (örneğin, NFS, Ceph veya bulut sağlayıcısının depolama hizmetleri gibi CSI sürücüleri) kullanmak daha yaygındır. K3s, standart Kubernetes CSI (Container Storage Interface) sürücülerini destekler, bu da çeşitli depolama sistemleriyle entegrasyonu mümkün kılar.