Kubernetes · Cluster ·
[Kubernetes] Steady Load on Kubernetes Node Using Stress
stress 설치 #
1RUN apt-get update && apt-get install -y stress bcConfigMap 설정 #
1apiVersion: v1
2kind: ConfigMap
3metadata:
4 name: stress-script
5 namespace: chip-analyzer
6data:
7 stress-control.sh: |
8 #!/bin/bash
9
10 TARGET_CPU_USAGE=$TARGET_CPU
11 echo "TARGET_CPU_USAGE = $TARGET_CPU_USAGE"
12
13 TARGET_MEMORY_USAGE=$TARGET_MEM
14 echo "TARGET_MEMORY_USAGE = $TARGET_MEMORY_USAGE"
15
16 TIMEOUT=$TIMEOUT
17 echo "TIMEOUT = $TIMEOUT"
18
19 while true; do
20 echo "##### CPU Check #####"
21 TOTAL_CORES=$(nproc)
22 echo "TOTAL_CORES = $TOTAL_CORES"
23
24 CURRENT_IDLE=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print $1}')
25 echo "CURRENT_IDLE = $CURRENT_IDLE"
26
27 CURRENT_CPU_USAGE=$(echo "100 - $CURRENT_IDLE" | bc -l)
28 echo "CURRENT_CPU_USAGE = $CURRENT_CPU_USAGE"
29
30 NEEDED_CPU_USAGE=$(echo "$TARGET_CPU_USAGE - $CURRENT_CPU_USAGE" | bc -l)
31 echo "NEEDED_CPU_USAGE = $NEEDED_CPU_USAGE"
32
33 TARGET_CPU_CORES=$(echo "$NEEDED_CPU_USAGE * $TOTAL_CORES / 100" | bc -l)
34 echo "TARGET_CPU_CORES = $TARGET_CPU_CORES"
35
36 TARGET_CPU_CORES_ROUNDED=$(echo "($TARGET_CPU_CORES+0.5)/1" | bc)
37 echo "TARGET_CPU_CORES_ROUNDED = $TARGET_CPU_CORES_ROUNDED"
38
39
40 echo "##### Memory Check #####"
41 TOTAL_MEMORY=$(grep MemTotal /proc/meminfo | awk '{print $2}')
42 echo "TOTAL_MEMORY = $TOTAL_MEMORY"
43
44 FREE_MEMORY=$(grep MemFree /proc/meminfo | awk '{print $2}')
45 echo "FREE_MEMORY = $FREE_MEMORY"
46
47 BUFFERS=$(grep Buffers /proc/meminfo | awk '{print $2}')
48 echo "BUFFERS = $BUFFERS"
49
50 CACHED=$(grep "^Cached" /proc/meminfo | awk '{print $2}')
51 echo "CACHED = $CACHED"
52
53 USED_MEMORY=$((TOTAL_MEMORY - FREE_MEMORY - BUFFERS - CACHED))
54 echo "USED_MEMORY = $USED_MEMORY"
55
56 TARGET_MEMORY=$(echo "$TOTAL_MEMORY * $TARGET_MEMORY_USAGE / 100" | bc)
57 echo "TARGET_MEMORY = $TARGET_MEMORY"
58
59 NEEDED_MEMORY=$((TARGET_MEMORY - USED_MEMORY))
60 echo "NEEDED_MEMORY = $NEEDED_MEMORY"
61
62 # MB로 계산하고 싶을 때(반올림 추가)
63 NEEDED_MEMORY_ROUNDED=$(echo "($NEEDED_MEMORY + 1023) / 1024" | bc)
64 echo "NEEDED_MEMORY_ROUNDED = $NEEDED_MEMORY_ROUNDED"
65
66 if (( $(echo "$TARGET_CPU_CORES_ROUNDED > 0" | bc -l) )) && (( NEEDED_MEMORY > 1023 )); then
67 echo "Adding Stress CPU: $TARGET_CPU_CORES_ROUNDED / Memory: $NEEDED_MEMORY KB."
68 stress --cpu $TARGET_CPU_CORES_ROUNDED --vm 1 --vm-bytes ${NEEDED_MEMORY}k --vm-hang 0 --verbose --timeout ${TIMEOUT}s
69 elif (( $(echo "$TARGET_CPU_CORES_ROUNDED > 0" | bc -l) )) && (( NEEDED_MEMORY <= 1023 )); then
70 echo "Adding Stress CPU: $TARGET_CPU_CORES_ROUNDED."
71 stress --cpu $TARGET_CPU_CORES_ROUNDED --vm-hang 0 --verbose --timeout ${TIMEOUT}s
72 elif (( $(echo "$TARGET_CPU_CORES_ROUNDED <= 0" | bc -l) )) && (( NEEDED_MEMORY > 1023 )); then
73 echo "Adding Stress Memory: $NEEDED_MEMORY KB."
74 stress --vm 1 --vm-bytes ${NEEDED_MEMORY}k --vm-hang 0 --verbose --timeout ${TIMEOUT}s
75 else
76 echo "No Stress Needed."
77 fi
78
79 wait
80
81 sleep 1
82
83 doneDaemonSet 설정 #
1apiVersion: apps/v1
2kind: DaemonSet
3metadata:
4 labels:
5 app: chip-analyzer-master
6 name: chip-analyzer-master
7 namespace: chip-analyzer
8spec:
9 updateStrategy:
10 type: RollingUpdate
11 rollingUpdate:
12 maxUnavailable: 5
13 maxSurge: 0
14 selector:
15 matchLabels:
16 app: chip-analyzer-master
17 template:
18 metadata:
19 labels:
20 app: chip-analyzer-master
21 spec:
22 affinity:
23 nodeAffinity:
24 requiredDuringSchedulingIgnoredDuringExecution:
25 nodeSelectorTerms:
26 - matchExpressions:
27 - key: node-role.kubernetes.io/control-plane
28 operator: Exists
29 tolerations:
30 - key: node-role.kubernetes.io/control-plane
31 operator: Exists
32 effect: NoSchedule
33 - key: node-role.kubernetes.io/master
34 operator: Exists
35 effect: NoSchedule
36 containers:
37 - env:
38 - name: TARGET_CPU
39 value: '50'
40 - name: TARGET_MEM
41 value: '50'
42 - name: TIMEOUT
43 value: '300'
44 image: stress:v1.0
45 command: ["/bin/bash", "/scripts/stress-control.sh"]
46 volumeMounts:
47 - name: script-volume
48 mountPath: /scripts
49 imagePullPolicy: Always
50 name: chip-analyzer-master
51 restartPolicy: Always
52 volumes:
53 - name: script-volume
54 configMap:
55 name: stress-script
56 defaultMode: 0775Advertisement