Ana içeriğe geç
Kategoriye Dön

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.

Okuma süresi: 20 dk Konteyner & Orkestrasyon
k3skuberneteskonteynerorkestrasyonclusterkubectlhelmvps

İç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?

ÖzellikTam KubernetesK3s
Binary boyutu~500MB+~100MB
Minimum RAM2GB+512MB
Kurulum süresi30-60 dk5 dk
BağımlılıklarÇokMinimal
Kubernetes uyumluluğuTamTam
Üretim kullanımıEvetEvet

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

hljs bash
# 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)

hljs bash
# 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ı

hljs bash
# 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)

hljs bash
# 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)

hljs bash
# 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ı

hljs bash
# 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

hljs yaml
# 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"
hljs bash
# 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

hljs yaml
# 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
hljs bash
# 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

hljs bash
# 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

hljs bash
# 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)

hljs yaml
# 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
hljs bash
# 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

hljs bash
# 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

hljs bash
# 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

hljs bash
# 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.