K3s ile Kubernetes Kurulumu: Hafif Konteyner Orkestrasyonu
K3s ile tek node ve çok node Kubernetes cluster kurulumu, kubectl kullanımı, deployment ve service oluşturma, Helm ile uygulama yönetimi. VPS üzerinde Kubernetes rehberi.
İçindekiler
K3s ile Kubernetes Kurulumu: Hafif Konteyner Orkestrasyonu
Kubernetes, konteyner orkestrasyonunun endüstri standardıdır. Ancak tam Kubernetes kurulumu kaynak yoğun ve karmaşık olabilir. K3s, Rancher tarafından geliştirilen hafif bir Kubernetes dağıtımıdır — tüm Kubernetes özelliklerini tek bir binary ile sunar ve VPS gibi sınırlı kaynaklı ortamlarda mükemmel çalışır.
K3s Neden Tercih Edilmeli?
| Özellik | Tam Kubernetes | K3s |
|---|---|---|
| Binary boyutu | ~500MB+ | ~100MB |
| Minimum RAM | 2GB+ | 512MB |
| Kurulum süresi | 30-60 dk | 5 dk |
| Bağımlılıklar | Çok | Minimal |
| Kubernetes uyumluluğu | Tam | Tam |
| Üretim kullanımı | Evet | Evet |
K3s, tam Kubernetes API'si ile uyumludur. kubectl, Helm ve diğer Kubernetes araçları K3s ile sorunsuz çalışır. Küçük ve orta ölçekli production ortamları için idealdir.
Sistem Gereksinimleri
# Minimum gereksinimler
# CPU: 1 çekirdek
# RAM: 512MB (önerilen: 1GB+)
# Disk: 5GB
# OS: Ubuntu 20.04+, Debian 11+, CentOS 8+
# Sistem güncellemesi
apt update && apt upgrade -y
# Gerekli araçları kur
apt install -y curl wget
Tek Node K3s Kurulumu (Server)
# K3s'i kur (server modu)
curl -sfL https://get.k3s.io | sh -
# Kurulum tamamlandıktan sonra servis durumunu kontrol et
systemctl status k3s
# Cluster durumunu kontrol et
kubectl get nodes
# Tüm pod'ları listele
kubectl get pods -A
Kubeconfig Ayarı
# kubectl için kubeconfig'i kopyala
mkdir -p ~/.kube
cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
chmod 600 ~/.kube/config
# KUBECONFIG ortam değişkenini ayarla
export KUBECONFIG=~/.kube/config
echo 'export KUBECONFIG=~/.kube/config' >> ~/.bashrc
# Cluster bilgilerini görüntüle
kubectl cluster-info
Çok Node Cluster Kurulumu
Master Node (Server)
# Master node'u kur ve token'ı kaydet
curl -sfL https://get.k3s.io | sh -
# Node token'ını al (worker node'lar için gerekli)
cat /var/lib/rancher/k3s/server/node-token
# Çıktı: K10xxx...::server:yyy...
Worker Node (Agent)
# Worker node'u master'a bağla
curl -sfL https://get.k3s.io | K3S_URL=https://MASTER_IP:6443 K3S_TOKEN=NODE_TOKEN sh -
# Master'da worker'ın katıldığını doğrula
kubectl get nodes
# NAME STATUS ROLES AGE
# master-node Ready control-plane,master 10m
# worker-node1 Ready <none> 2m
kubectl Temel Komutları
# Node'ları listele
kubectl get nodes
kubectl get nodes -o wide # Detaylı bilgi
# Pod'ları listele
kubectl get pods
kubectl get pods -n kube-system # Sistem pod'ları
kubectl get pods -A # Tüm namespace'ler
# Deployment'ları listele
kubectl get deployments
# Service'leri listele
kubectl get services
# Namespace'leri listele
kubectl get namespaces
# Kaynak detaylarını görüntüle
kubectl describe pod POD_ADI
kubectl describe node NODE_ADI
# Pod loglarını görüntüle
kubectl logs POD_ADI
kubectl logs -f POD_ADI # Canlı log
# Pod içinde komut çalıştır
kubectl exec -it POD_ADI -- /bin/bash
İlk Deployment Oluşturma
NGINX Deployment
# nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.25
ports:
- containerPort: 80
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
# Deployment'ı uygula
kubectl apply -f nginx-deployment.yaml
# Deployment durumunu kontrol et
kubectl get deployments
kubectl rollout status deployment/nginx-deployment
# Pod'ları listele
kubectl get pods -l app=nginx
Service Oluşturma
# nginx-service.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
nodePort: 30080
type: NodePort
# Service'i uygula
kubectl apply -f nginx-service.yaml
# Service'i kontrol et
kubectl get services
# Tarayıcıdan erişim: http://SUNUCU_IP:30080
Namespace Yönetimi
# Namespace oluştur
kubectl create namespace production
kubectl create namespace staging
# Namespace'e deployment yap
kubectl apply -f deployment.yaml -n production
# Namespace'deki kaynakları listele
kubectl get all -n production
# Varsayılan namespace'i değiştir
kubectl config set-context --current --namespace=production
Helm ile Uygulama Yönetimi
# Helm kur
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
# Helm sürümünü kontrol et
helm version
# Bitnami deposunu ekle
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
# WordPress kur
helm install my-wordpress bitnami/wordpress \
--set wordpressUsername=admin \
--set wordpressPassword=GucluSifre123! \
--set service.type=NodePort
# Kurulu chart'ları listele
helm list
# Chart'ı kaldır
helm uninstall my-wordpress
Persistent Volume (Kalıcı Depolama)
# pvc.yaml — Persistent Volume Claim
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: app-data
spec:
accessModes:
- ReadWriteOnce
storageClassName: local-path # K3s varsayılan storage class
resources:
requests:
storage: 5Gi
# PVC oluştur
kubectl apply -f pvc.yaml
# PVC durumunu kontrol et
kubectl get pvc
# Storage class'ları listele
kubectl get storageclass
ConfigMap ve Secret
# ConfigMap oluştur
kubectl create configmap app-config \
--from-literal=DB_HOST=localhost \
--from-literal=APP_ENV=production
# Secret oluştur
kubectl create secret generic app-secret \
--from-literal=DB_PASSWORD=GucluSifre123! \
--from-literal=API_KEY=abc123
# ConfigMap'i görüntüle
kubectl get configmap app-config -o yaml
# Secret'ı görüntüle (base64 encoded)
kubectl get secret app-secret -o yaml
K3s Güncelleme ve Yönetim
# K3s'i güncelle
curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=v1.28.0+k3s1 sh -
# K3s servisini yönet
systemctl stop k3s
systemctl start k3s
systemctl restart k3s
# K3s loglarını görüntüle
journalctl -u k3s -f
# K3s'i kaldır
/usr/local/bin/k3s-uninstall.sh
# Worker node'u kaldır
/usr/local/bin/k3s-agent-uninstall.sh
Monitoring: Kubernetes Dashboard
# Kubernetes Dashboard kur
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
# Admin kullanıcı oluştur
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kubernetes-dashboard
EOF
# Token oluştur
kubectl -n kubernetes-dashboard create token admin-user
# Dashboard'a erişim için proxy başlat
kubectl proxy
# http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/
Sonuç
K3s, Kubernetes'in tüm gücünü minimal kaynak kullanımıyla sunar. VPS ortamlarında production-grade konteyner orkestrasyonu için ideal bir çözümdür. REXE sunucularında K3s ile uygulamalarınızı kolayca ölçeklendirebilir, yüksek erişilebilirlik sağlayabilir ve modern DevOps pratiklerini uygulayabilirsiniz.
İlgili Makaleler
Docker Volume ve Network Yönetimi: Kalıcı Depolama ve Ağ Yapılandırması
Docker volume türleri (named, bind mount, tmpfs), volume yönetimi, Docker network modları (bridge, host, overlay), özel ağ oluşturma ve konteyner iletişimi. Kapsamlı rehber.
Konteyner Loglama: Docker ve Kubernetes Log Yönetimi
Docker log sürücüleri, docker logs komutu, Kubernetes pod logları, merkezi log toplama (Loki, ELK Stack), log rotasyonu ve production ortamında log yönetimi en iyi pratikleri.
Docker Güvenliği: Konteyner Ortamını Sertleştirme
Docker güvenlik en iyi pratikleri: root olmayan kullanıcı, read-only filesystem, seccomp profilleri, image tarama, Docker socket güvenliği, network izolasyonu ve secrets yönetimi.