Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
150 changes: 150 additions & 0 deletions _episodes/32.servics.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
```