Container services and Kubernetes
Overview
Teaching: 20 min
Exercises: 20 minQuestions
How should services like databases or portals be deployed?
What is different about deploying services versus HPC applications?
Objectives
Learn about different frameworks used for deploying services
Container Services and Kubernetes
First Steps
kubectl get nodes
kubectl get pods
kubectl get pods -A
Create a Namespace
kubectl create namespace NAME
Deploy the Application
Create demo-app.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
kubectl apply -f demo-app.yaml -n NAME # OR --namespace=NAME
kubectl get pods,svc,ingress -n NAME
Key Kubernetes Features
Self-Healing
# 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
# 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
# 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
# Show resource usage
kubectl top nodes
kubectl top pods -n NAME
Port Forwarding
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
kubectl delete namespaces NAME
Key Points
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.