Lab 14: Readiness Probes mit httpGet¶
In dieser Übungsaufgabe zeige ich euch, wie ihr Readiness-Probes einsetzen könnt, um eure Anwendung zu überwachen.
Vorbereitung: Deployment aufsetzen¶
In manifest.yaml findet ihr ein Deployment mit NGINX-Containern. Es enthält bewusst einen Fehler in der Readiness-Probe.
manifest.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: readiness-check-demo-deploy
spec:
replicas: 3
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
selector:
matchLabels:
app: readiness-check-demo
template:
metadata:
labels:
app: readiness-check-demo
spec:
containers:
- name: nginx
image: nginx:alpine3.17
ports:
- containerPort: 80
readinessProbe:
httpGet:
port: 81
path: /
livenessProbe:
httpGet:
port: 80
path: /
initialDelaySeconds: 10
periodSeconds: 20
resources:
requests:
cpu: "100m"
memory: "128Mi"
limits:
cpu: "200m"
memory: "256Mi"
topologySpreadConstraints:
- maxSkew: 1
topologyKey: kubernetes.io/hostname
whenUnsatisfiable: ScheduleAnyway
labelSelector:
matchLabels:
app: readiness-check-demo
---
apiVersion: v1
kind: Service
metadata:
name: readiness-check-demo-svc
labels:
app: readiness-check-demo
spec:
selector:
app: readiness-check-demo
ports:
- port: 80
name: http
Wendet als Erstes das Manifest an:
kubectl apply -f manifest.yaml
Prüft danach, ob die Pods des Deployments laufen:
kubectl get po --selector=app=readiness-check-demo
#NAME READY STATUS RESTARTS AGE
#readiness-check-demo-deploy-7ff9c8f684-dv9t7 0/1 Running 0 102s
#readiness-check-demo-deploy-7ff9c8f684-fg2qw 0/1 Running 0 102s
#readiness-check-demo-deploy-7ff9c8f684-r4qkr 0/1 Running 0 102s
Die Pods laufen zwar, sind aber nicht Ready. Dementsprechend werden sie nicht vom Service verwendet. Das könnt ihr testen, indem ihr einen Debug-Pod startet:
kubectl run -i --tty --rm debug --image=busybox --restart=Never -- sh
Ihr befindet euch nun im Terminal eines Containers mit Busybox. Nutzt nslookup um zu prüfen, ob der Service grundsätzlich per DNS aufgelöst werden kann:
nslookup readiness-check-demo-svc.default.svc.cluster.local
# Server: 10.96.0.10
# Address: 10.96.0.10:53
# Name: readiness-check-demo-svc.default.svc.cluster.local
# Address: 10.103.46.232
Versucht daraufhin, die letztgenannte IP-Adresse per wget aufzurufen:
wget -O- readiness-check-demo-svc.default.svc.cluster.local
# Connecting to readiness-check-demo-svc.default.svc.cluster.local (10.103.46.232:80)
# wget: can't connect to remote host (10.103.46.232): Connection refused
Da keiner der Pods ready ist, kann keine Verbindung aufgebaut werden.
Aufgabe¶
Behebt die ReadinessProbe in manifest.yaml. Wendet das Manifest danach an und prüft mit dem Busybox-Testpod, ob ihr euch per wget mit dem Service verbinden könnt.