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.
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.
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.
| Ö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.
# 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
# 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
# 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
# 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'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
# 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
# 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
# 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 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 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
# 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 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'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
# 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/
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.
K3s, tam Kubernetes API'si ile uyumlu hafif bir dağıtımdır. Farklar: K3s tek bir binary (~100MB), tam Kubernetes ise birden fazla bileşen gerektirir. K3s SQLite kullanabilir (etcd yerine), daha az RAM tüketir (512MB vs 2GB+) ve kurulumu çok daha hızlıdır. Production kullanımı için her ikisi de uygundur.
Önce kubectl describe pod POD_ADI ile olayları kontrol edin. Yaygın sorunlar: 1) Yetersiz kaynak (kubectl describe node ile kontrol edin), 2) Image çekme hatası (docker pull ile test edin), 3) PVC bağlanamıyor (kubectl get pvc ile kontrol edin), 4) ConfigMap/Secret eksik. kubectl logs POD_ADI ile uygulama loglarını da inceleyin.
Üç yöntem: 1) NodePort Service: 30000-32767 arasında port açar, doğrudan IP:PORT ile erişilir. 2) LoadBalancer Service: K3s'te Klipper LB ile çalışır. 3) Ingress Controller: Tek IP üzerinden birden fazla uygulamaya domain bazlı erişim sağlar (önerilen). Traefik, K3s ile varsayılan olarak gelir.
helm show values CHART_ADI ile varsayılan değerleri görün. Özelleştirmek için values.yaml dosyası oluşturun ve helm install -f values.yaml ile kullanın. Alternatif olarak --set key=value parametresiyle tek değer geçebilirsiniz. helm upgrade komutuyla mevcut kurulumu güncelleyebilirsiniz.
Kontrol edilecekler: 1) Master node'un 6443 portuna worker'dan erişilebildiğini doğrulayın (telnet MASTER_IP 6443), 2) NODE_TOKEN'ın doğru olduğunu kontrol edin (cat /var/lib/rancher/k3s/server/node-token), 3) Firewall'da 6443 portunun açık olduğunu doğrulayın, 4) Worker'da k3s-agent servisinin loglarını inceleyin (journalctl -u k3s-agent -f).
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.
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ü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.