Resource Management — control CPU and memory for Pods.
1apiVersion: apps/v12kind: Deployment3metadata:4 name: myapp5spec:6 replicas: 37 template:8 metadata:9 labels:10 app: myapp11 spec:12 containers:13 - name: app14 image: myapp:latest15 resources:16 requests:17 cpu: "250m"18 memory: "256Mi"19 limits:20 cpu: "1000m"21 memory: "512Mi"22 startupProbe:23 httpGet:24 path: /healthz25 port: 808026 failureThreshold: 3027 periodSeconds: 1028 readinessProbe:29 httpGet:30 path: /ready31 port: 808032 initialDelaySeconds: 533 periodSeconds: 1034 livenessProbe:35 httpGet:36 path: /healthz37 port: 808038 initialDelaySeconds: 1539 periodSeconds: 2040---41# ResourceQuota42apiVersion: v143kind: ResourceQuota44metadata:45 name: compute-quota46 namespace: production47spec:48 hard:49 requests.cpu: "16"50 requests.memory: "32Gi"51 limits.cpu: "32"52 limits.memory: "64Gi"53---54# LimitRange55apiVersion: v156kind: LimitRange57metadata:58 name: default-limits59 namespace: production60spec:61 limits:62 - type: Container63 default:64 cpu: "500m"65 memory: "256Mi"66 defaultRequest:67 cpu: "100m"68 memory: "128Mi"69 max:70 cpu: "4"71 memory: "4Gi"72 min:73 cpu: "50m"74 memory: "64Mi"
1# Check resource usage2kubectl top pods --sort-by=cpu3kubectl top pods --sort-by=memory4kubectl top nodes56# Check resource requests/limits7kubectl get pods -o json | jq '.items[] | {name: .metadata.name, cpu_req: .spec.containers[0].resources.requests.cpu, mem_req: .spec.containers[0].resources.requests.memory}'89# Check quota usage10kubectl get resourcequota -n production1112# Check node allocation13kubectl describe node node-1 | grep -A 5 "Allocated resources"1415# Monitor resource pressure16kubectl get nodes -o custom-columns=NAME:.metadata.name,MEMORY:.status.conditions[?(@.type=="MemoryPressure")].status
Tools: