Π‘ΠΎ ΡΠ΅ΠΊΠΎΡ Π½Π° Π³ΠΎΠ΄ΠΈΠ½ΠΈΡΠ΅ Π½Π° ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ Π½Π° Kubernetes Π²ΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²ΠΎΡΠΎ, ΠΈΠΌΠ°ΠΌΠ΅ Π°ΠΊΡΠΌΡΠ»ΠΈΡΠ°Π½ΠΎ ΠΌΠ½ΠΎΠ³Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΈ ΠΏΡΠΈΠΊΠ°Π·Π½ΠΈ Π·Π° ΡΠΎΠ° ΠΊΠ°ΠΊΠΎ Π³ΡΠ΅ΡΠΊΠΈΡΠ΅ Π²ΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠΎΡ Π΄ΠΎΠ²Π΅Π΄ΠΎΠ° Π΄ΠΎ Π½Π΅ΠΏΡΠΈΡΠ°ΡΠ½ΠΈ ΠΈ/ΠΈΠ»ΠΈ Π½Π΅ΡΠ°Π·Π±ΠΈΡΠ»ΠΈΠ²ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΈΡΠΈ ΠΊΠΎΠΈ Π²Π»ΠΈΡΠ°Π°Ρ Π½Π° ΡΠ°Π±ΠΎΡΠ°ΡΠ° Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΈΡΠ΅ ΠΈ ΠΌΠ΅ΡΡΠ½ΠΊΠΈΡΠ΅. ΠΠΎ ΠΎΠ²Π°Π° ΡΡΠ°ΡΠΈΡΠ° Π½Π°ΠΏΡΠ°Π²ΠΈΠ²ΠΌΠ΅ ΠΈΠ·Π±ΠΎΡ Π½Π° Π½Π΅ΠΊΠΎΠΈ ΠΎΠ΄ Π½Π°ΡΡΠ΅ΡΡΠΈΡΠ΅ ΠΈΠ»ΠΈ Π½Π°ΡΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΈΡΠ΅. ΠΡΡΠΈ ΠΈ Π°ΠΊΠΎ Π½ΠΈΠΊΠΎΠ³Π°Ρ Π½Π΅ ΡΡΠ΅ Π΄ΠΎΠ²ΠΎΠ»Π½ΠΎ ΡΡΠ΅ΡΠ½ΠΈ Π΄Π° Π½Π°ΠΈΠ΄Π΅ΡΠ΅ Π½Π° ΡΠ°ΠΊΠ²ΠΈ ΡΠΈΡΡΠ°ΡΠΈΠΈ, ΡΠΈΡΠ°ΡΠ΅ΡΠΎ Π·Π° ΡΠ°ΠΊΠ²ΠΈ ΠΊΡΠ°ΡΠΊΠΈ Π΄Π΅ΡΠ΅ΠΊΡΠΈΠ²ΡΠΊΠΈ ΠΏΡΠΈΠΊΠ°Π·Π½ΠΈ - ΠΎΡΠΎΠ±Π΅Π½ΠΎ βΠΎΠ΄ ΠΏΡΠ²Π° ΡΠ°ΠΊΠ°β - Π΅ ΡΠ΅ΠΊΠΎΠ³Π°Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ, Π½Π΅Π»ΠΈ?
ΠΡΠΈΠΊΠ°Π·Π½Π° 1. Supercronic ΠΈ Docker Π²ΠΈΡΠΈ
ΠΠ° Π΅Π΄Π΅Π½ ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ΅ΡΠΈΡΠ΅, ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ½ΠΎ Π΄ΠΎΠ±ΠΈΠ²Π°Π²ΠΌΠ΅ Π·Π°ΠΌΡΠ·Π½Π°Ρ Docker, ΡΡΠΎ Π³ΠΎ ΠΏΠΎΠΏΡΠ΅ΡΡΠ²Π°ΡΠ΅ Π½ΠΎΡΠΌΠ°Π»Π½ΠΎΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠ°ΡΠ΅ Π½Π° ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΡ. ΠΠΎ ΠΈΡΡΠΎ Π²ΡΠ΅ΠΌΠ΅, ΡΠ»Π΅Π΄Π½ΠΎΠ²ΠΎ Π±Π΅ΡΠ΅ Π·Π°Π±Π΅Π»Π΅ΠΆΠ°Π½ΠΎ Π²ΠΎ Π΄Π½Π΅Π²Π½ΠΈΡΠΈΡΠ΅ Π½Π° Docker:
level=error msg="containerd: start init process" error="exit status 2: "runtime/cgo: pthread_create failed: No space left on device
SIGABRT: abort
PC=0x7f31b811a428 m=0
goroutine 0 [idle]:
goroutine 1 [running]:
runtime.systemstack_switch() /usr/local/go/src/runtime/asm_amd64.s:252 fp=0xc420026768 sp=0xc420026760
runtime.main() /usr/local/go/src/runtime/proc.go:127 +0x6c fp=0xc4200267c0 sp=0xc420026768
runtime.goexit() /usr/local/go/src/runtime/asm_amd64.s:2086 +0x1 fp=0xc4200267c8 sp=0xc4200267c0
goroutine 17 [syscall, locked to thread]:
runtime.goexit() /usr/local/go/src/runtime/asm_amd64.s:2086 +0x1
β¦
ΠΠ½Π° ΡΡΠΎ Π½Π°ΡΠΌΠ½ΠΎΠ³Ρ Π½Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΈΡΠ° Π·Π° ΠΎΠ²Π°Π° Π³ΡΠ΅ΡΠΊΠ° Π΅ ΠΏΠΎΡΠ°ΠΊΠ°ΡΠ°: pthread_create failed: No space left on device
. ΠΡΠ·ΠΎ ΠΏΡΠΎΡΡΡΠ²Π°ΡΠ΅
ΠΠΎ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³ΠΎΡ, ΡΠ»Π΅Π΄Π½Π°Π²Π° ΡΠ»ΠΈΠΊΠ° ΠΎΠ΄Π³ΠΎΠ²Π°ΡΠ° Π½Π° ΠΎΠ½Π° ΡΡΠΎ ΡΠ΅ ΡΠ»ΡΡΡΠ²Π°:
Π‘Π»ΠΈΡΠ½Π° ΡΠΈΡΡΠ°ΡΠΈΡΠ° Π΅ Π·Π°Π±Π΅Π»Π΅ΠΆΠ°Π½Π° ΠΈ Π½Π° Π΄ΡΡΠ³ΠΈ ΡΠ°Π·Π»ΠΈ:
ΠΠ° ΠΈΡΡΠΈΡΠ΅ ΡΠ°Π·Π»ΠΈ Π³Π»Π΅Π΄Π°ΠΌΠ΅:
root@kube-node-1 ~ # ps auxfww | grep curl -c
19782
root@kube-node-1 ~ # ps auxfww | grep curl | head
root 16688 0.0 0.0 0 0 ? Z Feb06 0:00 | _ [curl] <defunct>
root 17398 0.0 0.0 0 0 ? Z Feb06 0:00 | _ [curl] <defunct>
root 16852 0.0 0.0 0 0 ? Z Feb06 0:00 | _ [curl] <defunct>
root 9473 0.0 0.0 0 0 ? Z Feb06 0:00 | _ [curl] <defunct>
root 4664 0.0 0.0 0 0 ? Z Feb06 0:00 | _ [curl] <defunct>
root 30571 0.0 0.0 0 0 ? Z Feb06 0:00 | _ [curl] <defunct>
root 24113 0.0 0.0 0 0 ? Z Feb06 0:00 | _ [curl] <defunct>
root 16475 0.0 0.0 0 0 ? Z Feb06 0:00 | _ [curl] <defunct>
root 7176 0.0 0.0 0 0 ? Z Feb06 0:00 | _ [curl] <defunct>
root 1090 0.0 0.0 0 0 ? Z Feb06 0:00 | _ [curl] <defunct>
Π‘Π΅ ΠΈΡΠΏΠΎΡΡΠ°Π²ΠΈ Π΄Π΅ΠΊΠ° Π²Π°ΠΊΠ²ΠΎΡΠΎ ΠΎΠ΄Π½Π΅ΡΡΠ²Π°ΡΠ΅ Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΈΡΠ° Π½Π° ΡΠ°Π±ΠΎΡΠ°ΡΠ° ΡΠΎ ΠΏΠΎΠ΄Π»ΠΎΠ³Π°ΡΠ°
_ docker-containerd-shim 833b60bb9ff4c669bb413b898a5fd142a57a21695e5dc42684235df907825567 /var/run/docker/libcontainerd/833b60bb9ff4c669bb413b898a5fd142a57a21695e5dc42684235df907825567 docker-runc
| _ /usr/local/bin/supercronic -json /crontabs/cron
| _ /usr/bin/newrelic-daemon --agent --pidfile /var/run/newrelic-daemon.pid --logfile /dev/stderr --port /run/newrelic.sock --tls --define utilization.detect_aws=true --define utilization.detect_azure=true --define utilization.detect_gcp=true --define utilization.detect_pcf=true --define utilization.detect_docker=true
| | _ /usr/bin/newrelic-daemon --agent --pidfile /var/run/newrelic-daemon.pid --logfile /dev/stderr --port /run/newrelic.sock --tls --define utilization.detect_aws=true --define utilization.detect_azure=true --define utilization.detect_gcp=true --define utilization.detect_pcf=true --define utilization.detect_docker=true -no-pidfile
| _ [newrelic-daemon] <defunct>
| _ [curl] <defunct>
| _ [curl] <defunct>
| _ [curl] <defunct>
β¦
ΠΡΠΎΠ±Π»Π΅ΠΌΠΎΡ Π΅ Π²ΠΎ ΠΎΠ²Π°: ΠΊΠΎΠ³Π° Π·Π°Π΄Π°ΡΠ°ΡΠ° ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π° Π²ΠΎ ΡΡΠΏΠ΅ΡΠΊΡΠΎΠ½ΠΈΠΊ, ΠΏΡΠΎΡΠ΅ΡΠΎΡ Π΅ ΠΏΡΠ΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ°Π½ ΠΎΠ΄ Π½Π΅Π³ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ Π΄Π° ΡΠ΅ ΠΏΡΠ΅ΠΊΠΈΠ½Π΅, ΠΏΡΠ΅ΡΠ²ΠΎΡΠ°ΡΡΠΈ ΡΠ΅ Π²ΠΎ
ΠΠΌΠ°ΡΡΠ΅ Π½Π° ΡΠΌ: ΠΠ° Π±ΠΈΠ΄Π°ΠΌ ΠΏΠΎΠΏΡΠ΅ΡΠΈΠ·Π΅Π½, ΠΏΡΠΎΡΠ΅ΡΠΈΡΠ΅ ΡΠ΅ ΠΏΡΠ΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ°Π½ΠΈ ΠΎΠ΄ cron Π·Π°Π΄Π°ΡΠΈ, Π½ΠΎ supercronic Π½Π΅ Π΅ ΠΈΠ½ΠΈΡΠ΅Π½ ΡΠΈΡΡΠ΅ΠΌ ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π³ΠΈ βΡΡΠ²ΠΎΠΈβ ΠΏΡΠΎΡΠ΅ΡΠΈΡΠ΅ ΡΡΠΎ Π³ΠΈ ΡΠΎΠ·Π΄Π°Π»Π΅ Π½Π΅Π³ΠΎΠ²ΠΈΡΠ΅ Π΄Π΅ΡΠ°. ΠΠΎΠ³Π° ΡΠ΅ ΡΠ΅ ΠΏΠΎΠ΄ΠΈΠ³Π½Π°Ρ ΡΠΈΠ³Π½Π°Π»ΠΈΡΠ΅ SIGHUP ΠΈΠ»ΠΈ SIGTERM, ΡΠΈΠ΅ Π½Π΅ ΡΠ΅ ΠΏΡΠ΅Π½Π΅ΡΡΠ²Π°Π°Ρ Π½Π° Π΄Π΅ΡΡΠΊΠΈΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΠΈ, ΡΡΠΎ ΡΠ΅Π·ΡΠ»ΡΠΈΡΠ° ΡΠΎ ΡΠΎΠ° ΡΡΠΎ ΠΏΡΠΎΡΠ΅ΡΠΈΡΠ΅ Π½Π° Π΄Π΅ΡΠ΅ Π½Π΅ Π·Π°Π²ΡΡΡΠ²Π°Π°Ρ ΠΈ ΠΎΡΡΠ°Π½ΡΠ²Π°Π°Ρ Π²ΠΎ ΡΡΠ°ΡΡΡ Π½Π° Π·ΠΎΠΌΠ±ΠΈ. ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠΎΡΠΈΡΠ°ΡΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅ Π·Π° ΡΠ΅ΡΠΎ ΠΎΠ²Π°, Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΠΎ
ΠΠΎΡΡΠΎΡΠ°Ρ Π½Π΅ΠΊΠΎΠ»ΠΊΡ Π½Π°ΡΠΈΠ½ΠΈ Π·Π° ΡΠ΅ΡΠ°Π²Π°ΡΠ΅ Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈΡΠ΅:
- ΠΠ°ΠΊΠΎ ΠΏΡΠΈΠ²ΡΠ΅ΠΌΠ΅Π½ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ - Π·Π³ΠΎΠ»Π΅ΠΌΠ΅ΡΠ΅ Π³ΠΎ Π±ΡΠΎΡΠΎΡ Π½Π° PID Π²ΠΎ ΡΠΈΡΡΠ΅ΠΌΠΎΡ Π²ΠΎ Π΅Π΄Π΅Π½ ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΠΎ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ:
/proc/sys/kernel/pid_max (since Linux 2.5.34) This file specifies the value at which PIDs wrap around (i.e., the value in this file is one greater than the maximum PID). PIDs greater than this value are not alloβ cated; thus, the value in this file also acts as a system-wide limit on the total number of processes and threads. The default value for this file, 32768, results in the same range of PIDs as on earlier kernels
- ΠΠ»ΠΈ ΡΡΠ°ΡΡΡΠ²Π°ΡΡΠ΅ Π·Π°Π΄Π°ΡΠΈ Π²ΠΎ ΡΡΠΏΠ΅ΡΠΊΡΠΎΠ½ΠΈΠΊ Π½Π΅ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ, ΡΡΠΊΡ ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ Π³ΠΎ ΠΈΡΡΠΎΡΠΎ
ΡΠΈΠ½ΠΈ , ΠΊΠΎΡ ΠΌΠΎΠΆΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ Π΄Π° Π³ΠΈ ΠΏΡΠ΅ΠΊΠΈΠ½Π΅ ΠΏΡΠΎΡΠ΅ΡΠΈΡΠ΅ ΠΈ Π΄Π° Π½Π΅ ΡΠΎΠ·Π΄Π°Π²Π° Π·ΠΎΠΌΠ±ΠΈ.
ΠΡΠΈΠΊΠ°Π·Π½Π° 2. βΠΠΎΠΌΠ±ΠΈβ ΠΏΡΠΈ Π±ΡΠΈΡΠ΅ΡΠ΅ Π½Π° cgroup
Kubelet ΠΏΠΎΡΠ½Π° Π΄Π° ΡΡΠΎΡΠΈ ΠΌΠ½ΠΎΠ³Ρ ΠΏΡΠΎΡΠ΅ΡΠΎΡ:
ΠΠ° Π½ΠΈΠΊΠΎΡ Π½Π΅ΠΌΠ° Π΄Π° ΠΌΡ ΡΠ΅ Π΄ΠΎΠΏΠ°Π΄Π½Π΅ ΠΎΠ²Π°, ΠΏΠ° ΡΠ΅ Π²ΠΎΠΎΡΡΠΆΠΈΠ²ΠΌΠ΅
- Kubelet ΡΡΠΎΡΠΈ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΎΠ΄ Π΅Π΄Π½Π° ΡΡΠ΅ΡΠΈΠ½Π° ΠΎΠ΄ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡΠΎΡ Π²Π»Π΅ΡΠ΅ΡΡΠΈ ΠΌΠ΅ΠΌΠΎΡΠΈΡΠΊΠΈ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΠΎΠ΄ ΡΠΈΡΠ΅ cΠ³ΡΡΠΏΠΈ:
- ΠΠΎ ΠΌΠ΅ΡΠ»ΠΈΠ½Π³ Π»ΠΈΡΡΠ°ΡΠ° Π½Π° ΡΠ°Π·Π²ΠΈΠ²Π°ΡΠΈΡΠ΅ Π½Π° ΠΊΠ΅ΡΠ½Π΅Π»ΠΎΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½Π°ΡΠ΄Π΅ΡΠ΅
Π΄ΠΈΡΠΊΡΡΠΈΡΠ° Π·Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΡ . ΠΠ°ΠΊΡΠ°ΡΠΊΠΎ, ΠΏΠΎΠ΅Π½ΡΠ°ΡΠ° ΡΠ΅ ΡΠ²Π΅Π΄ΡΠ²Π° Π½Π° ΠΎΠ²Π°: ΡΠ°Π·Π½ΠΈ tmpfs Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ ΠΈ Π΄ΡΡΠ³ΠΈ ΡΠ»ΠΈΡΠ½ΠΈ ΡΠ°Π±ΠΎΡΠΈ Π½Π΅ ΡΠ΅ ΡΠ΅Π»ΠΎΡΠ½ΠΎ ΠΎΡΡΡΡΠ°Π½Π΅ΡΠΈ ΠΎΠ΄ ΡΠΈΡΡΠ΅ΠΌΠΎΡ ΠΏΡΠΈ Π±ΡΠΈΡΠ΅ΡΠ΅ Π½Π° cgroup, Ρ.Π½memcg Π·ΠΎΠΌΠ±ΠΈ. ΠΠΎΡΠ°Π½ΠΎ ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΠΎΡΠ½Π° ΡΠΈΠ΅ ΡΠ΅ Π±ΠΈΠ΄Π°Ρ ΠΈΠ·Π±ΡΠΈΡΠ°Π½ΠΈ ΠΎΠ΄ ΠΊΠ΅ΡΠΎΡ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ°ΡΠ°, Π½ΠΎ ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³Ρ ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ° Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠΎΡ ΠΈ ΠΊΠ΅ΡΠ½Π΅Π»ΠΎΡ Π½Π΅ ΡΠ° Π³Π»Π΅Π΄Π° ΡΠΌΠΈΡΠ»Π°ΡΠ° Π²ΠΎ Π³ΡΠ±Π΅ΡΠ΅ΡΠΎ Π²ΡΠ΅ΠΌΠ΅ Π·Π° Π½ΠΈΠ²Π½ΠΎ Π±ΡΠΈΡΠ΅ΡΠ΅. ΠΠ°ΡΠΎΠ° ΠΏΠΎΡΡΠΎΡΠ°Π½ΠΎ ΡΠ΅ ΡΡΡΠΏΠ°Π°Ρ. ΠΠΎΡΡΠΎ Π²ΠΎΠΎΠΏΡΡΠΎ ΡΠ΅ ΡΠ»ΡΡΡΠ²Π° ΠΎΠ²Π°? ΠΠ²Π° Π΅ ΡΠ΅ΡΠ²Π΅Ρ ΡΠΎ cron jobs ΠΊΠΎΡ ΠΏΠΎΡΡΠΎΡΠ°Π½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π° Π½ΠΎΠ²ΠΈ ΡΠ°Π±ΠΎΡΠ½ΠΈ ΠΌΠ΅ΡΡΠ°, Π° ΡΠΎ Π½ΠΈΠ² ΠΈ Π½ΠΎΠ²ΠΈ ΠΏΠΎΠ΄ΠΎΠ²ΠΈ. Π’Π°ΠΊΠ°, ΡΠ΅ ΡΠΎΠ·Π΄Π°Π²Π°Π°Ρ Π½ΠΎΠ²ΠΈ cΠ³ΡΡΠΏΠΈ Π·Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΈΡΠ΅ Π²ΠΎ Π½ΠΈΠ², ΠΊΠΎΠΈ Π½Π°ΡΠΊΠΎΡΠΎ ΡΠ΅ Π±ΡΠΈΡΠ°Ρ. - ΠΠΎΡΡΠΎ cAdvisor Π²ΠΎ ΠΊΡΠ±Π΅Π»Π΅Ρ ΡΡΠΎΡΠΈ ΡΠΎΠ»ΠΊΡ ΠΌΠ½ΠΎΠ³Ρ Π²ΡΠ΅ΠΌΠ΅? ΠΠ²Π° Π΅ Π»Π΅ΡΠ½ΠΎ Π΄Π° ΡΠ΅ Π²ΠΈΠ΄ΠΈ ΡΠΎ Π½Π°ΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎΡΠΎ ΠΈΠ·Π²ΡΡΡΠ²Π°ΡΠ΅
time cat /sys/fs/cgroup/memory/memory.stat
. ΠΠΊΠΎ Π½Π° Π·Π΄ΡΠ°Π²Π° ΠΌΠ°ΡΠΈΠ½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΠ°ΡΠ° ΡΡΠ°Π΅ 0,01 ΡΠ΅ΠΊΡΠ½Π΄ΠΈ, ΡΠΎΠ³Π°Ρ Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°ΡΠΈΡΠ½ΠΈΠΎΡ cron02 ΡΡΠ°Π΅ 1,2 ΡΠ΅ΠΊΡΠ½Π΄ΠΈ. Π Π°Π±ΠΎΡΠ°ΡΠ° Π΅ ΡΡΠΎ cAdvisor, ΠΊΠΎΡ ΠΌΠ½ΠΎΠ³Ρ Π±Π°Π²Π½ΠΎ Π³ΠΈ ΡΠΈΡΠ° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅ ΠΎΠ΄ sysfs, ΡΠ΅ ΠΎΠ±ΠΈΠ΄ΡΠ²Π° Π΄Π° ΡΠ° Π·Π΅ΠΌΠ΅ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°ΡΠ° ΡΡΠΎ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π²ΠΎ Π·ΠΎΠΌΠ±ΠΈ cΠ³ΡΡΠΏΠΈΡΠ΅. - ΠΠ° Π½Π°ΡΠΈΠ»Π½ΠΎ ΠΎΡΡΡΡΠ°Π½ΡΠ²Π°ΡΠ΅ Π½Π° Π·ΠΎΠΌΠ±ΠΈ, ΡΠ΅ ΠΎΠ±ΠΈΠ΄ΠΎΠ²ΠΌΠ΅ Π΄Π° Π³ΠΈ ΠΈΡΡΠΈΡΡΠΈΠΌΠ΅ ΠΊΠ΅ΡΠΎΠ²ΠΈΡΠ΅ ΠΊΠ°ΠΊΠΎ ΡΡΠΎ Π΅ ΠΏΡΠ΅ΠΏΠΎΡΠ°ΡΠ°Π½ΠΎ Π²ΠΎ LKML:
sync; echo 3 > /proc/sys/vm/drop_caches
, - Π½ΠΎ ΡΠ°Π΄ΡΠΎΡΠΎ ΡΠ΅ ΠΏΠΎΠΊΠ°ΠΆΠ° ΠΏΠΎΠΊΠΎΠΌΠΏΠ»ΠΈΡΠΈΡΠ°Π½ΠΎ ΠΈ Π³ΠΎ ΡΡΠ½Π° Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»ΠΎΡ.
Π¨ΡΠΎ Π΄Π° ΡΠ΅ ΠΏΡΠ°Π²ΠΈ? ΠΡΠΎΠ±Π»Π΅ΠΌΠΎΡ ΡΠ΅ ΡΠ΅ΡΠ°Π²Π° (
ΠΡΡΠΎΡΠΈΡΠ° 3. Systemd ΠΈ Π½Π΅Π³ΠΎΠ²Π°ΡΠ° ΠΌΠΎΠ½ΡΠ°ΠΆΠ°
ΠΠΎΠ²ΡΠΎΡΠ½ΠΎ, kubelet ΡΡΠΎΡΠΈ ΠΏΡΠ΅ΠΌΠ½ΠΎΠ³Ρ ΡΠ΅ΡΡΡΡΠΈ Π½Π° Π½Π΅ΠΊΠΎΠΈ ΡΠ°Π·Π»ΠΈ, Π½ΠΎ ΠΎΠ²ΠΎΡ ΠΏΠ°Ρ ΡΡΠΎΡΠΈ ΠΏΡΠ΅ΠΌΠ½ΠΎΠ³Ρ ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°:
Π‘Π΅ ΠΈΡΠΏΠΎΡΡΠ°Π²ΠΈ Π΄Π΅ΠΊΠ° ΠΈΠΌΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌ Π²ΠΎ systemd ΡΡΠΎ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π²ΠΎ Ubuntu 16.04 ΠΈ ΡΠ΅ ΡΠ°Π²ΡΠ²Π° ΠΏΡΠΈ ΡΠΏΡΠ°Π²ΡΠ²Π°ΡΠ΅ ΡΠΎ ΠΌΠΎΠ½ΡΠΈΡΠ°ΡΠ° ΡΡΠΎ ΡΠ΅ ΡΠΎΠ·Π΄Π°Π΄Π΅Π½ΠΈ Π·Π° ΠΏΠΎΠ²ΡΠ·ΡΠ²Π°ΡΠ΅ subPath
ΠΎΠ΄ ConfigMaps ΠΈΠ»ΠΈ ΡΠ°ΡΠ½ΠΈ. ΠΡΠΊΠ°ΠΊΠΎ ΠΌΠ΅ΡΡΠ½ΠΊΠ°ΡΠ° ΡΠ΅ ΡΠ° Π·Π°Π²ΡΡΠΈ ΡΠ²ΠΎΡΠ°ΡΠ° ΡΠ°Π±ΠΎΡΠ° ΡΡΠ»ΡΠ³Π°ΡΠ° systemd ΠΈ Π½Π΅ΡΠ·ΠΈΠ½ΠΈΠΎΡ ΡΠ΅ΡΠ²ΠΈΡΠ΅Π½ ΠΌΠΎΠ½Ρ ΠΎΡΡΠ°Π½ΡΠ²Π°Π°Ρ Π²ΠΎ ΡΠΈΡΡΠ΅ΠΌΠΎΡ. Π‘ΠΎ ΡΠ΅ΠΊΠΎΡ Π½Π° Π²ΡΠ΅ΠΌΠ΅ΡΠΎ, ΠΎΠ³ΡΠΎΠΌΠ΅Π½ Π±ΡΠΎΡ ΠΎΠ΄ Π½ΠΈΠ² ΡΠ΅ Π°ΠΊΡΠΌΡΠ»ΠΈΡΠ°Π°Ρ. ΠΠΌΠ° Π΄ΡΡΠΈ ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ Π½Π° ΠΎΠ²Π°Π° ΡΠ΅ΠΌΠ°:
...ΠΏΠΎΡΠ»Π΅Π΄Π½Π°ΡΠ° ΠΎΠ΄ Π½ΠΈΠ² ΡΠ΅ ΠΎΠ΄Π½Π΅ΡΡΠ²Π° Π½Π° ΠΠ Π²ΠΎ ΡΠΈΡΡΠ΅ΠΌΠΎΡ:
ΠΡΠΎΠ±Π»Π΅ΠΌΠΎΡ ΠΏΠΎΠ²Π΅ΡΠ΅ Π½Π΅ ΠΏΠΎΡΡΠΎΠΈ Π²ΠΎ Ubuntu 18.04, Π½ΠΎ Π°ΠΊΠΎ ΡΠ°ΠΊΠ°ΡΠ΅ Π΄Π° ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΠ΅ Π΄Π° Π³ΠΎ ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ Ubuntu 16.04, ΠΌΠΎΠΆΠ΅Π±ΠΈ ΡΠ΅ Π²ΠΈ Π±ΠΈΠ΄Π΅ ΠΊΠΎΡΠΈΡΠ΅Π½ Π½Π°ΡΠΈΠΎΡ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π·Π° ΠΎΠ²Π°Π° ΡΠ΅ΠΌΠ°.
Π’Π°ΠΊΠ°, Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΠ²ΠΌΠ΅ ΡΠ»Π΅Π΄Π½ΠΈΠΎΠ² DaemonSet:
---
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
labels:
app: systemd-slices-cleaner
name: systemd-slices-cleaner
namespace: kube-system
spec:
updateStrategy:
type: RollingUpdate
selector:
matchLabels:
app: systemd-slices-cleaner
template:
metadata:
labels:
app: systemd-slices-cleaner
spec:
containers:
- command:
- /usr/local/bin/supercronic
- -json
- /app/crontab
Image: private-registry.org/systemd-slices-cleaner/systemd-slices-cleaner:v0.1.0
imagePullPolicy: Always
name: systemd-slices-cleaner
resources: {}
securityContext:
privileged: true
volumeMounts:
- name: systemd
mountPath: /run/systemd/private
- name: docker
mountPath: /run/docker.sock
- name: systemd-etc
mountPath: /etc/systemd
- name: systemd-run
mountPath: /run/systemd/system/
- name: lsb-release
mountPath: /etc/lsb-release-host
imagePullSecrets:
- name: antiopa-registry
priorityClassName: cluster-low
tolerations:
- operator: Exists
volumes:
- name: systemd
hostPath:
path: /run/systemd/private
- name: docker
hostPath:
path: /run/docker.sock
- name: systemd-etc
hostPath:
path: /etc/systemd
- name: systemd-run
hostPath:
path: /run/systemd/system/
- name: lsb-release
hostPath:
path: /etc/lsb-release
... ΠΈ ΡΠ° ΠΊΠΎΡΠΈΡΡΠΈ ΡΠ»Π΅Π΄Π½Π°ΡΠ° ΡΠΊΡΠΈΠΏΡΠ°:
#!/bin/bash
# we will work only on xenial
hostrelease="/etc/lsb-release-host"
test -f ${hostrelease} && grep xenial ${hostrelease} > /dev/null || exit 0
# sleeping max 30 minutes to dispense load on kube-nodes
sleep $((RANDOM % 1800))
stoppedCount=0
# counting actual subpath units in systemd
countBefore=$(systemctl list-units | grep subpath | grep "run-" | wc -l)
# let's go check each unit
for unit in $(systemctl list-units | grep subpath | grep "run-" | awk '{print $1}'); do
# finding description file for unit (to find out docker container, who born this unit)
DropFile=$(systemctl status ${unit} | grep Drop | awk -F': ' '{print $2}')
# reading uuid for docker container from description file
DockerContainerId=$(cat ${DropFile}/50-Description.conf | awk '{print $5}' | cut -d/ -f6)
# checking container status (running or not)
checkFlag=$(docker ps | grep -c ${DockerContainerId})
# if container not running, we will stop unit
if [[ ${checkFlag} -eq 0 ]]; then
echo "Stopping unit ${unit}"
# stoping unit in action
systemctl stop $unit
# just counter for logs
((stoppedCount++))
# logging current progress
echo "Stopped ${stoppedCount} systemd units out of ${countBefore}"
fi
done
... ΠΈ ΡΠ°Π±ΠΎΡΠΈ Π½Π° ΡΠ΅ΠΊΠΎΠΈ 5 ΠΌΠΈΠ½ΡΡΠΈ ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ Π³ΠΎ ΠΏΡΠ΅ΡΡ ΠΎΠ΄Π½ΠΎ ΡΠΏΠΎΠΌΠ΅Π½Π°ΡΠΈΠΎΡ ΡΡΠΏΠ΅ΡΠΊΡΠΎΠ½ΠΈΠΊ. ΠΠ΅ΡΠ·ΠΈΠ½Π°ΡΠ° Dockerfile ΠΈΠ·Π³Π»Π΅Π΄Π° Π²Π°ΠΊΠ°:
FROM ubuntu:16.04
COPY rootfs /
WORKDIR /app
RUN apt-get update &&
apt-get upgrade -y &&
apt-get install -y gnupg curl apt-transport-https software-properties-common wget
RUN add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu xenial stable" &&
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - &&
apt-get update &&
apt-get install -y docker-ce=17.03.0*
RUN wget https://github.com/aptible/supercronic/releases/download/v0.1.6/supercronic-linux-amd64 -O
/usr/local/bin/supercronic && chmod +x /usr/local/bin/supercronic
ENTRYPOINT ["/bin/bash", "-c", "/usr/local/bin/supercronic -json /app/crontab"]
ΠΡΠΈΠΊΠ°Π·Π½Π° 4. ΠΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠ½ΠΎΡΡ ΠΏΡΠΈ Π·Π°ΠΊΠ°ΠΆΡΠ²Π°ΡΠ΅ ΠΌΠ΅ΡΡΠ½ΠΊΠΈ
ΠΠ°Π±Π΅Π»Π΅ΠΆΠ°Π½ΠΎ Π΅ Π΄Π΅ΠΊΠ°: Π°ΠΊΠΎ ΠΈΠΌΠ°ΠΌΠ΅ ΠΌΠ΅ΡΡΠ½ΠΊΠ° ΠΏΠΎΡΡΠ°Π²Π΅Π½Π° Π½Π° ΡΠ°Π·ΠΎΠ» ΠΈ Π½Π΅ΡΠ·ΠΈΠ½Π°ΡΠ° ΡΠ»ΠΈΠΊΠ° ΡΠ΅ ΠΈΡΠΏΡΠΌΠΏΡΠ²Π° ΠΌΠ½ΠΎΠ³Ρ Π΄ΠΎΠ»Π³ΠΎ, ΡΠΎΠ³Π°Ρ Π΄ΡΡΠ³Π° ΠΌΠ΅ΡΡΠ½ΠΊΠ° ΡΡΠΎ Π³ΠΎ βΡΠ΄ΡΠΈβ ΠΈΡΡΠΈΠΎΡ ΡΠ°Π·ΠΎΠ» Π΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎ ΡΠ΅ Π½Π΅ ΠΏΠΎΡΠ½ΡΠ²Π° Π΄Π° ΡΠ° Π²Π»Π΅ΡΠ΅ ΡΠ»ΠΈΠΊΠ°ΡΠ° Π½Π° Π½ΠΎΠ²ΠΈΠΎΡ ΠΏΠΎΠ΄. ΠΠ°ΠΌΠ΅ΡΡΠΎ ΡΠΎΠ°, ΡΠ΅ΠΊΠ° Π΄ΠΎΠ΄Π΅ΠΊΠ° Π½Π΅ ΡΠ΅ ΠΏΠΎΠ²Π»Π΅ΡΠ΅ ΡΠ»ΠΈΠΊΠ°ΡΠ° ΠΎΠ΄ ΠΏΡΠ΅ΡΡ
ΠΎΠ΄Π½Π°ΡΠ° ΠΌΠ΅ΡΡΠ½ΠΊΠ°. ΠΠ°ΠΊΠΎ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π½Π° ΡΠΎΠ°, ΠΏΠΎΠ΄Π»ΠΎΠ³Π°ΡΠ° ΡΡΠΎ Π²Π΅ΡΠ΅ Π±ΠΈΠ»Π° Π·Π°ΠΊΠ°ΠΆΠ°Π½Π° ΠΈ ΡΠΈΡΠ° ΡΠ»ΠΈΠΊΠ° ΠΌΠΎΠΆΠ΅Π»Π° Π΄Π° ΡΠ΅ ΠΏΡΠ΅Π·Π΅ΠΌΠ΅ Π·Π° ΡΠ°ΠΌΠΎ Π΅Π΄Π½Π° ΠΌΠΈΠ½ΡΡΠ° ΡΠ΅ Π·Π°Π²ΡΡΠΈ Π²ΠΎ ΡΡΠ°ΡΡΡ Π½Π° containerCreating
.
ΠΠ°ΡΡΠ°Π½ΠΈΡΠ΅ ΡΠ΅ ΠΈΠ·Π³Π»Π΅Π΄Π°Π°Ρ ΠΎΡΠΏΡΠΈΠ»ΠΈΠΊΠ° Π²Π°ΠΊΠ°:
Normal Pulling 8m kubelet, ip-10-241-44-128.ap-northeast-1.compute.internal pulling image "registry.example.com/infra/openvpn/openvpn:master"
ΠΠ·Π»Π΅Π³ΡΠ²Π° Π΄Π΅ΠΊΠ° Π΅Π΄Π½Π° ΡΠ»ΠΈΠΊΠ° ΠΎΠ΄ Π±Π°Π²Π΅Π½ ΡΠ΅Π³ΠΈΡΡΠ°Ρ ΠΌΠΎΠΆΠ΅ Π΄Π° Π³ΠΎ Π±Π»ΠΎΠΊΠΈΡΠ° ΡΠ°ΡΠΏΠΎΡΠ΅Π΄ΡΠ²Π°ΡΠ΅ΡΠΎ ΠΏΠΎ ΡΠ°Π·ΠΎΠ».
ΠΠ° ΠΆΠ°Π», Π½Π΅ΠΌΠ° ΠΌΠ½ΠΎΠ³Ρ Π½Π°ΡΠΈΠ½ΠΈ Π·Π° ΠΈΠ·Π»Π΅Π· ΠΎΠ΄ ΡΠΈΡΡΠ°ΡΠΈΡΠ°ΡΠ°:
- ΠΠ±ΠΈΠ΄Π΅ΡΠ΅ ΡΠ΅ Π΄Π° Π³ΠΎ ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ Π²Π°ΡΠΈΠΎΡ Docker Registry Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ Π²ΠΎ ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΡ ΠΈΠ»ΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ ΡΠΎ ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΡ (Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, GitLab Registry, Nexus, ΠΈΡΠ½.);
- ΠΠΎΡΠΈΡΡΠ΅ΡΠ΅ ΠΊΠΎΠΌΡΠ½Π°Π»Π½ΠΈ ΡΡΠ»ΡΠ³ΠΈ ΠΊΠ°ΠΊΠΎ ΡΡΠΎ ΡΠ΅
kraken .
ΠΡΠΈΠΊΠ°Π·Π½Π° 5. ΠΠ°Π·Π»ΠΈΡΠ΅ Π²ΠΈΡΠ°Ρ ΠΏΠΎΡΠ°Π΄ΠΈ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΠΊ Π½Π° ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°
ΠΠ° Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΡΠ°Π±ΠΎΡΠ°ΡΠ° Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ, Π½Π°ΠΈΠ΄ΠΎΠ²ΠΌΠ΅ ΠΈ Π½Π° ΡΠΈΡΡΠ°ΡΠΈΡΠ° ΠΊΠΎΠ³Π° Π΅Π΄Π΅Π½ ΡΠ°Π·ΠΎΠ» ΡΠ΅Π»ΠΎΡΠ½ΠΎ ΠΏΡΠ΅ΡΡΠ°Π½ΡΠ²Π° Π΄Π° Π±ΠΈΠ΄Π΅ Π΄ΠΎΡΡΠ°ΠΏΠ΅Π½: SSH Π½Π΅ ΡΠ΅Π°Π³ΠΈΡΠ°, ΡΠΈΡΠ΅ Π΄Π΅ΠΌΠΎΠ½ΠΈ Π·Π° ΡΠ»Π΅Π΄Π΅ΡΠ΅ ΠΏΠ°ΡΠ°Π°Ρ, Π° ΠΏΠΎΡΠΎΠ° Π½Π΅ΠΌΠ° Π½ΠΈΡΡΠΎ (ΠΈΠ»ΠΈ ΡΠ΅ΡΠΈΡΠΈ Π½ΠΈΡΡΠΎ) Π½Π΅Π½ΠΎΡΠΌΠ°Π»Π½ΠΎ Π²ΠΎ Π΄Π½Π΅Π²Π½ΠΈΡΠΈΡΠ΅.
ΠΠ΅ Π²ΠΈ ΠΊΠ°ΠΆΠ°ΠΌ Π½Π° ΡΠ»ΠΈΠΊΠΈ ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ Π³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠΎΡ Π½Π° Π΅Π΄Π΅Π½ ΡΠ°Π·ΠΎΠ» ΠΊΠ°Π΄Π΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠ°ΡΠ΅ MongoDB.
ΠΠ°ΠΊΠ° ΠΈΠ·Π³Π»Π΅Π΄Π° Π½Π° Π²ΡΠ²ΠΎΡ Π΄Π° Π½Π΅ΡΡΠ΅ΡΠΈ:
Π Π²Π°ΠΊΠ° - ΠΏΠΎ Π½Π΅ΡΡΠ΅ΡΠΈ:
ΠΠΎ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³ΠΎΡ, ΠΏΠΎΡΡΠΎΠΈ ΠΈ ΠΎΡΡΠ°Ρ ΡΠΊΠΎΠΊ, ΠΏΡΠΈ ΠΊΠΎΡ ΡΠ°Π·ΠΎΠ»ΠΎΡ ΠΏΡΠ΅ΡΡΠ°Π½ΡΠ²Π° Π΄Π° Π±ΠΈΠ΄Π΅ Π΄ΠΎΡΡΠ°ΠΏΠ΅Π½:
Π’Π°ΠΊΠ°, ΠΎΠ΄ ΡΠ»ΠΈΠΊΠΈΡΠ΅ ΠΎΠ΄ Π΅ΠΊΡΠ°Π½ΠΎΡ Π΅ ΡΠ°ΡΠ½ΠΎ Π΄Π΅ΠΊΠ°:
- RAM ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°ΡΠ° Π½Π° ΠΌΠ°ΡΠΈΠ½Π°ΡΠ° Π΅ Π±Π»ΠΈΡΠΊΡ Π΄ΠΎ ΠΊΡΠ°ΡΠΎΡ;
- ΠΠΌΠ° ΠΎΡΡΠ°Ρ ΡΠΊΠΎΠΊ Π²ΠΎ ΠΏΠΎΡΡΠΎΡΡΠ²Π°ΡΠΊΠ°ΡΠ° Π½Π° RAM ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°, ΠΏΠΎ ΡΡΠΎ ΠΏΡΠΈΡΡΠ°ΠΏΠΎΡ Π΄ΠΎ ΡΠ΅Π»Π°ΡΠ° ΠΌΠ°ΡΠΈΠ½Π° Π΅ Π½Π°Π³Π»ΠΎ ΠΎΠ½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½;
- ΠΠΎΠ»Π΅ΠΌΠ° Π·Π°Π΄Π°ΡΠ° ΠΏΡΠΈΡΡΠΈΠ³Π½ΡΠ²Π° Π½Π° Mongo, ΡΡΠΎ Π³ΠΎ ΠΏΡΠΈΠ½ΡΠ΄ΡΠ²Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡ Π½Π° DBMS Π΄Π° ΠΊΠΎΡΠΈΡΡΠΈ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ° ΠΈ Π°ΠΊΡΠΈΠ²Π½ΠΎ Π΄Π° ΡΠΈΡΠ° ΠΎΠ΄ Π΄ΠΈΡΠΊΠΎΡ.
ΠΠ·Π»Π΅Π³ΡΠ²Π° Π΄Π΅ΠΊΠ° Π°ΠΊΠΎ ΠΠΈΠ½ΡΠΊΡ ΡΠ½Π΅ΠΌΠ° ΡΠ»ΠΎΠ±ΠΎΠ΄Π½Π° ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ° (ΠΏΡΠΈΡΠΈΡΠΎΠΊ Π²ΠΎ ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°ΡΠ° ΡΠ΅ ΠΏΠΎΡΡΠ°Π²ΡΠ²Π°) ΠΈ Π½Π΅ΠΌΠ° Π·Π°ΠΌΠ΅Π½Π°, ΡΠΎΠ³Π°Ρ Π΄Π° ΠΠΎΠ³Π° ΡΠ΅ ΠΏΡΠΈΡΡΠΈΠ³Π½Π΅ ΡΠ±ΠΈΠ΅ΡΠΎΡ Π½Π° OOM, ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄ΠΎΡΠ΄Π΅ Π΄ΠΎ Π±Π°Π»Π°Π½ΡΠΈΡΠ°ΡΠ΅ ΠΏΠΎΠΌΠ΅ΡΡ ΡΡΠ»Π°ΡΠ΅ ΡΡΡΠ°Π½ΠΈΡΠΈ Π²ΠΎ ΠΊΠ΅ΡΠΎΡ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠΈΡΠ΅ ΠΈ Π½ΠΈΠ²Π½ΠΎ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΠ΅ Π½Π°Π·Π°Π΄ Π½Π° Π΄ΠΈΡΠΊΠΎΡ. ΠΠ²Π° Π³ΠΎ ΠΏΡΠ°Π²ΠΈ kswapd, ΠΊΠΎΡ Ρ ΡΠ°Π±ΡΠΎ ΠΎΡΠ»ΠΎΠ±ΠΎΠ΄ΡΠ²Π° ΡΡΠΎ Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΌΠ΅ΠΌΠΎΡΠΈΡΠΊΠΈ ΡΡΡΠ°Π½ΠΈΡΠΈ Π·Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½Π° Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΡΠ°.
ΠΠ° ΠΆΠ°Π», ΡΠΎ Π³ΠΎΠ»Π΅ΠΌΠΎ Π/Π ΠΎΠΏΡΠΎΠ²Π°ΡΡΠ²Π°ΡΠ΅ Π·Π°Π΅Π΄Π½ΠΎ ΡΠΎ ΠΌΠ°Π»Π° ΠΊΠΎΠ»ΠΈΡΠΈΠ½Π° ΡΠ»ΠΎΠ±ΠΎΠ΄Π½Π° ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°, kswapd ΡΡΠ°Π½ΡΠ²Π° ΡΠ΅ΡΠ½ΠΎ Π³ΡΠ»ΠΎ Π½Π° ΡΠ΅Π»ΠΈΠΎΡ ΡΠΈΡΡΠ΅ΠΌ, Π·Π°ΡΠΎΠ° ΡΡΠΎ ΡΠ΅ Π²ΡΠ·Π°Π½ΠΈ Π·Π° ΡΠΎΠ° ΡΠΈΡΠ΅ Π°Π»ΠΎΠΊΠ°ΡΠΈΠΈ (Π³ΡΠ΅ΡΠΊΠΈ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠΈ) Π½Π° ΠΌΠ΅ΠΌΠΎΡΠΈΡΠΊΠΈ ΡΡΡΠ°Π½ΠΈΡΠΈ Π²ΠΎ ΡΠΈΡΡΠ΅ΠΌΠΎΡ. ΠΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΡΠ°Π΅ ΠΌΠ½ΠΎΠ³Ρ Π΄ΠΎΠ»Π³ΠΎ Π°ΠΊΠΎ ΠΏΡΠΎΡΠ΅ΡΠΈΡΠ΅ Π½Π΅ ΡΠ°ΠΊΠ°Π°Ρ ΠΏΠΎΠ²Π΅ΡΠ΅ Π΄Π° ΠΊΠΎΡΠΈΡΡΠ°Ρ ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°, ΡΡΠΊΡ ΡΠ΅ ΡΠΈΠΊΡΠΈΡΠ°Π½ΠΈ Π½Π° ΡΠ°ΠΌΠΈΠΎΡ ΡΠ°Π± Π½Π° Π±Π΅Π·Π΄Π½Π°ΡΠ° Π½Π° ΡΠ±ΠΈΠ΅ΡΠΎΡ Π½Π° OOM.
ΠΡΠΈΡΠΎΠ΄Π½ΠΎΡΠΎ ΠΏΡΠ°ΡΠ°ΡΠ΅ Π΅: Π·ΠΎΡΡΠΎ ΡΠ±ΠΈΠ΅ΡΠΎΡ Π½Π° ΠΠΠ Π΄ΠΎΠ°ΡΠ° ΡΠΎΠ»ΠΊΡ Π΄ΠΎΡΠ½Π°? ΠΠΎ ΡΠ²ΠΎΡΠ°ΡΠ° ΡΠ΅Π³Π°ΡΠ½Π° ΠΈΡΠ΅ΡΠ°ΡΠΈΡΠ°, ΡΠ±ΠΈΠ΅ΡΠΎΡ OOM Π΅ ΠΊΡΠ°ΡΠ½ΠΎ Π³Π»ΡΠΏΠ°Π²: ΡΠ΅ Π³ΠΎ ΡΠ±ΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΠΎΡ ΡΠ°ΠΌΠΎ ΠΊΠΎΠ³Π° ΠΎΠ±ΠΈΠ΄ΠΎΡ Π΄Π° ΡΠ΅ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΠΈ ΡΡΡΠ°Π½ΠΈΡΠ° Π·Π° ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ° Π½Π΅ ΡΡΠΏΠ΅Π΅, Ρ.Π΅. Π°ΠΊΠΎ Π³ΡΠ΅ΡΠΊΠ°ΡΠ° Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ°ΡΠ° Π½Π΅ ΡΡΠΏΠ΅Π΅. ΠΠ²Π° Π½Π΅ ΡΠ΅ ΡΠ»ΡΡΡΠ²Π° Π΄ΠΎΠ»Π³ΠΎ Π²ΡΠ΅ΠΌΠ΅, Π±ΠΈΠ΄Π΅ΡΡΠΈ kswapd Ρ
ΡΠ°Π±ΡΠΎ Π³ΠΈ ΠΎΡΠ»ΠΎΠ±ΠΎΠ΄ΡΠ²Π° ΠΌΠ΅ΠΌΠΎΡΠΈΡΠΊΠΈΡΠ΅ ΡΡΡΠ°Π½ΠΈΡΠΈ, ΡΡΠ»Π°ΡΡΠΈ Π³ΠΎ ΠΊΠ΅ΡΠΎΡ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ°ΡΠ° (Π²ΡΡΡΠ½ΠΎΡΡ, ΡΠ΅Π»ΠΈΠΎΡ Π²Π»Π΅Π·/ΠΈΠ·Π»Π΅Π· Π½Π° Π΄ΠΈΡΠΊΠΎΡ Π²ΠΎ ΡΠΈΡΡΠ΅ΠΌΠΎΡ) Π½Π°Π·Π°Π΄ Π½Π° Π΄ΠΈΡΠΊΠΎΡ. ΠΠΎΠ΄Π΅ΡΠ°Π»Π½ΠΎ, ΡΠΎ ΠΎΠΏΠΈΡ Π½Π° ΡΠ΅ΠΊΠΎΡΠΈΡΠ΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΈ Π·Π° ΠΎΡΡΡΡΠ°Π½ΡΠ²Π°ΡΠ΅ Π½Π° Π²Π°ΠΊΠ²ΠΈΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ Π²ΠΎ ΠΊΠ΅ΡΠ½Π΅Π»ΠΎΡ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠΎΡΠΈΡΠ°ΡΠ΅
ΠΠ²Π° ΠΎΠ΄Π½Π΅ΡΡΠ²Π°ΡΠ΅
ΠΡΠΈΠΊΠ°Π·Π½Π° 6. ΠΠ΅ΡΡΠ½ΠΊΠΈΡΠ΅ ΡΠ΅ Π·Π°Π³Π»Π°Π²ΡΠ²Π°Π°Ρ Π²ΠΎ ΡΠΎΡΡΠΎΡΠ±Π° Π½Π° ΡΠ΅ΠΊΠ°ΡΠ΅
ΠΠΎ Π½Π΅ΠΊΠΎΠΈ ΠΊΠ»Π°ΡΡΠ΅ΡΠΈ, Π²ΠΎ ΠΊΠΎΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠ°Π°Ρ Π½Π°Π²ΠΈΡΡΠΈΠ½Π° ΠΌΠ½ΠΎΠ³Ρ ΠΌΠ΅ΡΡΠ½ΠΊΠΈ, ΠΏΠΎΡΠ½Π°Π²ΠΌΠ΅ Π΄Π° Π·Π°Π±Π΅Π»Π΅ΠΆΡΠ²Π°ΠΌΠ΅ Π΄Π΅ΠΊΠ° ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΠΎΠ΄ Π½ΠΈΠ² βΠ²ΠΈΡΠ°Ρβ ΠΌΠ½ΠΎΠ³Ρ Π΄ΠΎΠ»Π³ΠΎ Π²ΠΎ Π΄ΡΠΆΠ°Π²Π°ΡΠ° Pending
, ΠΈΠ°ΠΊΠΎ ΡΠ°ΠΌΠΈΡΠ΅ Docker ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΈ Π²Π΅ΡΠ΅ ΡΠ°Π±ΠΎΡΠ°Ρ Π½Π° ΡΠ°Π·Π»ΠΈΡΠ΅ ΠΈ ΡΠΎ Π½ΠΈΠ² ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΡΠ°Π±ΠΎΡΠΈ ΡΠ°ΡΠ½ΠΎ.
ΠΠΎΠΊΡΠ°Ρ ΡΠΎΠ°, Π²ΠΎ describe
Π½Π΅ΠΌΠ° Π½ΠΈΡΡΠΎ Π»ΠΎΡΠΎ:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 1m default-scheduler Successfully assigned sphinx-0 to ss-dev-kub07
Normal SuccessfulAttachVolume 1m attachdetach-controller AttachVolume.Attach succeeded for volume "pvc-6aaad34f-ad10-11e8-a44c-52540035a73b"
Normal SuccessfulMountVolume 1m kubelet, ss-dev-kub07 MountVolume.SetUp succeeded for volume "sphinx-config"
Normal SuccessfulMountVolume 1m kubelet, ss-dev-kub07 MountVolume.SetUp succeeded for volume "default-token-fzcsf"
Normal SuccessfulMountVolume 49s (x2 over 51s) kubelet, ss-dev-kub07 MountVolume.SetUp succeeded for volume "pvc-6aaad34f-ad10-11e8-a44c-52540035a73b"
Normal Pulled 43s kubelet, ss-dev-kub07 Container image "registry.example.com/infra/sphinx-exporter/sphinx-indexer:v1" already present on machine
Normal Created 43s kubelet, ss-dev-kub07 Created container
Normal Started 43s kubelet, ss-dev-kub07 Started container
Normal Pulled 43s kubelet, ss-dev-kub07 Container image "registry.example.com/infra/sphinx/sphinx:v1" already present on machine
Normal Created 42s kubelet, ss-dev-kub07 Created container
Normal Started 42s kubelet, ss-dev-kub07 Started container
ΠΠΎ Π½Π΅ΠΊΠΎΠ΅ ΠΊΠΎΠΏΠ°ΡΠ΅, Π½Π°ΠΏΡΠ°Π²ΠΈΠ²ΠΌΠ΅ ΠΏΡΠ΅ΡΠΏΠΎΡΡΠ°Π²ΠΊΠ° Π΄Π΅ΠΊΠ° ΠΊΡΠ±Π΅Π»Π΅ΡΠΎΡ Π΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎ Π½Π΅ΠΌΠ° Π²ΡΠ΅ΠΌΠ΅ Π΄Π° Π³ΠΈ ΠΈΡΠΏΡΠ°ΡΠΈ ΡΠΈΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π·Π° ΡΠΎΡΡΠΎΡΠ±Π°ΡΠ° Π½Π° ΠΌΠ΅ΡΡΠ½ΠΊΠΈΡΠ΅ ΠΈ ΡΠ΅ΡΡΠΎΠ²ΠΈΡΠ΅ Π·Π° ΠΆΠΈΠ²ΠΎΡΡ/ΠΏΠΎΠ΄Π³ΠΎΡΠ²Π΅Π½ΠΎΡΡ Π΄ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠΎΡ API.
Π ΠΎΡΠΊΠ°ΠΊΠΎ ΡΠ° ΠΏΡΠΎΡΡΡΠ²Π°Π²ΠΌΠ΅ ΠΏΠΎΠΌΠΎΡΡΠ°, Π³ΠΈ Π½Π°ΡΠ΄ΠΎΠ²ΠΌΠ΅ ΡΠ»Π΅Π΄Π½ΠΈΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ:
--kube-api-qps - QPS to use while talking with kubernetes apiserver (default 5)
--kube-api-burst - Burst to use while talking with kubernetes apiserver (default 10)
--event-qps - If > 0, limit event creations per second to this value. If 0, unlimited. (default 5)
--event-burst - Maximum size of a bursty event records, temporarily allows event records to burst to this number, while still not exceeding event-qps. Only used if --event-qps > 0 (default 10)
--registry-qps - If > 0, limit registry pull QPS to this value.
--registry-burst - Maximum size of bursty pulls, temporarily allows pulls to burst to this number, while still not exceeding registry-qps. Only used if --registry-qps > 0 (default 10)
ΠΠ°ΠΊΠΎ ΡΡΠΎ ΡΠ΅ Π³Π»Π΅Π΄Π°, ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΈΡΠ΅ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ ΡΠ΅ ΠΏΡΠΈΠ»ΠΈΡΠ½ΠΎ ΠΌΠ°Π»ΠΈ, Π° Π²ΠΎ 90% Π³ΠΈ ΠΏΠΎΠΊΡΠΈΠ²Π°Π°Ρ ΡΠΈΡΠ΅ ΠΏΠΎΡΡΠ΅Π±ΠΈ... ΠΠ΅ΡΡΡΠΎΠ°, Π²ΠΎ Π½Π°ΡΠΈΠΎΡ ΡΠ»ΡΡΠ°Ρ ΡΠΎΠ° Π½Π΅ Π±Π΅ΡΠ΅ Π΄ΠΎΠ²ΠΎΠ»Π½ΠΎ. ΠΠ°ΡΠΎΠ°, Π³ΠΈ ΠΏΠΎΡΡΠ°Π²ΡΠ²Π°ΠΌΠ΅ ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ:
--event-qps=30 --event-burst=40 --kube-api-burst=40 --kube-api-qps=30 --registry-qps=30 --registry-burst=40
... ΠΈ Π³ΠΈ ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°Π²ΠΌΠ΅ kubelets, ΠΏΠΎ ΡΡΠΎ ΡΠ° Π²ΠΈΠ΄ΠΎΠ²ΠΌΠ΅ ΡΠ»Π΅Π΄Π½Π°ΡΠ° ΡΠ»ΠΈΠΊΠ° Π²ΠΎ Π³ΡΠ°ΡΠΈΠΊΠΎΠ½ΠΈΡΠ΅ Π½Π° ΠΏΠΎΠ²ΠΈΡΠΈΡΠ΅ Π΄ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠΎΡ API:
... ΠΈ Π΄Π°, ΡΓ¨ ΠΏΠΎΡΠ½Π° Π΄Π° Π»Π΅ΡΠ°!
PS
ΠΠ° Π½ΠΈΠ²Π½Π°ΡΠ° ΠΏΠΎΠΌΠΎΡ Π²ΠΎ ΡΠΎΠ±ΠΈΡΠ°ΡΠ΅ΡΠΎ Π³ΡΠ΅ΡΠΊΠΈ ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ°ΡΠ° Π½Π° ΠΎΠ²ΠΎΡ Π½Π°ΠΏΠΈΡ, ΠΈΠ·ΡΠ°Π·ΡΠ²Π°ΠΌ Π΄Π»Π°Π±ΠΎΠΊΠ° Π±Π»Π°Π³ΠΎΠ΄Π°ΡΠ½ΠΎΡΡ Π΄ΠΎ Π±ΡΠΎΡΠ½ΠΈΡΠ΅ ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΠΈ Π½Π° Π½Π°ΡΠ°ΡΠ° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡΠ°, Π° ΠΎΡΠΎΠ±Π΅Π½ΠΎ Π΄ΠΎ ΠΌΠΎΡΠΎΡ ΠΊΠΎΠ»Π΅Π³Π° ΠΎΠ΄ Π½Π°ΡΠΈΠΎΡ ΡΠΈΠΌ Π·Π° ΠΈΡΡΡΠ°ΠΆΡΠ²Π°ΡΠ΅ ΠΈ ΡΠ°Π·Π²ΠΎΡ ΠΠ½Π΄ΡΠ΅Ρ ΠΠ»ΠΈΠΌΠ΅Π½ΡΡΠ΅Π² (
PPS
ΠΡΠΎΡΠΈΡΠ°ΡΡΠ΅ ΠΈ Π½Π° Π½Π°ΡΠΈΠΎΡ Π±Π»ΠΎΠ³:
- Β«
ΠΏΡΠΈΠΊΠ»ΡΡΠΎΠΊ kubectl-debug Π·Π° Π΄Π΅Π±Π°Π³ΠΈΡΠ°ΡΠ΅ Π²ΠΎ pods Π½Π° Kubernetes ". - ΠΠ°ΠΌΠΊΠ° Π·Π° ΡΠΎΠ²Π΅ΡΠΈ ΠΈ ΡΡΠΈΠΊΠΎΠ²ΠΈ Π½Π° Kubernetes:
- Β«
ΠΡΠ΅Π½Π΅ΡΡΠ²Π°ΡΠ΅ Π½Π° ΡΠ΅ΡΡΡΡΠΈ ΠΊΠΎΠΈ ΡΠ°Π±ΠΎΡΠ°Ρ Π²ΠΎ ΠΊΠ»Π°ΡΡΠ΅Ρ Π΄ΠΎ ΡΠΏΡΠ°Π²ΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° Helm 2 "; - Β«
ΠΠ° ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π±Π°ΡΠ° Π½Π° ΡΠ°Π·Π»ΠΈΡΠ΅ ΠΈ Π²ΡΠΈΡΡΠ²Π°ΡΠ°ΡΠ° Π½Π° Π²Π΅Π±-Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ° "; - Β«
ΠΡΠΈΡΡΠ°ΠΏ Π΄ΠΎ Π²Π΅Π±-Π»ΠΎΠΊΠ°ΡΠΈΠΈ Π·Π° ΡΠ°Π·Π²ΠΎΡ "; - Β«
ΠΠ°Π±ΡΠ·ΡΠ²Π°ΡΠ΅ Π½Π° bootstrap Π·Π° Π³ΠΎΠ»Π΅ΠΌΠΈ Π±Π°Π·ΠΈ Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ".
- Β«
ΠΠ·Π²ΠΎΡ: www.habr.com