diff --git a/_episodes/32.servics.md b/_episodes/32.servics.md index fca862d..a8152bc 100644 --- a/_episodes/32.servics.md +++ b/_episodes/32.servics.md @@ -11,3 +11,153 @@ 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 +``` + +## Create a Namespace + +```bash +kubectl create namespace NAME +``` + +## 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 -n NAME # OR --namespace=NAME +kubectl get pods,svc,ingress -n NAME +``` + +## Key Kubernetes Features + +### Self-Healing + +```bash +# Show running pods +kubectl get pods -n NAME + +# Kill a pod +kubectl delete pod pod-name-xyz -n NAME + +# Watch Kubernetes automatically recreate it +kubectl get pods -w -n NAME +``` + +### Scaling + +```bash +# Scale up during "traffic spike" +kubectl scale deployment backend-api --replicas=5 -n NAME +kubectl get pods -n NAME + +# Scale down +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 -n NAME + +# Watch the rolling update +kubectl rollout status deployment/backend-api -n NAME +kubectl get pods -n NAME + +# Rollback if needed +kubectl rollout undo deployment/backend-api -n NAME +``` + +### Resource Management + +```bash +# Show resource usage +kubectl top nodes +kubectl top pods -n NAME +``` + +## Port Forwarding + +```bash +curl http://localhost:8000 + +# Forward local port to the service +kubectl port-forward svc/backend-service 8000:80 -n NAME + +# Access in browser or curl +curl http://localhost:8000 +# or open http://localhost:8000 in browser +``` + +## Clean up Namespaces + +```bash +kubectl delete namespaces NAME +```