Skip to main content
Course/Module 10/Topic 4 of 4Advanced

Kubernetes Orchestration

Learn container orchestration with Docker Compose and Kubernetes for managing microservices deployments.

90 minBy Priygop TeamLast updated: Feb 2026

Docker Compose for Microservices

Docker Compose allows you to define and run multi-container Docker applications, perfect for local microservices development.

Docker Compose Configuration

Example
# docker-compose.yml
version: '3.8'

services:
  # API Gateway
  api-gateway:
    build: ./api-gateway
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=production
      - USER_SERVICE_URL=http://user-service:3001
      - PRODUCT_SERVICE_URL=http://product-service:3002
      - ORDER_SERVICE_URL=http://order-service:3003
    depends_on:
      - user-service
      - product-service
      - order-service
    networks:
      - microservices

  # User Service
  user-service:
    build: ./user-service
    ports:
      - "3001:3001"
    environment:
      - NODE_ENV=production
      - MONGODB_URL=mongodb://mongo:27017/users
    depends_on:
      - mongo
    networks:
      - microservices

  # Product Service
  product-service:
    build: ./product-service
    ports:
      - "3002:3002"
    environment:
      - NODE_ENV=production
      - MONGODB_URL=mongodb://mongo:27017/products
    depends_on:
      - mongo
    networks:
      - microservices

  # Order Service
  order-service:
    build: ./order-service
    ports:
      - "3003:3003"
    environment:
      - NODE_ENV=production
      - MONGODB_URL=mongodb://mongo:27017/orders
      - RABBITMQ_URL=amqp://rabbitmq:5672
    depends_on:
      - mongo
      - rabbitmq
    networks:
      - microservices

  # Database
  mongo:
    image: mongo:5.0
    ports:
      - "27017:27017"
    volumes:
      - mongo_data:/data/db
    networks:
      - microservices

  # Message Queue
  rabbitmq:
    image: rabbitmq:3-management
    ports:
      - "5672:5672"
      - "15672:15672"
    environment:
      - RABBITMQ_DEFAULT_USER=admin
      - RABBITMQ_DEFAULT_PASS=admin
    volumes:
      - rabbitmq_data:/var/lib/rabbitmq
    networks:
      - microservices

  # Redis for caching
  redis:
    image: redis:6-alpine
    ports:
      - "6379:6379"
    volumes:
      - redis_data:/data
    networks:
      - microservices

volumes:
  mongo_data:
  rabbitmq_data:
  redis_data:

networks:
  microservices:
    driver: bridge

Kubernetes Deployment

Example
# user-service-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: user-service
  labels:
    app: user-service
spec:
  replicas: 3
  selector:
    matchLabels:
      app: user-service
  template:
    metadata:
      labels:
        app: user-service
    spec:
      containers:
      - name: user-service
        image: user-service:latest
        ports:
        - containerPort: 3001
        env:
        - name: NODE_ENV
          value: "production"
        - name: MONGODB_URL
          valueFrom:
            secretKeyRef:
              name: mongodb-secret
              key: url
        resources:
          requests:
            memory: "256Mi"
            cpu: "250m"
          limits:
            memory: "512Mi"
            cpu: "500m"
        livenessProbe:
          httpGet:
            path: /health
            port: 3001
          initialDelaySeconds: 30
          periodSeconds: 10
        readinessProbe:
          httpGet:
            path: /health
            port: 3001
          initialDelaySeconds: 5
          periodSeconds: 5

---
apiVersion: v1
kind: Service
metadata:
  name: user-service
spec:
  selector:
    app: user-service
  ports:
  - protocol: TCP
    port: 80
    targetPort: 3001
  type: ClusterIP

Service Mesh with Istio

Example
# istio-gateway.yaml
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: microservices-gateway
spec:
  selector:
    istio: ingressgateway
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - "microservices.local"

---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: microservices-routes
spec:
  hosts:
  - "microservices.local"
  gateways:
  - microservices-gateway
  http:
  - match:
    - uri:
        prefix: /api/users
    route:
    - destination:
        host: user-service
        port:
          number: 80
  - match:
    - uri:
        prefix: /api/products
    route:
    - destination:
        host: product-service
        port:
          number: 80

Monitoring & Observability

Example
# prometheus-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: prometheus-config
data:
  prometheus.yml: |
    global:
      scrape_interval: 15s
    scrape_configs:
    - job_name: 'microservices'
      static_configs:
      - targets: ['user-service:3001', 'product-service:3002', 'order-service:3003']
      metrics_path: /metrics
      scrape_interval: 5s

Mini-Project: Complete Kubernetes Setup

Example
# Complete Kubernetes deployment for microservices
# namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: microservices

---
# configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: microservices-config
  namespace: microservices
data:
  NODE_ENV: "production"
  LOG_LEVEL: "info"

---
# secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: microservices-secrets
  namespace: microservices
type: Opaque
data:
  mongodb-url: <base64-encoded-url>
  jwt-secret: <base64-encoded-secret>

---
# api-gateway-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: api-gateway
  namespace: microservices
spec:
  replicas: 2
  selector:
    matchLabels:
      app: api-gateway
  template:
    metadata:
      labels:
        app: api-gateway
    spec:
      containers:
      - name: api-gateway
        image: api-gateway:latest
        ports:
        - containerPort: 3000
        envFrom:
        - configMapRef:
            name: microservices-config
        - secretRef:
            name: microservices-secrets
        resources:
          requests:
            memory: "256Mi"
            cpu: "250m"
          limits:
            memory: "512Mi"
            cpu: "500m"

---
# api-gateway-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: api-gateway
  namespace: microservices
spec:
  selector:
    app: api-gateway
  ports:
  - port: 80
    targetPort: 3000
  type: LoadBalancer

---
# ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: microservices-ingress
  namespace: microservices
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: microservices.local
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: api-gateway
            port:
              number: 80

Try It Yourself — Microservices & Architecture

Try It Yourself — Microservices & ArchitectureHTML
HTML Editor
✓ ValidTab = 2 spaces
HTML|39 lines|1939 chars|✓ Valid syntax
UTF-8

Quick Quiz — Microservices & Architecture

Additional Resources

Recommended Reading

  • Microservices Architecture Guide
  • API Gateway Patterns
  • Service Communication Patterns
  • Container orchestration Best Practices

Online Resources

  • Microservices Tutorial
  • Docker Compose Guide
  • Kubernetes Documentation
  • Service Mesh Patterns
Chat on WhatsApp
Priygop - Leading Professional Development Platform | Expert Courses & Interview Prep