Skip to main content

Annotation Reference

This document provides a complete reference for all PVC Chonker annotations.

Core Annotations

pvc-chonker.io/enabled

Type: string (boolean)
Default: "false"
Description: Enables or disables automatic expansion for this PVC.
Values: "true" | "false"
Priority: Highest - overrides all other settings

annotations:
pvc-chonker.io/enabled: "true" # Enable expansion
pvc-chonker.io/enabled: "false" # Disable expansion (break glass)

pvc-chonker.io/threshold

Type: string (percentage)
Default: "80%"
Description: Storage usage percentage that triggers expansion.
Range: 1% to 99%
Examples: "75%", "85%", "90%"

annotations:
pvc-chonker.io/threshold: "85%" # Expand when 85% full

pvc-chonker.io/inodes-threshold

Type: string (percentage)
Default: "80%"
Description: Inode usage percentage that triggers expansion.
Range: 1% to 99%
Note: Only effective on filesystems with dynamic inodes (XFS, Btrfs, ZFS)

annotations:
pvc-chonker.io/inodes-threshold: "90%" # Expand when 90% inodes used

pvc-chonker.io/increase

Type: string (percentage or quantity)
Default: "10%"
Description: Amount to increase PVC size during expansion.
Formats:

  • Percentage: "20%", "50%"
  • Quantity: "5Gi", "100Mi", "1Ti"
annotations:
pvc-chonker.io/increase: "25%" # Increase by 25% of current size
pvc-chonker.io/increase: "10Gi" # Increase by exactly 10Gi

Size Limits

pvc-chonker.io/max-size

Type: string (quantity)
Default: none (unlimited)
Description: Maximum size the PVC can grow to.
Formats: "100Gi", "1Ti", "500Mi"

annotations:
pvc-chonker.io/max-size: "1000Gi" # Never exceed 1000Gi

pvc-chonker.io/min-scale-up

Type: string (quantity)
Default: "1Gi"
Description: Minimum amount to increase during expansion.
Purpose: Ensures meaningful size increases, prevents tiny expansions

annotations:
pvc-chonker.io/min-scale-up: "5Gi" # Always increase by at least 5Gi

Timing Controls

pvc-chonker.io/cooldown

Type: string (duration)
Default: "15m"
Description: Minimum time between expansions for this PVC.
Formats: "30s", "15m", "2h", "24h"
Purpose: Prevents rapid successive expansions

annotations:
pvc-chonker.io/cooldown: "30m" # Wait 30 minutes between expansions

Metadata Annotations

pvc-chonker.io/group

Type: string
Set by: PVCGroup webhook (read-only)
Description: Name of the PVCGroup this PVC belongs to.
Note: Automatically set by webhook, do not set manually

pvc-chonker.io/last-expansion

Type: string (RFC3339 timestamp)
Set by: Controller (read-only)
Description: Timestamp of the last successful expansion.
Example: "2024-01-15T10:30:00Z"

pvc-chonker.io/disabled-reason

Type: string
Optional: User-defined
Description: Human-readable reason why expansion is disabled.
Use with: pvc-chonker.io/enabled: "false"

annotations:
pvc-chonker.io/enabled: "false"
pvc-chonker.io/disabled-reason: "maintenance-window"

Complete Example

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: database-storage
annotations:
# Core settings
pvc-chonker.io/enabled: "true"
pvc-chonker.io/threshold: "85%"
pvc-chonker.io/inodes-threshold: "90%"
pvc-chonker.io/increase: "25%"

# Size limits
pvc-chonker.io/max-size: "2000Gi"
pvc-chonker.io/min-scale-up: "10Gi"

# Timing
pvc-chonker.io/cooldown: "30m"

# Optional metadata
pvc-chonker.io/disabled-reason: "" # Empty when enabled
spec:
accessModes: [ReadWriteOnce]
resources:
requests:
storage: 100Gi
storageClassName: fast-ssd

Validation Rules

Threshold Validation

  • Must be between 1% and 99%
  • Storage and inode thresholds are independent
  • Expansion triggers when EITHER threshold is reached

Increase Validation

  • Percentage increases are calculated from current PVC size
  • Quantity increases are added to current size
  • Final size is rounded up to next GiB boundary
  • Must respect min-scale-up setting

Size Validation

  • New size cannot exceed max-size if set
  • New size must be larger than current size
  • Storage class must support allowVolumeExpansion: true

Priority and Inheritance

Annotations have the highest priority in the configuration hierarchy:

  1. PVC Annotations ← Highest priority
  2. PVCGroup Template
  3. PVCPolicy Template
  4. Global Configuration
  5. Built-in Defaults

Example Priority Resolution:

# If PVC has: threshold="90%"
# And PVCGroup has: threshold="80%", increase="25%"
# And PVCPolicy has: increase="20%", cooldown="20m"
# And Global has: cooldown="15m"

# Final effective configuration:
# threshold: "90%" (from PVC annotation)
# increase: "25%" (from PVCGroup - highest available)
# cooldown: "20m" (from PVCPolicy - highest available)

Common Patterns

Conservative Database

annotations:
pvc-chonker.io/enabled: "true"
pvc-chonker.io/threshold: "90%" # Wait until very full
pvc-chonker.io/increase: "50%" # Large increases
pvc-chonker.io/cooldown: "1h" # Long cooldown
pvc-chonker.io/max-size: "5000Gi" # Generous limit

Aggressive Log Storage

annotations:
pvc-chonker.io/enabled: "true"
pvc-chonker.io/threshold: "75%" # Expand early
pvc-chonker.io/increase: "100%" # Double the size
pvc-chonker.io/cooldown: "5m" # Short cooldown
pvc-chonker.io/max-size: "1000Gi" # Reasonable limit

Maintenance Mode

annotations:
pvc-chonker.io/enabled: "false"
pvc-chonker.io/disabled-reason: "scheduled-maintenance"

Troubleshooting

Annotation Not Working

  1. Check annotation spelling and format
  2. Verify PVC has correct storage class
  3. Check controller logs for validation errors
  4. Ensure no conflicting policies or groups

Invalid Values

# Check PVC events for validation errors
kubectl describe pvc your-pvc

# Check controller logs
kubectl logs -n pvc-chonker-system deployment/controller-manager

Priority Conflicts

Use kubectl describe pvc to see which configuration source is being used:

# Controller adds status annotations showing effective config
metadata:
annotations:
pvc-chonker.io/effective-threshold: "85%"
pvc-chonker.io/effective-source: "annotation" # or "group", "policy", "global"