Kubernetes

Quick Deployment

Deploy everything with one command:

# Deploy
kubectl apply -f https://raw.githubusercontent.com/bgarvit01/echoserver/main/k8s/echoserver-all.yaml

# Port forward for testing
kubectl port-forward -n echoserver service/echoserver 80:80

# Test
curl http://localhost:80

Manual Deployment

1. Create Namespace

kubectl create namespace echoserver

2. Create ConfigMap

configmap.yaml:

apiVersion: v1
kind: ConfigMap
metadata:
  name: echoserver-config
  namespace: echoserver
data:
  LOGS__LEVEL: "info"
  LOGS__FORMAT: "object"
  ENABLE_FILE: "false"
  ENABLE_ENV: "false"
kubectl apply -f configmap.yaml

3. Create Deployment

deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: echoserver
  namespace: echoserver
spec:
  replicas: 5
  selector:
    matchLabels:
      app: echoserver
  template:
    metadata:
      labels:
        app: echoserver
    spec:
      containers:
      - name: echoserver
        image: echoserver:latest
        ports:
        - containerPort: 80
        envFrom:
        - configMapRef:
            name: echoserver-config
        resources:
          requests:
            memory: "64Mi"
            cpu: "100m"
          limits:
            memory: "128Mi"
            cpu: "500m"
kubectl apply -f deployment.yaml

4. Create Service

service.yaml:

apiVersion: v1
kind: Service
metadata:
  name: echoserver
  namespace: echoserver
spec:
  selector:
    app: echoserver
  ports:
  - port: 80
    targetPort: 80
  type: ClusterIP
kubectl apply -f service.yaml

5. Create Ingress (Optional)

ingress.yaml:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: echoserver
  namespace: echoserver
spec:
  rules:
  - host: echo.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: echoserver
            port:
              number: 80
kubectl apply -f ingress.yaml

Monitoring

# Check deployment status
kubectl get deployments -n echoserver

# Check pods
kubectl get pods -n echoserver

# Check service
kubectl get services -n echoserver

# View logs
kubectl logs -n echoserver -l app=echoserver -f

# Describe pod
kubectl describe pod -n echoserver <pod-name>

Scaling

# Scale up
kubectl scale deployment/echoserver -n echoserver --replicas=10

# Scale down
kubectl scale deployment/echoserver -n echoserver --replicas=3

# Autoscale
kubectl autoscale deployment echoserver -n echoserver --min=3 --max=10 --cpu-percent=80

Update Configuration

# Edit ConfigMap
kubectl edit configmap echoserver-config -n echoserver

# Restart deployment to apply changes
kubectl rollout restart deployment/echoserver -n echoserver

# Check rollout status
kubectl rollout status deployment/echoserver -n echoserver

Cleanup

# Delete specific resources
kubectl delete deployment echoserver -n echoserver
kubectl delete service echoserver -n echoserver
kubectl delete configmap echoserver-config -n echoserver

# Or delete entire namespace
kubectl delete namespace echoserver

Next: Configuration →