Phase Plans (5 files): - 04-RESEARCH.md: Domain research on Docker limits, healthchecks, EC2 parallels - 04-VALIDATION.md: Success criteria and validation strategy - 04-01-PLAN.md: Test infrastructure (RED phase) - 04-02-PLAN.md: Diátxis documentation - 04-03-PLAN.md: Infrastructure implementation (GREEN phase) Test Scripts (6 files, 1300+ lines): - 01-resource-limits-test.sh: Validate INF-03 compliance - 02-healthcheck-test.sh: Validate healthcheck configuration - 03-enforcement-test.sh: Verify resource limits with docker stats - 04-verify-infrastructure.sh: Infrastructure verification - 99-final-verification.sh: End-to-end student verification - run-all-tests.sh: Test orchestration with fail-fast - quick-test.sh: Fast validation (<30s) Documentation (11 files, 2500+ lines): Tutorials (3): - 01-set-resource-limits.md: EC2 instance types, Docker limits syntax - 02-implement-healthchecks.md: ELB health check parallels - 03-dependencies-with-health.md: depends_on with service_healthy How-to Guides (4): - check-resource-usage.md: docker stats monitoring - test-limits-enforcement.md: Stress testing CPU/memory - custom-healthcheck.md: HTTP, TCP, database healthchecks - instance-type-mapping.md: Docker limits → EC2 mapping Reference (3): - compose-resources-syntax.md: Complete deploy.resources reference - healthcheck-syntax.md: All healthcheck parameters - ec2-instance-mapping.md: Instance type mapping table Explanation (1): - compute-ec2-parallels.md: Container=EC2, Limits=Instance Type, Healthcheck=ELB Infrastructure: - docker-compose.yml: 5 services (web, app, worker, db, stress-test) All services: INF-03 compliant (cpus + memory limits) All services: healthcheck configured EC2 parallels: t2.nano, t2.micro, t2.small, t2.medium, m5.large - Dockerfile: Alpine 3.19 + stress tools + non-root user Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
89 lines
1.6 KiB
Markdown
89 lines
1.6 KiB
Markdown
# How-to: Testare l'Enforcement dei Limiti
|
|
|
|
Come verificare che i limiti delle risorse siano effettivamente applicati.
|
|
|
|
## Test 1: Verificare Configurazione
|
|
|
|
### Controllare nel compose file
|
|
|
|
```bash
|
|
grep -A 10 "deploy:" docker-compose.yml | grep -E "cpus:|memory:"
|
|
```
|
|
|
|
### Controllare nel container
|
|
|
|
```bash
|
|
docker inspect lab03-web --format '{{.HostConfig.NanoCpus}}' # CPU (1e9 = 1 CPU)
|
|
docker inspect lab03-web --format '{{.HostConfig.Memory}}' # Memory in bytes
|
|
```
|
|
|
|
## Test 2: Stress Test CPU
|
|
|
|
### Avviare container con stress
|
|
|
|
```bash
|
|
docker run -d --name stress-test \
|
|
--cpus='0.5' \
|
|
polinux/stress \
|
|
--cpu 1 \
|
|
--timeout 30s
|
|
```
|
|
|
|
### Monitorare enforcement
|
|
|
|
```bash
|
|
docker stats stress-test --no-stream
|
|
```
|
|
|
|
**Risultato atteso:** CPU non supera il 50% (0.5 CPU)
|
|
|
|
### Cleanup
|
|
|
|
```bash
|
|
docker rm -f stress-test
|
|
```
|
|
|
|
## Test 3: Stress Test Memory
|
|
|
|
### Avviare test OOM
|
|
|
|
```bash
|
|
docker run -d --name mem-test \
|
|
--memory='512m' \
|
|
polinux/stress \
|
|
--vm 1 \
|
|
--vm-bytes 600M \
|
|
--timeout 60s
|
|
```
|
|
|
|
### Verificare OOM kill
|
|
|
|
```bash
|
|
docker ps -a --filter 'name=mem-test'
|
|
```
|
|
|
|
**Risultato atteso:** Container exited (code 137 = OOM killed)
|
|
|
|
### Cleanup
|
|
|
|
```bash
|
|
docker rm -f mem-test
|
|
```
|
|
|
|
## Test 4: Verifica con Script
|
|
|
|
```bash
|
|
#!/bin/bash
|
|
# verify-limits.sh
|
|
|
|
for container in lab03-web lab03-app lab03-db; do
|
|
echo "Container: $container"
|
|
docker inspect "$container" --format ' CPUs: {{.HostConfig.NanoCpus}}'
|
|
docker inspect "$container" --format ' Memory: {{.HostConfig.Memory}}'
|
|
done
|
|
```
|
|
|
|
## Vedi Anche
|
|
- How-to: Check Resource Usage
|
|
- Reference: EC2 Instance Mapping
|