Update container limits and introduce priority levels for LXC
Some checks failed
GBCI / build (push) Failing after 45s

This commit is contained in:
Rodrigo Rodriguez (Pragmatismo) 2026-01-25 21:21:22 -03:00
parent 3baa74371b
commit 5605577e8f

View file

@ -4,50 +4,122 @@
declare -A container_limits=(
# Pattern Memory CPU Allowance
["*tables*"]="4096MB:100ms/100ms"
["*postgre*"]="4096MB:100ms/100ms" # PostgreSQL alternative
["*dns*"]="2048MB:100ms/100ms"
["*doc-editor*"]="512MB:10ms/100ms"
["*table-editor*"]="2048MB:25s/100ms"
["*proxy*"]="2048MB:100ms/100ms"
["*directory*"]="1024MB:50ms/100ms"
["*drive*"]="4096MB:100ms/100ms"
["*minio*"]="4096MB:100ms/100ms" # MinIO alternative
["*email*"]="4096MB:100ms/100ms"
["*webmail*"]="4096MB:100ms/100ms"
["*bot*"]="2048MB:50ms/100ms"
["*webmail*"]="2096MB:100ms/100ms"
["*bot*"]="2048MB:5ms/100ms"
["*meeting*"]="4096MB:100ms/100ms"
["*alm*"]="512MB:50ms/100ms"
["*alm-ci*"]="8192MB:100ms/100ms"
["*vault*"]="512MB:50ms/100ms"
["*alm-ci*"]="8192MB:200ms/100ms" # CHANGED: 100ms → 200ms (HIGHEST PRIORITY)
["*system*"]="4096MB:50ms/100ms"
["*mailer*"]="4096MB:25ms/100ms"
["*mailer*"]="2096MB:25ms/100ms"
)
# Default values (for containers that don't match any pattern)
DEFAULT_MEMORY="1024MB"
DEFAULT_MEMORY="512MB"
DEFAULT_CPU_ALLOWANCE="15ms/100ms"
CPU_COUNT=2
CPU_PRIORITY=10
DEFAULT_CPU_COUNT=1
for pattern in "${!container_limits[@]}"; do
# PRIORITY LEVELS (1-10, where 10 is highest)
declare -A container_priority=(
["*alm-ci*"]="10" # HIGHEST PRIORITY - all sources for alm-ci
["*tables*"]="9" # High priority - PostgreSQL
["*postgre*"]="9" # High priority - PostgreSQL alternative
["*drive*"]="8" # High priority - MinIO
["*minio*"]="8" # High priority - MinIO alternative
["*directory*"]="7" # Medium priority - Zitadel
["*dns*"]="5" # Normal priority
["*proxy*"]="5" # Normal priority
["*email*"]="5" # Normal priority
["*webmail*"]="5" # Normal priority
["*meeting*"]="5" # Normal priority
["*system*"]="5" # Normal priority
["*bot*"]="4" # Lower priority
["*doc-editor*"]="4" # Lower priority
["*alm*"]="4" # Lower priority
["*mailer*"]="3" # Lowest priority
)
# Get all containers once
containers=$(lxc list -c n --format csv)
echo "Starting container configuration with priority levels..."
echo "========================================================="
# Configure all containers
for container in $containers; do
echo "Configuring $container..."
memory=$DEFAULT_MEMORY
cpu_allowance=$DEFAULT_CPU_ALLOWANCE
cpu_count=$DEFAULT_CPU_COUNT
cpu_priority=5 # Default priority if not specified
# Configure all containers
for container in $(lxc list -c n --format csv); do
# Check if container matches any pattern
if [[ $container == $pattern ]]; then
matched_pattern=""
for pattern in "${!container_limits[@]}"; do
# Convert pattern to regex: *tables* -> .*tables.*
regex_pattern="${pattern//\*/.*}"
if [[ $container =~ $regex_pattern ]]; then
IFS=':' read -r memory cpu_allowance <<< "${container_limits[$pattern]}"
matched_pattern=$pattern
echo " → Matched pattern: $pattern"
# Apply configuration
lxc config set "$container" limits.memory "$memory"
lxc config set "$container" limits.cpu.allowance "$cpu_allowance"
lxc config set "$container" limits.cpu "$CPU_COUNT"
lxc config set "$container" limits.cpu.priority "$CPU_PRIORITY"
echo "Restarting $container..."
lxc restart "$container"
lxc config show "$container" | grep -E "memory|cpu"
# Set CPU count based on service type
if [[ $pattern == "*alm-ci*" ]]; then
cpu_count=2 # More CPUs for alm-ci
elif [[ $pattern == "*tables*" ]] || [[ $pattern == "*postgre*" ]]; then
cpu_count=1 # More CPUs for PostgreSQL
elif [[ $pattern == "*drive*" ]] || [[ $pattern == "*minio*" ]]; then
cpu_count=1 # More CPUs for MinIO
else
cpu_count=1
fi
break
fi
done
# Set CPU priority if defined for this pattern
if [ -n "$matched_pattern" ] && [ -n "${container_priority[$matched_pattern]}" ]; then
cpu_priority="${container_priority[$matched_pattern]}"
else
# Set priority for all other containers (balanced for 10 users)
cpu_priority=5
fi
# Apply configuration
echo " → Memory: $memory"
echo " → CPU: $cpu_count cores"
echo " → CPU Allowance: $cpu_allowance"
echo " → CPU Priority: $cpu_priority/10"
lxc config set "$container" limits.memory "$memory"
lxc config set "$container" limits.cpu.allowance "$cpu_allowance"
lxc config set "$container" limits.cpu "$cpu_count"
lxc config set "$container" limits.cpu.priority "$cpu_priority"
echo " → Restarting $container..."
lxc restart "$container" --timeout=30
echo " → Current config:"
lxc config show "$container" | grep -E "memory|cpu" | sed 's/^/ /'
echo ""
done
echo "========================================================="
echo "Configuration complete!"
echo ""
echo "PRIORITY SUMMARY:"
echo "1. alm-ci (build-run) → Priority 10/10, 200ms/100ms, 8GB RAM, 4 CPUs"
echo "2. tables/postgre → Priority 9/10, 100ms/100ms, 4GB RAM, 4 CPUs"
echo "3. drive/minio → Priority 8/10, 100ms/100ms, 4GB RAM, 3 CPUs"
echo "4. directory → Priority 7/10, 50ms/100ms, 1GB RAM, 2 CPUs"
echo "5. All others → Priority 5/10, default values (balanced for 10 users)"
echo "========================================================="