%% fig-alt: "Kubernetes architecture for IoT showing ingress controller routing to device management and telemetry pods with horizontal pod autoscaler adjusting replicas based on load"
%%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#2C3E50', 'primaryTextColor': '#fff', 'primaryBorderColor': '#16A085', 'lineColor': '#16A085', 'secondaryColor': '#E67E22', 'tertiaryColor': '#7F8C8D', 'fontSize': '14px'}}}%%
graph TB
subgraph cluster["Kubernetes Cluster"]
ING[Ingress Controller<br/>TLS termination]
subgraph ns1["namespace: iot-platform"]
subgraph deploy1["Deployment: device-mgmt"]
DM1[Pod]
DM2[Pod]
end
subgraph deploy2["Deployment: telemetry"]
TL1[Pod]
TL2[Pod]
TL3[Pod]
end
SVC1[Service:<br/>device-mgmt]
SVC2[Service:<br/>telemetry]
HPA[HorizontalPodAutoscaler]
end
subgraph data["namespace: data"]
KAFKA[Kafka Broker]
TS[(TimescaleDB)]
end
end
ING --> SVC1
ING --> SVC2
SVC1 --> DM1
SVC1 --> DM2
SVC2 --> TL1
SVC2 --> TL2
SVC2 --> TL3
HPA -.->|scale| deploy2
TL1 --> KAFKA
TL2 --> KAFKA
TL3 --> KAFKA
KAFKA --> TS
style ING fill:#2C3E50,stroke:#16A085,color:#fff
style HPA fill:#E67E22,stroke:#2C3E50,color:#fff
313 SOA Container Orchestration
313.1 Learning Objectives
By the end of this chapter, you will be able to:
- Orchestrate Containers: Deploy and manage containerized IoT services using Docker and Kubernetes
- Configure Service Mesh: Implement automatic mTLS, traffic management, and observability with Istio or Linkerd
- Design Event-Driven Systems: Build loosely coupled IoT platforms using publish-subscribe messaging patterns
- Select Edge Platforms: Choose appropriate lightweight Kubernetes alternatives (K3s, KubeEdge) for edge deployments
313.2 Prerequisites
Before diving into this chapter, you should be familiar with:
- SOA and Microservices Fundamentals: Understanding service decomposition and architecture patterns
- SOA Resilience Patterns: Understanding circuit breakers and failure handling
- Cloud Computing for IoT: Understanding cloud deployment models and service types
- Edge-Fog Computing: Understanding edge deployment requirements
Containers are like lunchboxes that keep everything a service needs in one neat package!
313.2.1 The Sensor Squad Adventure: The Lunchbox Solution
When the Sensor Squad’s restaurant got SO popular, they opened in 10 cities! But there was a problem - each city’s kitchen was different:
- New York had gas stoves
- London had electric stoves
- Tokyo had induction cooktops
The recipes didn’t work the same everywhere! Thermo got different results in each kitchen.
Then they invented Container Lunchboxes: Each lunchbox has: - The recipe - The exact ingredients - A tiny portable stove that works the same everywhere!
Now they could send lunchboxes to any city and pizzas came out EXACTLY the same. That’s containers!
And Kubernetes is like having a smart manager who: - Watches all the lunchboxes - Opens more when it’s busy - Closes some when it’s slow - Replaces broken ones automatically
313.2.2 Key Words for Kids
| Word | What It Means |
|---|---|
| Container | A lunchbox with everything needed to cook one dish |
| Docker | The company that makes the lunchbox standard |
| Kubernetes | A smart manager that watches all the lunchboxes |
| Service Mesh | Walkie-talkies so all kitchen staff can talk securely |
313.3 Container Orchestration
Containers package services with their dependencies. Orchestration manages containers at scale.
313.3.1 Why Containers for IoT?
| Challenge | Container Solution |
|---|---|
| Dependency conflicts | Each service has isolated dependencies |
| Environment consistency | Same container runs dev, test, prod |
| Resource isolation | CPU/memory limits per service |
| Rapid deployment | Seconds to start vs minutes for VMs |
| Scalability | Spin up replicas on demand |
313.3.2 Docker for IoT Services
# Example: IoT Telemetry Service Container
FROM python:3.11-slim
# Install dependencies
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# Copy application code
COPY src/ ./src/
# Run as non-root user
RUN useradd -m appuser
USER appuser
# Expose metrics and service ports
EXPOSE 8080 9090
# Health check
HEALTHCHECK --interval=30s --timeout=3s \
CMD curl -f http://localhost:8080/health || exit 1
# Start service
CMD ["python", "-m", "src.telemetry_service"]313.3.3 Kubernetes for IoT Orchestration
Kubernetes Manifest Example:
apiVersion: apps/v1
kind: Deployment
metadata:
name: telemetry-service
namespace: iot-platform
spec:
replicas: 3
selector:
matchLabels:
app: telemetry
template:
metadata:
labels:
app: telemetry
spec:
containers:
- name: telemetry
image: iot-platform/telemetry:v1.2.3
ports:
- containerPort: 8080
resources:
requests:
memory: "256Mi"
cpu: "250m"
limits:
memory: "512Mi"
cpu: "500m"
livenessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 10
periodSeconds: 5
readinessProbe:
httpGet:
path: /ready
port: 8080
initialDelaySeconds: 5
periodSeconds: 3
---
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: telemetry-hpa
namespace: iot-platform
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: telemetry-service
minReplicas: 3
maxReplicas: 20
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70313.3.4 Edge Containers: K3s and KubeEdge
For IoT edge deployments, lightweight Kubernetes alternatives:
| Platform | Resources | Use Case |
|---|---|---|
| K3s | 512MB RAM | Single-node edge, Raspberry Pi |
| KubeEdge | 256MB RAM | IoT edge, intermittent connectivity |
| MicroK8s | 540MB RAM | Development, small production |
| OpenYurt | Similar to K8s | Alibaba edge computing |
313.4 Service Mesh for IoT
A service mesh handles service-to-service communication concerns:
%% fig-alt: "Service mesh architecture showing sidecar proxies handling traffic between services with control plane managing configuration for mTLS encryption traffic routing and observability"
%%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#2C3E50', 'primaryTextColor': '#fff', 'primaryBorderColor': '#16A085', 'lineColor': '#16A085', 'secondaryColor': '#E67E22', 'tertiaryColor': '#7F8C8D', 'fontSize': '14px'}}}%%
graph TB
subgraph mesh["Service Mesh"]
CP[Control Plane<br/>Istio/Linkerd]
subgraph svc1["Service A Pod"]
A[App Container]
PA[Sidecar Proxy]
end
subgraph svc2["Service B Pod"]
B[App Container]
PB[Sidecar Proxy]
end
subgraph svc3["Service C Pod"]
C[App Container]
PC[Sidecar Proxy]
end
end
A --> PA
PA <-->|mTLS| PB
PB --> B
PA <-->|mTLS| PC
PC --> C
CP -.->|Config| PA
CP -.->|Config| PB
CP -.->|Config| PC
style CP fill:#2C3E50,stroke:#16A085,color:#fff
style PA fill:#E67E22,stroke:#2C3E50,color:#fff
style PB fill:#E67E22,stroke:#2C3E50,color:#fff
style PC fill:#E67E22,stroke:#2C3E50,color:#fff
Service Mesh Benefits:
| Feature | Description | IoT Value |
|---|---|---|
| mTLS everywhere | Automatic encryption between services | Zero-trust security |
| Traffic management | Canary deployments, A/B testing | Safe IoT updates |
| Observability | Distributed tracing, metrics | Debug complex flows |
| Resilience | Retries, timeouts, circuit breaking | Reliability |
313.5 Event-Driven Architecture for IoT
IoT systems are naturally event-driven. Services communicate through events rather than direct calls.
%% fig-alt: "Event-driven architecture for IoT showing devices publishing telemetry events to message broker with multiple services subscribing independently for analytics alerting and storage enabling loose coupling and scalability"
%%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#2C3E50', 'primaryTextColor': '#fff', 'primaryBorderColor': '#16A085', 'lineColor': '#16A085', 'secondaryColor': '#E67E22', 'tertiaryColor': '#7F8C8D', 'fontSize': '14px'}}}%%
graph LR
subgraph devices["IoT Devices"]
D1[Sensor 1]
D2[Sensor 2]
D3[Sensor 3]
end
subgraph broker["Message Broker"]
MQ[Kafka/MQTT<br/>Event Bus]
end
subgraph services["Consumers"]
AN[Analytics Service]
AL[Alert Service]
ST[Storage Service]
ML[ML Pipeline]
end
D1 -->|Publish| MQ
D2 -->|Publish| MQ
D3 -->|Publish| MQ
MQ -->|Subscribe| AN
MQ -->|Subscribe| AL
MQ -->|Subscribe| ST
MQ -->|Subscribe| ML
style MQ fill:#E67E22,stroke:#2C3E50,color:#fff
Benefits for IoT:
- Decoupling: Producers don’t know about consumers
- Scalability: Add consumers without changing producers
- Resilience: Broker buffers during consumer downtime
- Auditability: Event log provides full history
Event-Driven Implementation Example:
from kafka import KafkaProducer, KafkaConsumer
import json
# Producer: IoT Gateway
producer = KafkaProducer(
bootstrap_servers=['kafka:9092'],
value_serializer=lambda v: json.dumps(v).encode('utf-8')
)
def publish_telemetry(device_id, data):
"""Publish telemetry event to Kafka."""
event = {
'device_id': device_id,
'timestamp': datetime.utcnow().isoformat(),
'data': data
}
producer.send('iot-telemetry', value=event)
# Consumer: Analytics Service
consumer = KafkaConsumer(
'iot-telemetry',
bootstrap_servers=['kafka:9092'],
group_id='analytics-service',
value_deserializer=lambda m: json.loads(m.decode('utf-8'))
)
def process_telemetry():
"""Process telemetry events from Kafka."""
for message in consumer:
event = message.value
analyze_data(event['device_id'], event['data'])313.6 Knowledge Check Summary
This chapter covered essential concepts for deploying scalable, resilient IoT backends using container orchestration.
313.7 Summary
This chapter covered container orchestration and advanced patterns for IoT platforms:
- Container Orchestration: Docker for packaging, Kubernetes for orchestration, K3s/KubeEdge for edge
- Service Mesh: Automatic mTLS, traffic management, observability without code changes
- Event-Driven: Pub-sub messaging for loose coupling and scalability
- Edge Platforms: Lightweight alternatives for resource-constrained and intermittently-connected deployments
In one sentence: Container orchestration with Kubernetes (or lightweight alternatives like KubeEdge for edge) combined with service mesh and event-driven messaging provides the foundation for scalable, resilient IoT platforms.
Remember this rule: Use standard Kubernetes for cloud, KubeEdge for intermittent connectivity edge, and K3s for resource-constrained single-node deployments.
313.8 What’s Next?
Continue your architecture journey:
- Cloud Computing for IoT: Where microservices run - cloud service models and deployment
- IoT Reference Architectures: How microservices fit into overall IoT architecture layers
- Edge-Fog Computing: Running microservices at the edge
- MQTT Fundamentals: Event-driven messaging between IoT services
313.9 Further Reading
Books: - “Building Microservices” by Sam Newman - Definitive guide to microservices patterns - “Designing Distributed Systems” by Brendan Burns - Patterns for container-based distributed systems - “Release It!” by Michael Nygard - Resilience patterns for production systems
Online Resources: - microservices.io - Pattern catalog by Chris Richardson - 12factor.net - Cloud-native application principles - Kubernetes Documentation - Official K8s guides