Docker Kubernetes Deployment
Deploy Docker containers at scale with Kubernetes.
By EMEPublished: February 20, 2025
kubernetesdockerorchestrationdeploymentproduction
A Simple Analogy
Kubernetes is like an operations manager for containers. It schedules work, handles failures, scales up when busy, and ensures everything runs smoothly 24/7.
Why Kubernetes?
- Orchestration: Manage hundreds of containers
- Self-healing: Restart crashed containers
- Auto-scaling: Scale based on demand
- Rolling updates: Zero-downtime deployments
- Service discovery: Auto DNS for containers
Basic Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: api-deployment
spec:
replicas: 3
selector:
matchLabels:
app: api
template:
metadata:
labels:
app: api
spec:
containers:
- name: api
image: myregistry.azurecr.io/myapi:latest
ports:
- containerPort: 80
env:
- name: DATABASE_URL
valueFrom:
secretKeyRef:
name: db-secret
key: connection-string
resources:
requests:
memory: "256Mi"
cpu: "100m"
limits:
memory: "512Mi"
cpu: "500m"
livenessProbe:
httpGet:
path: /health
port: 80
initialDelaySeconds: 30
periodSeconds: 10
Service for Load Balancing
apiVersion: v1
kind: Service
metadata:
name: api-service
spec:
type: LoadBalancer
selector:
app: api
ports:
- protocol: TCP
port: 80
targetPort: 80
ConfigMap and Secrets
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
data:
log-level: "info"
environment: "production"
---
apiVersion: v1
kind: Secret
metadata:
name: db-secret
type: Opaque
stringData:
connection-string: "postgresql://user:password@db-service:5432/myapp"
api-key: "secret-key-here"
StatefulSet for Databases
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: postgres
spec:
serviceName: postgres-service
replicas: 1
selector:
matchLabels:
app: postgres
template:
metadata:
labels:
app: postgres
spec:
containers:
- name: postgres
image: postgres:15
ports:
- containerPort: 5432
volumeMounts:
- name: postgres-storage
mountPath: /var/lib/postgresql/data
volumeClaimTemplates:
- metadata:
name: postgres-storage
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 10Gi
Horizontal Pod Autoscaling
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: api-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: api-deployment
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
- type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: 80
Kubectl Commands
# Apply configuration
kubectl apply -f deployment.yaml
# View pods
kubectl get pods
kubectl describe pod api-deployment-xyz
# View services
kubectl get svc
# Scale manually
kubectl scale deployment api-deployment --replicas=5
# Update image
kubectl set image deployment/api-deployment api=myregistry.azurecr.io/myapi:v2
# Rollback
kubectl rollout undo deployment/api-deployment
# View logs
kubectl logs pod-name
kubectl logs -f pod-name # Follow logs
Best Practices
- Set resource limits: Define CPU and memory
- Health checks: Liveness and readiness probes
- Security: Use RBAC and network policies
- Monitoring: Integrate Prometheus/Grafana
- GitOps: Store configs in Git
Related Concepts
- Helm for templating
- Ingress for routing
- Network policies for security
- RBAC for access control
Summary
Kubernetes automates container orchestration at scale. Define deployments, services, and scaling policies to build resilient, self-healing systems.