From 24cd906c701706469a1f4b2a1e4e86d0be441286 Mon Sep 17 00:00:00 2001 From: srbdev Date: Sun, 26 Oct 2025 19:52:58 -0600 Subject: [PATCH 1/3] Add exercise steps for Kubernetes section --- _episodes/32.servics.md | 138 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 138 insertions(+) diff --git a/_episodes/32.servics.md b/_episodes/32.servics.md index fca862d..3f34f1a 100644 --- a/_episodes/32.servics.md +++ b/_episodes/32.servics.md @@ -11,3 +11,141 @@ keypoints: - Docker Compose is a simple tool to deploy basic services using containers - Frameworks like Kubernetes, Rancher and OpenShift can help with deploying and managing complex containerized services. --- + +# Container Services and Kubernetes + +## First Steps + +```bash +kubectl get nodes +kubectl get pods +kubectl get pods -A +``` + +## Deploy the Application + +Create `demo-app.yaml` + +```yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: backend-api +spec: + replicas: 2 + selector: + matchLabels: + app: backend-api + template: + metadata: + labels: + app: backend-api + spec: + containers: + - name: api + image: nginx:alpine + ports: + - containerPort: 80 + resources: + requests: + memory: "64Mi" + cpu: "100m" + limits: + memory: "128Mi" + cpu: "200m" +--- +apiVersion: v1 +kind: Service +metadata: + name: backend-service +spec: + selector: + app: backend-api + ports: + - port: 80 + targetPort: 80 + type: ClusterIP +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: app-ingress +spec: + rules: + - host: demo.local + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: backend-service + port: + number: 80 +``` + +```bash +kubectl apply -f demo-app.yaml +kubectl get pods,svc,ingress +``` + +## Key Kubernetes Features + +### Self-Healing + +```bash +# Show running pods +kubectl get pods + +# Kill a pod +kubectl delete pod pod-name-xyz + +# Watch Kubernetes automatically recreate it +kubectl get pods -w +``` + +### Scaling + +```bash +# Scale up during "traffic spike" +kubectl scale deployment backend-api --replicas=5 +kubectl get pods + +# Scale down +kubectl scale deployment backend-api --replicas=2 +``` + +### Rolling Updates + +```bash +# Update to new version with zero downtime +kubectl set image deployment/backend-api api=nginx:1.21-alpine + +# Watch the rolling update +kubectl rollout status deployment/backend-api +kubectl get pods + +# Rollback if needed +kubectl rollout undo deployment/backend-api +``` + +### Resource Management + +```bash +# Show resource usage +kubectl top nodes +kubectl top pods +``` + +## Port Forwarding + +```bash +curl http://localhost:8080 + +# Forward local port to the service +kubectl port-forward svc/backend-service 8080:80 + +# Access in browser or curl +curl http://localhost:8080 +# or open http://localhost:8080 in browser +``` From 98576dd5f90f4e24a279fd03c9f0b1bb5d7fb7cb Mon Sep 17 00:00:00 2001 From: srbdev Date: Mon, 3 Nov 2025 20:03:13 -0700 Subject: [PATCH 2/3] Update commands to specify namespaces --- _episodes/32.servics.md | 40 ++++++++++++++++++++++++++-------------- 1 file changed, 26 insertions(+), 14 deletions(-) diff --git a/_episodes/32.servics.md b/_episodes/32.servics.md index 3f34f1a..3a6f6ab 100644 --- a/_episodes/32.servics.md +++ b/_episodes/32.servics.md @@ -22,6 +22,12 @@ kubectl get pods kubectl get pods -A ``` +## Create a Namespace + +```bash +kubectl create namespace NAME +``` + ## Deploy the Application Create `demo-app.yaml` @@ -85,8 +91,8 @@ spec: ``` ```bash -kubectl apply -f demo-app.yaml -kubectl get pods,svc,ingress +kubectl apply -f demo-app.yaml -n NAME # OR --namespace=NAME +kubectl get pods,svc,ingress -n NAME ``` ## Key Kubernetes Features @@ -95,38 +101,38 @@ kubectl get pods,svc,ingress ```bash # Show running pods -kubectl get pods +kubectl get pods -n NAME # Kill a pod -kubectl delete pod pod-name-xyz +kubectl delete pod pod-name-xyz -n NAME # Watch Kubernetes automatically recreate it -kubectl get pods -w +kubectl get pods -w -n NAME ``` ### Scaling ```bash # Scale up during "traffic spike" -kubectl scale deployment backend-api --replicas=5 -kubectl get pods +kubectl scale deployment backend-api --replicas=5 -n NAME +kubectl get pods -n NAME # Scale down -kubectl scale deployment backend-api --replicas=2 +kubectl scale deployment backend-api --replicas=2 -n NAME ``` ### Rolling Updates ```bash # Update to new version with zero downtime -kubectl set image deployment/backend-api api=nginx:1.21-alpine +kubectl set image deployment/backend-api api=nginx:1.21-alpine -n NAME # Watch the rolling update -kubectl rollout status deployment/backend-api -kubectl get pods +kubectl rollout status deployment/backend-api -n NAME +kubectl get pods -n NAME # Rollback if needed -kubectl rollout undo deployment/backend-api +kubectl rollout undo deployment/backend-api -n NAME ``` ### Resource Management @@ -134,7 +140,7 @@ kubectl rollout undo deployment/backend-api ```bash # Show resource usage kubectl top nodes -kubectl top pods +kubectl top pods -n NAME ``` ## Port Forwarding @@ -143,9 +149,15 @@ kubectl top pods curl http://localhost:8080 # Forward local port to the service -kubectl port-forward svc/backend-service 8080:80 +kubectl port-forward svc/backend-service 8080:80 -n NAME # Access in browser or curl curl http://localhost:8080 # or open http://localhost:8080 in browser ``` + +## Clean up Namespaces + +```bash +kubectl delete namespaces NAME +``` From 0aaba2be16c2ea28760c9353876c7a6f759c1462 Mon Sep 17 00:00:00 2001 From: Sylvain Date: Thu, 6 Nov 2025 08:32:49 -0700 Subject: [PATCH 3/3] Update port forwarding commands to use port 8000 --- _episodes/32.servics.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/_episodes/32.servics.md b/_episodes/32.servics.md index 3a6f6ab..a8152bc 100644 --- a/_episodes/32.servics.md +++ b/_episodes/32.servics.md @@ -146,14 +146,14 @@ kubectl top pods -n NAME ## Port Forwarding ```bash -curl http://localhost:8080 +curl http://localhost:8000 # Forward local port to the service -kubectl port-forward svc/backend-service 8080:80 -n NAME +kubectl port-forward svc/backend-service 8000:80 -n NAME # Access in browser or curl -curl http://localhost:8080 -# or open http://localhost:8080 in browser +curl http://localhost:8000 +# or open http://localhost:8000 in browser ``` ## Clean up Namespaces