Tavo-IT Logo
Fortgeschritten25 min Lesezeit2025-06-08

Kubernetes ClusterManagement

Professionelle Kubernetes-Orchestrierung: Deployments, Services, Ingress und Scaling-Strategien für Container-Workloads in der Cloud.

KubernetesContainer OrchestrationMicroservicesCloud Native

⚓ Kubernetes Grundlagen

Kubernetes (K8s) ist eine Open-Source-Plattform zur Automatisierung der Bereitstellung, Skalierung und Verwaltung von containerisierten Anwendungen. Es abstrahiert die zugrunde liegende Infrastructure und bietet eine einheitliche API.

🎯 Orchestrierung

Automatisierte Container-Verwaltung

🔄 Auto-Scaling

Dynamische Anpassung der Ressourcen

🛡️ Self-Healing

Automatische Wiederherstellung

🏗️ Cluster-Architektur

Control Plane

  • API Server - Zentrale API für alle Komponenten
  • etcd - Distributed Key-Value Store
  • Scheduler - Pod-Zuweisung zu Nodes
  • Controller Manager - Cluster-Zustand überwachen

Worker Nodes

  • kubelet - Node Agent für Pod-Management
  • kube-proxy - Network Proxy & Load Balancer
  • Container Runtime - Docker, containerd, CRI-O

🚀 Cluster Setup

Lokales Development mit kind

# kind installieren (Kubernetes in Docker)
curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.20.0/kind-linux-amd64
chmod +x ./kind
sudo mv ./kind /usr/local/bin/kind

# Cluster erstellen
kind create cluster --name dev-cluster

# kubectl konfigurieren
kubectl cluster-info --context kind-dev-cluster

# Cluster Status prüfen
kubectl get nodes

Production Cluster mit kubeadm

# Master Node initialisieren
sudo kubeadm init --pod-network-cidr=10.244.0.0/16

# kubectl für User konfigurieren
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

# Pod Network (Flannel) installieren
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

# Worker Nodes hinzufügen
sudo kubeadm join <master-ip>:6443 --token <token> --discovery-token-ca-cert-hash <hash>

📦 Deployments

Deployment Manifest

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.21
        ports:
        - containerPort: 80
        resources:
          requests:
            memory: "64Mi"
            cpu: "250m"
          limits:
            memory: "128Mi"
            cpu: "500m"
        livenessProbe:
          httpGet:
            path: /
            port: 80
          initialDelaySeconds: 30
          periodSeconds: 10
        readinessProbe:
          httpGet:
            path: /
            port: 80
          initialDelaySeconds: 5
          periodSeconds: 5

Deployment Management

# Deployment erstellen
kubectl apply -f deployment.yaml

# Deployments anzeigen
kubectl get deployments

# Pod Status prüfen
kubectl get pods -l app=nginx

# Deployment skalieren
kubectl scale deployment nginx-deployment --replicas=5

# Rolling Update
kubectl set image deployment/nginx-deployment nginx=nginx:1.22

# Rollback
kubectl rollout undo deployment/nginx-deployment

# Rollout Status
kubectl rollout status deployment/nginx-deployment

🌐 Services & Networking

Service Types

ClusterIP

Interne Service-Kommunikation

NodePort

Externer Zugriff über Node-Port

LoadBalancer

Cloud Load Balancer Integration

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  type: ClusterIP
  selector:
    app: nginx
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80

---
apiVersion: v1
kind: Service
metadata:
  name: nginx-loadbalancer
spec:
  type: LoadBalancer
  selector:
    app: nginx
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80

🚪 Ingress Controller

NGINX Ingress Setup

# NGINX Ingress Controller installieren
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/cloud/deploy.yaml

# Ingress Resource erstellen
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: web-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
    cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
  tls:
  - hosts:
    - app.example.com
    secretName: app-tls
  rules:
  - host: app.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: nginx-service
            port: 
              number: 80
      - path: /api
        pathType: Prefix
        backend:
          service:
            name: api-service
            port: 
              number: 3000

📈 Auto-Scaling

Horizontal Pod Autoscaler (HPA)

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: nginx-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: nginx-deployment
  minReplicas: 3
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 70
  - type: Resource
    resource:
      name: memory
      target:
        type: Utilization
        averageUtilization: 80
  behavior:
    scaleDown:
      stabilizationWindowSeconds: 300
      policies:
      - type: Percent
        value: 10
        periodSeconds: 60
    scaleUp:
      stabilizationWindowSeconds: 0
      policies:
      - type: Percent
        value: 100
        periodSeconds: 15

Vertical Pod Autoscaler (VPA)

apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
  name: nginx-vpa
spec:
  targetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: nginx-deployment
  updatePolicy:
    updateMode: "Auto"
  resourcePolicy:
    containerPolicies:
    - containerName: nginx
      maxAllowed:
        cpu: 1
        memory: 500Mi
      minAllowed:
        cpu: 100m
        memory: 50Mi

🔒 Security & RBAC

Role-Based Access Control

# Service Account erstellen
apiVersion: v1
kind: ServiceAccount
metadata:
  name: deploy-user
  namespace: production

---
# Role definieren
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: production
  name: deployment-manager
rules:
- apiGroups: ["apps"]
  resources: ["deployments"]
  verbs: ["get", "list", "create", "update", "patch", "delete"]
- apiGroups: [""]
  resources: ["pods", "services"]
  verbs: ["get", "list"]

---
# RoleBinding erstellen
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: deploy-user-binding
  namespace: production
subjects:
- kind: ServiceAccount
  name: deploy-user
  namespace: production
roleRef:
  kind: Role
  name: deployment-manager
  apiGroup: rbac.authorization.k8s.io

🛡️ Security Best Practices

  • Least Privilege Principle - Minimale erforderliche Berechtigungen
  • Network Policies - Mikro-Segmentierung des Netzwerks
  • Pod Security Standards - Restricted Pod Security Context
  • Image Security - Vulnerability Scanning und Image Signing
  • Secrets Management - Externe Secret Stores integrieren

🎯 Zusammenfassung

Kubernetes bietet eine mächtige Plattform für Container-Orchestrierung in der Cloud. Mit den richtigen Strategien erreichen Sie:

Erreichte Ziele

  • ✅ Automatisierte Container-Orchestrierung
  • ✅ Selbstheilende Systeme
  • ✅ Effiziente Ressourcennutzung
  • ✅ Zero-Downtime Deployments

Nächste Schritte

  • 🔍 Service Mesh (Istio/Linkerd)
  • 📊 Advanced Monitoring Setup
  • 🔄 GitOps Workflows
  • ⚡ Performance Tuning

📚 Verwandte Artikel