Zum Hauptinhalt springen

Erstes Image deployen

Diese Anleitung führt Sie durch das Ausrollen einer ersten Anwendung in Ihrem Cluster – vom Deployment über die Veröffentlichung bis zur Prüfung.

Voraussetzungen

  • Ein Cluster im Status Running
  • Eine heruntergeladene Konfigurationsdatei und eine geprüfte Verbindung, siehe Mit dem Cluster verbinden
  • Installiertes kubectl

Prüfen Sie zunächst, ob die Verbindung steht:

kubectl get nodes

Alle Nodes sollten den Status Ready aufweisen.

1. Deployment anlegen

Ein Deployment beschreibt, welches Image in wie vielen Instanzen laufen soll. Legen Sie die Datei deployment.yaml an:

apiVersion: apps/v1
kind: Deployment
metadata:
name: web
labels:
app: web
spec:
replicas: 2
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: web
image: nginx:stable
ports:
- containerPort: 80
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 500m
memory: 256Mi
readinessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 5
periodSeconds: 10

Wesentliche Angaben:

  • replicas – Anzahl der Instanzen. Zwei Replicas sorgen dafür, dass die Anwendung während Upgrades erreichbar bleibt.
  • resources.requests – Ressourcen, die der Scheduler für die Platzierung reserviert.
  • resources.limits – Obergrenze, die ein Container nicht überschreiten darf.
  • readinessProbe – Stellt sicher, dass nur einsatzbereite Pods Datenverkehr erhalten.

Rollen Sie das Deployment aus:

kubectl apply -f deployment.yaml

2. Rollout prüfen

# Status des Rollouts
kubectl rollout status deployment web

# Laufende Pods
kubectl get pods -l app=web

Erwartete Ausgabe:

NAME                   READY   STATUS    RESTARTS   AGE
web-6d4cf56db6-8xk2p 1/1 Running 0 30s
web-6d4cf56db6-tz9vn 1/1 Running 0 30s

Bleibt ein Pod in Pending oder ImagePullBackOff hängen, liefern die folgenden Befehle die Ursache:

kubectl describe pod <pod-name>
kubectl logs <pod-name>

3. Anwendung veröffentlichen

Ein Service macht die Pods unter einer stabilen Adresse erreichbar.

Warnung

Services vom Typ LoadBalancer stehen derzeit nicht zur Verfügung – es ist kein Cloud Controller Manager eingerichtet, der externe Adressen vergibt. Ein solcher Service verbleibt dauerhaft bei EXTERNAL-IP: <pending>.

Verwenden Sie stattdessen NodePort für externen Zugriff oder kubectl port-forward für lokale Tests.

Variante A: NodePort für externen Zugriff

Ein Service vom Typ NodePort öffnet auf jedem Worker Node denselben Port. Die Anwendung ist dann über die IP-Adresse eines beliebigen Nodes erreichbar.

Legen Sie die Datei service.yaml an:

apiVersion: v1
kind: Service
metadata:
name: web
spec:
type: NodePort
selector:
app: web
ports:
- port: 80
targetPort: 80
nodePort: 30080
protocol: TCP

Anwenden:

kubectl apply -f service.yaml

Der gewählte Port muss im Bereich 30000–32767 liegen. Ohne die Angabe nodePort vergibt Kubernetes automatisch einen freien Port aus diesem Bereich.

Service und zugewiesenen Port prüfen:

kubectl get service web
NAME   TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
web NodePort 10.43.12.180 <none> 80:30080/TCP 10s

Anschließend benötigen Sie die IP-Adresse eines Nodes:

kubectl get nodes -o wide

Rufen Sie die Anwendung über Node-IP und Port auf:

curl http://<node-ip>:30080
Hinweis

Die Node-IP-Adressen liegen im VPC-Netzwerk. Aus dem Internet ist die Anwendung damit nur erreichbar, wenn der Node über eine öffentliche Adresse verfügt und der Port in der Firewall freigegeben ist.

Da jeder Node denselben Port öffnet, entfällt bei einem Node-Ausfall dessen Adresse – ohne vorgeschalteten Lastverteiler müssen Sie das in Ihrer Client-Konfiguration oder im DNS berücksichtigen.

Variante B: port-forward für lokale Tests

Für einen schnellen Test genügt eine lokale Portweiterleitung. Der Service kann dafür vom Typ ClusterIP sein (Standard, wenn kein type angegeben ist):

kubectl port-forward service/web 8080:80

Die Anwendung ist danach unter http://localhost:8080 erreichbar. Die Weiterleitung besteht, solange der Befehl läuft.

4. Anwendung skalieren

kubectl scale deployment web --replicas=4

Damit die Replicas über verschiedene Nodes verteilt werden, ergänzen Sie topologySpreadConstraints – siehe Hochverfügbarkeit.

5. Aufräumen

Nicht mehr benötigte Testressourcen entfernen Sie mit:

kubectl delete -f service.yaml
kubectl delete -f deployment.yaml
Hinweis

Ein NodePort belegt den gewählten Port auf allen Worker Nodes. Löschen Sie nicht mehr benötigte Services, damit die Ports für andere Anwendungen frei werden.

Nächste Schritte