Skip to main content

Chapter 12.1 - Production Deployment

Learning Objectives​

By the end of this chapter, you will be able to:

  • Understand production requirements
  • Implement high availability
  • Configure security in production
  • Manage resources efficiently
  • Set up monitoring and alerts
  • Apply best practices

Introduction​

Deploying to production requires rigorous preparation to ensure availability, security, and performance.


High Availability​

Multi-Node Clusters​

Recommendations:

  • Minimum 3 nodes for the Control Plane
  • Minimum 3 worker nodes
  • Distribution across multiple availability zones

Pod Disruption Budgets​

apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: app-pdb
spec:
minAvailable: 2
selector:
matchLabels:
app: my-app

Result: Ensures that at least 2 Pods are available during updates.


Security​

RBAC Configuration​

# Limit permissions
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: app-role
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list"]

Network Policies​

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: deny-all
spec:
podSelector: {}
policyTypes:
- Ingress
- Egress

Encrypted Secrets​

# Enable encryption at rest
apiVersion: apiserver.config.k8s.io/v1
kind: EncryptionConfiguration
resources:
- resources:
- secrets
providers:
- aescbc:
keys:
- name: key1
secret: <base64-encoded-secret>

Scanned Images​

Use image scanning tools (Trivy, Clair) before deployment.


Resource Management​

Requests and Limits​

apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
template:
spec:
containers:
- name: app
image: my-app:1.0
resources:
requests:
cpu: 250m
memory: 512Mi
limits:
cpu: 500m
memory: 1Gi

Resource Quotas​

apiVersion: v1
kind: ResourceQuota
metadata:
name: namespace-quota
namespace: production
spec:
hard:
requests.cpu: "10"
requests.memory: 20Gi
limits.cpu: "20"
limits.memory: 40Gi
persistentvolumeclaims: "10"

Limit Ranges​

apiVersion: v1
kind: LimitRange
metadata:
name: namespace-limits
namespace: production
spec:
limits:
- default:
cpu: "500m"
memory: "1Gi"
defaultRequest:
cpu: "250m"
memory: "512Mi"
type: Container

Monitoring and Alerts​

Essential Metrics​

  • CPU/Memory usage
  • Request latency
  • Error rate
  • Service availability

Critical Alerts​

  • Pods in CrashLoop
  • CPU usage > 90%
  • Memory usage > 90%
  • Unavailable services

Backup and Disaster Recovery​

etcd Backup​

# Backup
ETCDCTL_API=3 etcdctl snapshot save /backup/etcd-snapshot.db \
--endpoints=https://127.0.0.1:2379 \
--cacert=/etc/etcd/ca.crt \
--cert=/etc/etcd/server.crt \
--key=/etc/etcd/server.key

# Restore
ETCDCTL_API=3 etcdctl snapshot restore /backup/etcd-snapshot.db

Volume Backups​

Use volume snapshots (EBS, Azure Disk, etc.).


Best Practices​

1. Multi-Environments​

Separate dev, staging, production with namespaces or clusters.

2. Versioning​

Use specific image tags, not latest.

3. Health Checks​

Configure liveness, readiness, and startup probes.

4. Rolling Updates​

Use zero-downtime deployment strategies.

5. Documentation​

Document deployment and rollback procedures.


Summary​

In this chapter, you learned:

High availability: Multi-nodes, Pod Disruption Budgets
Security: RBAC, Network Policies, encrypted secrets, scanned images
Resources: Requests, limits, quotas, limit ranges
Monitoring: Essential metrics, critical alerts
Backup: etcd, volumes, disaster recovery
Best practices: Multi-environments, versioning, health checks


Next Steps​

Chapter 12.2: CI/CD
Chapter 12.3: Environments
Lab 12.1: Resource Management Configuration


Chapter created on: December 2024