Zum Inhalt springen

Ein Image mit kubectl deployen

Diese Anleitung betreibt ein Container-Image auf Kubernetes als Deployment und macht es mit einem Service innerhalb des Clusters erreichbar. Das ist der einfache Weg, nur mit kubectl, und er funktioniert auf jedem konformen Cluster, auch auf einem PaaSbox-Cluster.

Willst du eine App mit ihrer Datenbank auf einem PaaSbox-Cluster betreiben, über HTTPS erreichbar, folge stattdessen Schritt 2 des Lernpfads, Deine erste App deployen.

  • Einen Cluster und eine Kubeconfig, die Objekte anlegen darf. Auf einem PaaSbox-Cluster holst du dir eine admin-Kubeconfig auf dem Reiter Access des Clusters (Eine Kubeconfig holen): Eine view-Kubeconfig ist nur lesend.
  • kubectl auf deinem Rechner.
Terminal-Fenster
export KUBECONFIG=~/Downloads/my-cluster-admin.kubeconfig
kubectl get nodes

Der Node oder die Nodes stehen als Ready in der Liste. Ein PaaSbox-Cluster hat einen.

Halte die Objekte deiner App in einem eigenen Namespace zusammen:

Terminal-Fenster
kubectl create namespace demo

Ein Deployment startet und überwacht deinen Container und ersetzt Pods, die abstürzen oder neu eingeplant werden. Speichere das Folgende als deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
name: web
namespace: demo
spec:
replicas: 2
selector:
matchLabels: { app: web }
template:
metadata:
labels: { app: web }
spec:
containers:
- name: web
image: nginxdemos/hello:plain-text
ports:
- containerPort: 80
resources:
requests: { cpu: 50m, memory: 64Mi }
limits: { cpu: 250m, memory: 128Mi }

Wende es an und sieh zu, wie die Pods hochkommen:

Terminal-Fenster
kubectl apply -f deployment.yaml
kubectl -n demo get pods -w

Setze immer Resource-Requests. Sie sagen dem Scheduler, wie viel CPU und Speicher deine Pods brauchen, damit er sie nur dort einplant, wo sie hinpassen. Auf einem Cluster mit einem Node zählen die Requests von allem, was du betreibst, gegen den Speicher eines einzigen Servers.

Ein Service gibt deinen Pods eine stabile Adresse innerhalb des Clusters, mit Lastverteilung über die Replicas. Speichere das Folgende als service.yaml:

apiVersion: v1
kind: Service
metadata:
name: web
namespace: demo
spec:
selector: { app: web }
ports:
- port: 80
targetPort: 80
Terminal-Fenster
kubectl apply -f service.yaml

Leite den Service auf deinen Rechner weiter und ruf ihn auf:

Terminal-Fenster
kubectl -n demo port-forward service/web 8080:80
# in another terminal:
curl localhost:8080

Die App antwortet mit ihrem Hostnamen und ihrer Adresse. Beende das Port-Forward mit Strg-C.

Terminal-Fenster
kubectl delete namespace demo