Kubernetes рдХреЛ рд╕рдЮреНрдЪрд╛рд▓рдирдорд╛ 6 рдордиреЛрд░рдЮреНрдЬрди рдкреНрд░рдгрд╛рд▓реА рдмрдЧрд╣рд░реВ [рд░ рддрд┐рдиреАрд╣рд░реВрдХреЛ рд╕рдорд╛рдзрд╛рди]

Kubernetes рдХреЛ рд╕рдЮреНрдЪрд╛рд▓рдирдорд╛ 6 рдордиреЛрд░рдЮреНрдЬрди рдкреНрд░рдгрд╛рд▓реА рдмрдЧрд╣рд░реВ [рд░ рддрд┐рдиреАрд╣рд░реВрдХреЛ рд╕рдорд╛рдзрд╛рди]

рдЙрддреНрдкрд╛рджрдирдорд╛ Kubernetes рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрдХреЛ рд╡рд░реНрд╖рд╣рд░реВрдорд╛, рд╣рд╛рдореАрд▓реЗ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдгрд╛рд▓реА рдХрдореНрдкреЛрдиреЗрдиреНрдЯрд╣рд░реВрдорд╛ рдмрдЧрд╣рд░реВрд▓реЗ рдХрд╕рд░реА рдХрдиреНрдЯреЗрдирд░ рд░ рдкреЛрдбрд╣рд░реВрдХреЛ рд╕рдЮреНрдЪрд╛рд▓рдирд▓рд╛рдИ рдЕрд╕рд░ рдЧрд░реНрдиреЗ рдЕрдкреНрд░рд┐рдп рд░/рд╡рд╛ рдмреБрдЭреНрди рдирд╕рдХрд┐рдиреЗ рдкрд░рд┐рдгрд╛рдорд╣рд░реВ рдирд┐рдореНрддреНрдпрд╛рдпреЛ рднрдиреНрдиреЗ рдмрд╛рд░реЗ рдзреЗрд░реИ рд░реЛрдЪрдХ рдХрдерд╛рд╣рд░реВ рд╕рдВрдХрд▓рди рдЧрд░реЗрдХрд╛ рдЫреМрдВред рдпрд╕ рд▓реЗрдЦрдорд╛ рд╣рд╛рдореАрд▓реЗ рдХреЗрд╣рд┐ рд╕рдмреИрднрдиреНрджрд╛ рд╕рд╛рдорд╛рдиреНрдп рд╡рд╛ рдЪрд╛рдЦрд▓рд╛рдЧреНрджреЛ рд╡реНрдпрдХреНрддрд┐рд╣рд░реВрдХреЛ рдЪрдпрди рдЧрд░реЗрдХрд╛ рдЫреМрдВред рдпрджрд┐ рддрдкрд╛рдЗрдБ рддреНрдпрд╕реНрддрд╛ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рд╣рд░реВрдХреЛ рд╕рд╛рдордирд╛ рдЧрд░реНрди рдкрд░реНрдпрд╛рдкреНрдд рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рд╣реБрдиреБрд╣реБрдиреНрди рднрдиреЗ рдкрдирд┐, рддреНрдпрд╕реНрддрд╛ рдЫреЛрдЯреЛ рдЬрд╛рд╕реВрд╕реА рдХрдерд╛рд╣рд░реВ рдкрдвреНрдиреЗ - рд╡рд┐рд╢реЗрд╖ рдЧрд░реА "рдкрд╣рд┐рд▓реЛ рд╣рд╛рдд" - рд╕рдзреИрдВ рд░реЛрдЪрдХ рдЫ, рд╣реИрди?

рдХрдерд╛ рез. рд╕реБрдкрд░рдХреНрд░реЛрдирд┐рдХ рд░ рдбрдХрд░ рд╣реНрдпрд╛рдЩреНрдЧрд┐рдЩ

рдПрдЙрдЯрд╛ рдХреНрд▓рд╕реНрдЯрд░рдорд╛, рд╣рд╛рдореАрд▓реЗ рдЖрд╡рдзрд┐рдХ рд░реВрдкрдорд╛ рдЬрдореЗрдХреЛ рдбрдХрд░ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдпреМрдВ, рдЬрд╕рд▓реЗ рдХреНрд▓рд╕реНрдЯрд░рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдпрдорд╛ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдЧрд░реНтАНрдпреЛред рдПрдХреИ рд╕рдордпрдорд╛, рдбрдХрд░ рд▓рдЧрд╣рд░реВрдорд╛ рдирд┐рдореНрди рдЕрд╡рд▓реЛрдХрди рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ:

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ред рджреНрд░реБрдд рдЕрдзреНрдпрдпрди рдХрд╛рдЧрдЬрд╛рдд рдбрдХрд░рд▓реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛рд▓рд╛рдИ рдлреЛрд░реНрдХ рдЧрд░реНрди рд╕рдХреНрджреИрди рднрдиреЗрд░ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдЧрд░реНтАНрдпреЛ, рддреНрдпрд╕реИрд▓реЗ рдпреЛ рдЖрд╡рдзрд┐рдХ рд░реВрдкрдорд╛ рдЬрдореЗрдХреЛ рдерд┐рдпреЛред

рдЕрдиреБрдЧрдордирдорд╛, рдирд┐рдореНрди рдЪрд┐рддреНрд░ рдХреЗ рднрдЗрд░рд╣реЗрдХреЛ рдЫ рд╕рдВрдЧ рдореЗрд▓ рдЦрд╛рдиреНрдЫ:

Kubernetes рдХреЛ рд╕рдЮреНрдЪрд╛рд▓рдирдорд╛ 6 рдордиреЛрд░рдЮреНрдЬрди рдкреНрд░рдгрд╛рд▓реА рдмрдЧрд╣рд░реВ [рд░ рддрд┐рдиреАрд╣рд░реВрдХреЛ рд╕рдорд╛рдзрд╛рди]

рдпрд╕реНрддреИ рдЕрд╡рд╕реНрдерд╛ рдЕрдиреНрдп рдиреЛрдбрд╣рд░реВрдорд╛ рдЕрд╡рд▓реЛрдХрди рдЧрд░рд┐рдПрдХреЛ рдЫ:

Kubernetes рдХреЛ рд╕рдЮреНрдЪрд╛рд▓рдирдорд╛ 6 рдордиреЛрд░рдЮреНрдЬрди рдкреНрд░рдгрд╛рд▓реА рдмрдЧрд╣рд░реВ [рд░ рддрд┐рдиреАрд╣рд░реВрдХреЛ рд╕рдорд╛рдзрд╛рди]

Kubernetes рдХреЛ рд╕рдЮреНрдЪрд╛рд▓рдирдорд╛ 6 рдордиреЛрд░рдЮреНрдЬрди рдкреНрд░рдгрд╛рд▓реА рдмрдЧрд╣рд░реВ [рд░ рддрд┐рдиреАрд╣рд░реВрдХреЛ рд╕рдорд╛рдзрд╛рди]

рдПрдЙрдЯреИ рдиреЛрдбрд╣рд░реВрдорд╛ рд╣рд╛рдореА рджреЗрдЦреНрдЫреМрдВ:

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>
тАж

рд╕рдорд╕реНрдпрд╛ рдпреЛ рд╣реЛ: рдЬрдм рдХреБрдиреИ рдХрд╛рд░реНрдп рд╕реБрдкрд░рдХреНрд░реЛрдирд┐рдХрдорд╛ рдЪрд▓рд╛рдЗрдиреНрдЫ, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдпрд╕рдХреЛ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рд╣реБрдиреНрдЫ рд╕рд╣реА рддрд░рд┐рдХрд╛рд▓реЗ рд╕рдорд╛рдкреНрдд рдЧрд░реНрди рд╕рдХреНрджреИрди, рдорд╛ рдкрд░рд┐рдгрдд рдЬреЛрдореНрдмреА.

рднрдиреНрдиреБ: рдердк рд╕рдЯреАрдХ рд╣реБрдирдХреЛ рд▓рд╛рдЧрд┐, рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВ рдХреНрд░реЛрди рдХрд╛рд░реНрдпрд╣рд░реВрджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рд╣реБрдиреНрдЫрдиреН, рддрд░ рд╕реБрдкрд░рдХреНрд░реЛрдирд┐рдХ рдПрдХ рдкреНрд░рд╛рд░рдореНрднрд┐рдХ рдкреНрд░рдгрд╛рд▓реА рд╣реЛрдЗрди рд░ рдпрд╕рдХрд╛ рдмрдЪреНрдЪрд╛рд╣рд░реВрд▓реЗ рдЬрдиреНрдорд╛рдПрдХреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВрд▓рд╛рдИ "рдЕрдкрдирд╛рдЙрди" рд╕рдХреНрджреИрдиред рдЬрдм SIGHUP рд╡рд╛ SIGTERM рд╕рдВрдХреЗрддрд╣рд░реВ рдЙрдард╛рдЗрдиреНрдЫ, рддрд┐рдиреАрд╣рд░реВ рдмрд╛рд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВрдорд╛ рд╣рд╕реНрддрд╛рдиреНрддрд░рдг рд╣реБрдБрджреИрдирдиреН, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдмрд╛рд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВ рд╕рдорд╛рдкреНрдд рд╣реБрдБрджреИрдирдиреН рд░ рдЬреЛрдореНрдмреА рд╕реНрдерд┐рддрд┐рдорд╛ рд░рд╣рдиреНрдЫрдиреНред рддрдкрд╛рдИрдВ рдпреА рд╕рдмреИ рдмрд╛рд░реЗ рдердк рдкрдвреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдорд╛ рдпрд╕реНрддреЛ рд▓реЗрдЦ.

рддреНрдпрд╣рд╛рдБ рд╕рдорд╕реНрдпрд╛рд╣рд░реВ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрди рдХреЗрд╣реА рддрд░рд┐рдХрд╛рд╣рд░реВ рдЫрдиреН:

  1. рдЕрд╕реНрдерд╛рдпреА рд╕рдорд╛рдзрд╛рдирдХреЛ рд░реВрдкрдорд╛ - рд╕рдордпрдХреЛ рдПрдХрд▓ рдмрд┐рдиреНрджреБрдорд╛ рдкреНрд░рдгрд╛рд▓реАрдорд╛ 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. рд╡рд╛ рд╕реБрдкрд░рдХреНрд░реЛрдирд┐рдХрдорд╛ рдХрд╛рд░реНрдпрд╣рд░реВ рд╕реБрд░реВ рдЧрд░реНрдиреБрд╣реЛрд╕реН рд╕реАрдзрд╛ рд╣реЛрдЗрди, рддрд░ рд╕рдорд╛рди рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдЯрд┐рдиреА, рдЬрд╕рд▓реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВ рд╕рд╣реА рд░реВрдкрдорд╛ рд╕рдорд╛рдкреНрдд рдЧрд░реНрди рд╕рдХреНрд╖рдо рдЫ рд░ рдЬреЛрдореНрдмреАрд╣рд░реВ рд╕реНрдкреНрдпрд╛рди рдЧрд░реНрджреИрдиред

рдХрдерд╛ 2. cgroup рдореЗрдЯрд╛рдЙрдБрджрд╛ "Zombies"

рдХреБрдмреЗрд▓реЗрдЯрд▓реЗ рдзреЗрд░реИ CPU рдЙрдкрднреЛрдЧ рдЧрд░реНрди рдерд╛рд▓реНрдпреЛ:

Kubernetes рдХреЛ рд╕рдЮреНрдЪрд╛рд▓рдирдорд╛ 6 рдордиреЛрд░рдЮреНрдЬрди рдкреНрд░рдгрд╛рд▓реА рдмрдЧрд╣рд░реВ [рд░ рддрд┐рдиреАрд╣рд░реВрдХреЛ рд╕рдорд╛рдзрд╛рди]

рдпреЛ рдХрд╕реИрд▓рд╛рдИ рдорди рдкрд░реНрджреИрди, рддреНрдпрд╕реИрд▓реЗ рд╣рд╛рдореАрд▓реЗ рдЖрдлреИрд▓рд╛рдИ рд╕рд╢рд╕реНрддреНрд░ рдмрдирд╛рдпреМрдВ perf рд░ рд╕рдорд╕реНрдпрд╛ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрди рдерд╛рд▓реЗред рдЕрдиреБрд╕рдиреНрдзрд╛рдирдХреЛ рдирддрд┐рдЬрд╛ рдпрд╕ рдкреНрд░рдХрд╛рд░ рдерд┐рдпреЛ:

  • рдХреБрдмреЗрд▓реЗрдЯрд▓реЗ рдЖрдлреНрдиреЛ CPU рд╕рдордпрдХреЛ рдПрдХ рддрд┐рд╣рд╛рдЗ рднрдиреНрджрд╛ рдмрдвреА рд╕рдордп рд╕рдмреИ cgroups рдмрд╛рдЯ рдореЗрдореЛрд░реА рдбреЗрдЯрд╛ рддрд╛рдиреНрди рдЦрд░реНрдЪ рдЧрд░реНрджрдЫ:

    Kubernetes рдХреЛ рд╕рдЮреНрдЪрд╛рд▓рдирдорд╛ 6 рдордиреЛрд░рдЮреНрдЬрди рдкреНрд░рдгрд╛рд▓реА рдмрдЧрд╣рд░реВ [рд░ рддрд┐рдиреАрд╣рд░реВрдХреЛ рд╕рдорд╛рдзрд╛рди]

  • рдХрд░реНрдиреЗрд▓ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВрдХреЛ рдореЗрд▓рд┐рдЩ рд╕реВрдЪреАрдорд╛ рддрдкрд╛рдИрдВрд▓реЗ рдлреЗрд▓рд╛ рдкрд╛рд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рд╕рдорд╕реНрдпрд╛рдХреЛ рдЪрд░реНрдЪрд╛ред рдЫреЛрдЯрдХрд░реАрдорд╛, рдмрд┐рдиреНрджреБ рдпрд╣рд╛рдБ рддрд▓ рдЖрдЙрдБрдЫ: рд╡рд┐рднрд┐рдиреНрди tmpfs рдлрд╛рдЗрд▓рд╣рд░реВ рд░ рдЕрдиреНрдп рд╕рдорд╛рди рдЪреАрдЬрд╣рд░реВ рдкреНрд░рдгрд╛рд▓реАрдмрд╛рдЯ рдкреВрд░реНрдг рд░реВрдкрдорд╛ рд╣рдЯрд╛рдЗрдПрдХреЛ рдЫреИрди cgroup рдореЗрдЯрд╛рдЙрдБрджрд╛, рддрдерд╛рдХрдерд┐рдд memcg рдкреНрд░реЗрддред рдврд┐рд▓реЛ рд╡рд╛ рдЪрд╛рдБрдбреЛ рддрд┐рдиреАрд╣рд░реВ рдкреГрд╖реНрда рдХреНрдпрд╛рд╕рдмрд╛рдЯ рдореЗрдЯрд┐рдиреЗрдЫрдиреН, рддрд░ рд╕рд░реНрднрд░рдорд╛ рдзреЗрд░реИ рдореЗрдореЛрд░реА рдЫ рд░ рдХрд░реНрдиреЗрд▓рд▓реЗ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдореЗрдЯрд╛рдЙрдирдХреЛ рд▓рд╛рдЧрд┐ рд╕рдордп рдмрд░реНрдмрд╛рдж рдЧрд░реНрдиреЗ рдмрд┐рдиреНрджреБ рджреЗрдЦреНрджреИрдиред рддреНрдпрд╣реА рднрдПрд░ рдЙрдиреАрд╣рд░реБ рдЬрдореНрдорд╛ рднрдЗрд░рд╣реЗрдХрд╛ рдЫрдиреН ред рдпрд╕реНрддреЛ рдкрдирд┐ рдХрд┐рди рднрдЗрд░рд╣реЗрдХреЛ рдЫ ? рдпреЛ рдХреНрд░реЛрди рдХрд╛рд░реНрдпрд╣рд░реВ рднрдПрдХреЛ рд╕рд░реНрднрд░ рд╣реЛ рдЬрд╕рд▓реЗ рд▓рдЧрд╛рддрд╛рд░ рдирдпрд╛рдБ рд░реЛрдЬрдЧрд╛рд░рд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджрдЫ, рд░ рддрд┐рдиреАрд╣рд░реВрд╕рдБрдЧ рдирдпрд╛рдБ рдкреЛрдбрд╣рд░реВред рдпрд╕рд░реА, рдирдпрд╛рдБ cgroups рддрд┐рдиреАрд╣рд░реВрдорд╛ рдХрдиреНрдЯреЗрдирд░рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдиреНрдЫ, рдЬреБрди рдЪрд╛рдБрдбреИ рдореЗрдЯрд╛рдЗрдиреНрдЫред
  • рдХреБрдмреЗрд▓реЗрдЯрдорд╛ рд╕реАрдПрдбрднрд╛рдЗрдЬрд░рд▓реЗ рдХрд┐рди рдпрддрд┐ рдзреЗрд░реИ рд╕рдордп рдмрд░реНрдмрд╛рдж рдЧрд░реНрдЫ? рдпреЛ рд╕рд░рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рдВрдЧ рд╣реЗрд░реНрди рд╕рдЬрд┐рд▓реЛ рдЫ time cat /sys/fs/cgroup/memory/memory.statред рдпрджрд┐ рд╕реНрд╡рд╕реНрде рдореЗрд╕рд┐рдирдорд╛ рдЕрдкрд░реЗрд╢рдирд▓реЗ реж.режрез рд╕реЗрдХреЗрдиреНрдб рд▓рд┐рдиреНрдЫ рднрдиреЗ, рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рдХреНрд░реЛрдирежреи рдорд╛ рез.реи рд╕реЗрдХреЗрдиреНрдб рд▓рд╛рдЧреНрдЫред рдХреБрд░рд╛ рдпреЛ рд╣реЛ рдХрд┐ cAdvisor, рдЬрд╕рд▓реЗ sysfs рдмрд╛рдЯ рдбрд╛рдЯрд╛ рдзреЗрд░реИ рдмрд┐рд╕реНрддрд╛рд░реИ рдкрдвреНрдЫ, zombie cgroups рдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдПрдХреЛ рдореЗрдореЛрд░реАрд▓рд╛рдИ рдзреНрдпрд╛рдирдорд╛ рд░рд╛рдЦреНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрджрдЫред
  • рдмрд▓рдкреВрд░реНрд╡рдХ рдЬреЛрдореНрдмреАрд╣рд░реВ рд╣рдЯрд╛рдЙрди, рд╣рд╛рдореАрд▓реЗ LKML рдорд╛ рд╕рд┐рдлрд╛рд░рд┐рд╕ рдЧрд░реЗ рдЕрдиреБрд╕рд╛рд░ рдХреНрдпрд╛рд╕рд╣рд░реВ рдЦрд╛рд▓реА рдЧрд░реНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдпреМрдВ: sync; echo 3 > /proc/sys/vm/drop_caches, - рддрд░ рдХрд░реНрдиреЗрд▓ рдердк рдЬрдЯрд┐рд▓ рднрдпреЛ рд░ рдХрд╛рд░ рджреБрд░реНрдШрдЯрдирд╛ рднрдпреЛред

рдХреЗ рдЧрд░реНрдиреЗ? рд╕рдорд╕реНрдпрд╛ рд╕рдорд╛рдзрд╛рди рднрдЗрд░рд╣реЗрдХреЛ рдЫ (рдкреНрд░рддрд┐рдмрджреНрдзрд░ рд╡рд┐рд╡рд░рдгрдХреЛ рд▓рд╛рдЧрд┐ рд╣реЗрд░реНрдиреБрд╣реЛрд╕реН рд╕рдиреНрджреЗрд╢ рдЬрд╛рд░реА рдЧрд░реНрдиреБрд╣реЛрд╕реНрд▓рд┐рдирдХреНрд╕ рдХрд░реНрдиреЗрд▓рд▓рд╛рдИ рд╕рдВрд╕реНрдХрд░рдг рек.резрем рдорд╛ рдЕрджреНрдпрд╛рд╡рдзрд┐рдХ рдЧрд░реНрджреИред

рдЗрддрд┐рд╣рд╛рд╕ 3. Systemd рд░ рдпрд╕рдХреЛ рдорд╛рдЙрдиреНрдЯ

рдлреЗрд░рд┐, рдХреБрдмреЗрд▓реЗрдЯрд▓реЗ рдХреЗрд╣реА рдиреЛрдбрд╣рд░реВрдорд╛ рдзреЗрд░реИ рд╕реНрд░реЛрддрд╣рд░реВ рдЦрдкрдд рдЧрд░рд┐рд░рд╣реЗрдХреЛ рдЫ, рддрд░ рдпрд╕ рдкрдЯрдХ рдпрд╕рд▓реЗ рдзреЗрд░реИ рдореЗрдореЛрд░реА рдЦрдкрдд рдЧрд░рд┐рд░рд╣реЗрдХреЛ рдЫ:

Kubernetes рдХреЛ рд╕рдЮреНрдЪрд╛рд▓рдирдорд╛ 6 рдордиреЛрд░рдЮреНрдЬрди рдкреНрд░рдгрд╛рд▓реА рдмрдЧрд╣рд░реВ [рд░ рддрд┐рдиреАрд╣рд░реВрдХреЛ рд╕рдорд╛рдзрд╛рди]

рдпреЛ рдкрддреНрддрд╛ рд▓рд╛рдЧреНрдпреЛ рдХрд┐ Ubuntu 16.04 рдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдПрдХреЛ systemd рдорд╛ рд╕рдорд╕реНрдпрд╛ рдЫ, рд░ рдпреЛ рдЬрдбрд╛рдирдХреЛ рд▓рд╛рдЧрд┐ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдПрдХрд╛ рдорд╛рдЙрдиреНрдЯрд╣рд░реВ рдкреНрд░рдмрдиреНрдз рдЧрд░реНрджрд╛ рд╣реБрдиреНрдЫред subPath ConfigMaps рд╡рд╛ рдЧреЛрдкреНрдпрд╣рд░реВрдмрд╛рдЯред рдкреЛрдбрд▓реЗ рдЖрдлреНрдиреЛ рдХрд╛рдо рдкреВрд░рд╛ рдЧрд░реЗрдкрдЫрд┐ systemd рд╕реЗрд╡рд╛ рд░ рдпрд╕рдХреЛ рд╕реЗрд╡рд╛ рдорд╛рдЙрдиреНрдЯ рд░рд╣рдиреНрдЫ рдкреНрд░рдгрд╛рд▓реАрдорд╛ред рд╕рдордпрдХреЛ рд╕рд╛рде, рддрд┐рдиреАрд╣рд░реВрдХреЛ рдареВрд▓реЛ рд╕рдВрдЦреНрдпрд╛ рдЬрдореНрдорд╛ рд╣реБрдиреНрдЫред рдпрд╕ рд╡рд┐рд╖рдпрдорд╛ рдкрдирд┐ рд╕рдорд╕реНрдпрд╛рд╣рд░реВ рдЫрдиреН:

  1. #релрепрезрем;
  2. kubernetes #57345.

... рдЬрд╕рдХреЛ рдЕрдиреНрддрд┐рдорд▓реЗ systemd рдорд╛ PR рд▓рд╛рдИ рдЬрдирд╛рдЙрдБрдЫ: #7811 (рд╕рд┐рд╕реНрдЯрдордорд╛ рдореБрджреНрджрд╛ - #7798).

Ubuntu 18.04 рдорд╛ рд╕рдорд╕реНрдпрд╛ рдЕрдм рдЕрд╡рд╕реНрдерд┐рдд рдЫреИрди, рддрд░ рдпрджрд┐ рддрдкрд╛рдЗрдБ Ubuntu 16.04 рдкреНрд░рдпреЛрдЧ рдЬрд╛рд░реА рд░рд╛рдЦреНрди рдЪрд╛рд╣рдиреБрд╣реБрдиреНрдЫ рднрдиреЗ, рддрдкрд╛рдЗрдБ рдпрд╕ рд╡рд┐рд╖рдпрдорд╛ рд╣рд╛рдореНрд░реЛ рд╕рдорд╛рдзрд╛рди рдЙрдкрдпреЛрдЧреА рдкрд╛рдЙрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред

рддреНрдпрд╕реИрд▓реЗ рд╣рд╛рдореАрд▓реЗ рдирд┐рдореНрди рдбреЗрдордирд╕реЗрдЯ рдмрдирд╛рдпреМрдВ:

---
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"]

рдХрдерд╛ рек. рдкреЛрдбрд╣рд░реВ рдЕрдиреБрд╕реВрдЪрд┐рдд рдЧрд░реНрджрд╛ рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзрд╛рддреНрдордХрддрд╛

рдпреЛ рдпрд╛рдж рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ рдХрд┐: рдпрджрд┐ рд╣рд╛рдореАрд╕рдБрдЧ рдиреЛрдбрдорд╛ рдкреЛрдб рд░рд╛рдЦрд┐рдПрдХреЛ рдЫ рд░ рдпрд╕рдХреЛ рдЫрд╡рд┐ рдзреЗрд░реИ рд▓рд╛рдореЛ рд╕рдордпрдХреЛ рд▓рд╛рдЧрд┐ рдмрд╛рд╣рд┐рд░ рдкрдореНрдк рдЧрд░рд┐рдПрдХреЛ рдЫ, рддреНрдпрд╕рдкрдЫрд┐ рдЕрд░реНрдХреЛ рдкреЛрдб рдЬрд╕рд▓реЗ рдЙрд╣реА рдиреЛрдбрд▓рд╛рдИ "рд╣рд┐рдЯ" рдЧрд░реНрджрдЫ рдирдпрд╛рдБ рдкреЛрдбрдХреЛ рдЫрд╡рд┐ рддрд╛рдиреНрди рд╕реБрд░реБ рдЧрд░реНрджреИрдиред рдпрд╕рдХреЛ рд╕рдЯреНрдЯрд╛, рдпреЛ рдЕрдШрд┐рд▓реНрд▓реЛ рдкреЛрдбрдХреЛ рдЫрд╡рд┐ рддрд╛рдиреНрдиреЗ рд╕рдореНрдо рдкрд░реНрдЦрдиреНрдЫред рдирддрд┐рдЬрд╛рдХреЛ рд░реВрдкрдорд╛, рдПрдХ рдкреЛрдб рдЬреБрди рдкрд╣рд┐рд▓реЗ рдиреИ рдЕрдиреБрд╕реВрдЪрд┐рдд рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ рд░ рдЬрд╕рдХреЛ рдЫрд╡рд┐ рдПрдХ рдорд┐рдиреЗрдЯрдорд╛ рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ рднрдиреНрдиреЗ рд╕реНрдерд┐рддрд┐рдорд╛ рд╕рдорд╛рдкреНрдд рд╣реБрдиреЗрдЫред containerCreating.

рдШрдЯрдирд╛рд╣рд░реВ рдпрд╕ рдкреНрд░рдХрд╛рд░ рджреЗрдЦрд┐рдиреЗрдЫрдиреН:

Normal  Pulling    8m    kubelet, ip-10-241-44-128.ap-northeast-1.compute.internal  pulling image "registry.example.com/infra/openvpn/openvpn:master"

рдпрд╕рд▓реЗ рддреНрдпрд╕рдмрд╛рдЯ рд╣рдЯрд╛рдЙрдБрдЫ рдврд┐рд▓реЛ рд░рдЬрд┐рд╕реНрдЯреНрд░реАрдмрд╛рдЯ рдПрдХрд▓ рдЫрд╡рд┐рд▓реЗ рддреИрдирд╛рддреА рд░реЛрдХреНрди рд╕рдХреНрдЫ рдкреНрд░рддрд┐ рдиреЛрдбред

рджреБрд░реНрднрд╛рдЧреНрдпрд╡рд╢, рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдмрд╛рдЯ рдмрд╛рд╣рд┐рд░ рдзреЗрд░реИ рддрд░рд┐рдХрд╛рд╣рд░реВ рдЫреИрдирдиреН:

  1. рддрдкрд╛рдИрдВрдХреЛ рдбрдХрд░ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рд╕реАрдзрд╛ рдХреНрд▓рд╕реНрдЯрд░рдорд╛ рд╡рд╛ рд╕реАрдзрд╛ рдХреНрд▓рд╕реНрдЯрд░рд╕рдБрдЧ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдиреБрд╣реЛрд╕реН (рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, GitLab Registry, Nexus, рдЖрджрд┐);
  2. рдЬрд╕реНрддрд╛ рд╕реБрд╡рд┐рдзрд╛рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реЛрд╕реН рдХреНрд░рд╛рдХреЗрди.

рдХрдерд╛ 5. рдореЗрдореЛрд░реАрдХреЛ рдХрдореАрдХреЛ рдХрд╛рд░рдг рдиреЛрдбрд╣рд░реВ рд╣реНрдпрд╛рдЩреНрдЧ рд╣реБрдиреНрдЫрдиреН

рд╡рд┐рднрд┐рдиреНрди рдПрдкреНрд▓рд┐рдХреЗрд╕рдирд╣рд░реВрдХреЛ рд╕рдЮреНрдЪрд╛рд▓рдирдХреЛ рдХреНрд░рдордорд╛, рд╣рд╛рдореАрд▓реЗ рдПрдЙрдЯрд╛ рдиреЛрдб рдкреВрд░реНрдг рд░реВрдкрдорд╛ рдкрд╣реБрдБрдЪрдпреЛрдЧреНрдп рд╣реБрди рдмрдиреНрдж рд╣реБрдиреЗ рдЕрд╡рд╕реНрдерд╛рдХреЛ рд╕рд╛рдордирд╛ рдЧрд░реНрдпреМрдВ: SSH рд▓реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджрд┐рдБрджреИрди, рд╕рдмреИ рдирд┐рдЧрд░рд╛рдиреА рдбреЗрдордирд╣рд░реВ рдЭрд░реНрдЫрдиреН, рд░ рддреНрдпрд╕рдкрдЫрд┐ рд▓рдЧрд╣рд░реВрдорд╛ рдХреБрдиреИ рдкрдирд┐ (рд╡рд╛ рд▓рдЧрднрдЧ рдХреЗрд╣рд┐ рдкрдирд┐) рдЕрд╕рдВрдЧрдд рдЫреИрдиред

рдо рддрдкрд╛рдИрдВрд▓рд╛рдИ рдПрдХ рдиреЛрдбрдХреЛ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдЪрд┐рддреНрд░рд╣рд░реВрдорд╛ рдмрддрд╛рдЙрдиреЗрдЫреБ рдЬрд╣рд╛рдБ MongoDB рдХрд╛рд░реНрдп рдЧрд░реНрджрдЫред

рдпреЛ рдорд╛рдерд┐ рдЬрд╕реНрддреЛ рджреЗрдЦрд┐рдиреНрдЫ рдЧрд░реНрди рджреБрд░реНрдШрдЯрдирд╛:

Kubernetes рдХреЛ рд╕рдЮреНрдЪрд╛рд▓рдирдорд╛ 6 рдордиреЛрд░рдЮреНрдЬрди рдкреНрд░рдгрд╛рд▓реА рдмрдЧрд╣рд░реВ [рд░ рддрд┐рдиреАрд╣рд░реВрдХреЛ рд╕рдорд╛рдзрд╛рди]

рд░ рдпрд╕реНрддреИ- ╨┐╨╛╤Б╨╗╨╡ рджреБрд░реНрдШрдЯрдирд╛:

Kubernetes рдХреЛ рд╕рдЮреНрдЪрд╛рд▓рдирдорд╛ 6 рдордиреЛрд░рдЮреНрдЬрди рдкреНрд░рдгрд╛рд▓реА рдмрдЧрд╣рд░реВ [рд░ рддрд┐рдиреАрд╣рд░реВрдХреЛ рд╕рдорд╛рдзрд╛рди]

рдЕрдиреБрдЧрдордирдорд╛, рддреНрдпрд╣рд╛рдБ рддреАрд╡реНрд░ рдЬрдореНрдк рдкрдирд┐ рдЫ, рдЬрд╕рдорд╛ рдиреЛрдб рдЙрдкрд▓рдмреНрдз рд╣реБрди рдмрдиреНрдж рд╣реБрдиреНрдЫ:

Kubernetes рдХреЛ рд╕рдЮреНрдЪрд╛рд▓рдирдорд╛ 6 рдордиреЛрд░рдЮреНрдЬрди рдкреНрд░рдгрд╛рд▓реА рдмрдЧрд╣рд░реВ [рд░ рддрд┐рдиреАрд╣рд░реВрдХреЛ рд╕рдорд╛рдзрд╛рди]

рддрд╕рд░реНрде, рд╕реНрдХреНрд░рд┐рдирд╕рдЯрдмрд╛рдЯ рдпреЛ рд╕реНрдкрд╖реНрдЯ рдЫ рдХрд┐:

  1. рдореЗрд╕рд┐рдирдХреЛ RAM рдЕрдиреНрддреНрдпрдХреЛ рдирдЬрд┐рдХ рдЫ;
  2. рддреНрдпрд╣рд╛рдБ RAM рдЦрдкрдд рдорд╛ рдПрдХ рддреЗрдЬ рдЬрдореНрдк рдЫ, рдЬрд╕ рдкрдЫрд┐ рд╕рдореНрдкреВрд░реНрдг рдореЗрд╕рд┐рдирдорд╛ рдкрд╣реБрдБрдЪ рдЕрдЪрд╛рдирдХ рдЕрд╕рдХреНрд╖рдо рд╣реБрдиреНрдЫ;
  3. рдореЛрдиреНрдЧреЛрдорд╛ рдПрдЙрдЯрд╛ рдареВрд▓реЛ рдХрд╛рд░реНрдп рдЖрдЗрдкреБрдЧреНрдЫ, рдЬрд╕рд▓реЗ DBMS рдкреНрд░рдХреНрд░рд┐рдпрд╛рд▓рд╛рдИ рдердк рдореЗрдореЛрд░реА рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд░ рдбрд┐рд╕реНрдХрдмрд╛рдЯ рд╕рдХреНрд░рд┐рдп рд░реВрдкрдорд╛ рдкрдвреНрди рдмрд╛рдзреНрдп рдкрд╛рд░реНрдЫред

рдпреЛ рдмрд╛рд╣рд┐рд░ рдЬрд╛рдиреНрдЫ рдХрд┐ рдпрджрд┐ рд▓рд┐рдирдХреНрд╕ рдирд┐: рд╢реБрд▓реНрдХ рдореЗрдореЛрд░реА рд╕рдорд╛рдкреНрдд рд╣реБрдиреНрдЫ (рдореЗрдореЛрд░реА рджрдмрд╛рдм рд╕реЗрдЯ рдЗрди) рд░ рддреНрдпрд╣рд╛рдБ рдХреБрдиреИ рд╕реНрд╡реИрдк рдЫреИрди, рддреНрдпрд╕рдкрдЫрд┐ рдЧрд░реНрди рдЬрдм OOM рдХрд┐рд▓рд░ рдЖрдЗрдкреБрдЧреНрдЫ, рдкреГрд╖реНрда рдХреНрдпрд╛рд╕рдорд╛ рдкреГрд╖реНрдард╣рд░реВ рдлрд╛рд▓реНрдиреЗ рд░ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдбрд┐рд╕реНрдХрдорд╛ рдлрд┐рд░реНрддрд╛ рд▓реЗрдЦреНрдиреЗ рдмреАрдЪрдорд╛ рд╕рдиреНрддреБрд▓рди рдХрд╛рд░реНрдп рдЙрддреНрдкрдиреНрди рд╣реБрди рд╕рдХреНрдЫред рдпреЛ kswapd рджреНрд╡рд╛рд░рд╛ рдЧрд░рд┐рдиреНрдЫ, рдЬрд╕рд▓реЗ рдкрдЫрд┐рдХреЛ рд╡рд┐рддрд░рдгрдХреЛ рд▓рд╛рдЧрд┐ рд╕рдХреЗрд╕рдореНрдо рдзреЗрд░реИ рдореЗрдореЛрд░реА рдкреГрд╖реНрдард╣рд░реВрд▓рд╛рдИ рд╕рд╛рд╣рд╕рдкреВрд░реНрд╡рдХ рдЦрд╛рд▓реА рдЧрд░реНрджрдЫред

рджреБрд░реНрднрд╛рдЧреНрдпрд╡рд╢, рдареВрд▓реЛ I/O рд▓реЛрдбрдХреЛ рд╕рд╛рдердорд╛ рдереЛрд░реИ рдорд╛рддреНрд░рд╛рдорд╛ рдирд┐:рд╢реБрд▓реНрдХ рдореЗрдореЛрд░реАрдХреЛ рд╕рд╛рде, kswapd рд╕рдореНрдкреВрд░реНрдг рдкреНрд░рдгрд╛рд▓реАрдХреЛ рдмрд╛рдзрд╛ рдмрдиреНрдЫ, рдХрд┐рдирднрдиреЗ рддрд┐рдиреАрд╣рд░реВ рдпрд╕рдорд╛ рдмрд╛рдБрдзрд┐рдПрдХрд╛ рдЫрдиреН рд╕рдмреИ рдкреНрд░рдгрд╛рд▓реАрдорд╛ рдореЗрдореЛрд░реА рдкреГрд╖реНрдард╣рд░реВрдХреЛ рдЖрд╡рдВрдЯрди (рдкреГрд╖реНрда рддреНрд░реБрдЯрд┐рд╣рд░реВ)ред рдпреЛ рдзреЗрд░реИ рд▓рд╛рдореЛ рд╕рдордпрдХреЛ рд▓рд╛рдЧрд┐ рдЬрд╛рди рд╕рдХреНрдЫ рдпрджрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВрд▓реЗ рдореЗрдореЛрд░реА рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдЪрд╛рд╣рдБрджреИрдирдиреН, рддрд░ OOM-рдХрд┐рд▓рд░ рдПрдмрд┐рд╕рдХреЛ рдзреЗрд░реИ рдХрд┐рдирд╛рд░рдорд╛ рдирд┐рд╢реНрдЪрд┐рдд рдЫрдиреНред

рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рдкреНрд░рд╢реНрди рд╣реЛ: OOM рд╣рддреНрдпрд╛рд░рд╛ рдХрд┐рди рдпрддрд┐ рдврд┐рд▓реЛ рдЖрдЙрдБрдЫ? рдпрд╕рдХреЛ рд╣рд╛рд▓рдХреЛ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдорд╛, OOM рд╣рддреНрдпрд╛рд░рд╛ рдЕрддреНрдпрдиреНрддреИ рдореВрд░реНрдЦ рдЫ: рдореЗрдореЛрд░реА рдкреГрд╖реНрда рдЖрд╡рдВрдЯрд┐рдд рдЧрд░реНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЕрд╕рдлрд▓ рд╣реБрдБрджрд╛ рдорд╛рддреНрд░ рдпрд╕рд▓реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛рд▓рд╛рдИ рдорд╛рд░реНрдиреЗрдЫ, рдЕрд░реНрдерд╛рддреНред рдпрджрд┐ рдкреГрд╖реНрда рддреНрд░реБрдЯрд┐ рдЕрд╕рдлрд▓ рднрдпреЛред рдпреЛ рдзреЗрд░реИ рд▓рд╛рдореЛ рд╕рдордпрдХреЛ рд▓рд╛рдЧрд┐ рд╣реБрдБрджреИрди, рдХрд┐рдирднрдиреЗ kswapd рд▓реЗ рдореЗрдореЛрд░реА рдкреГрд╖реНрдард╣рд░реВрд▓рд╛рдИ рд╕рд╛рд╣рд╕рдкреВрд░реНрд╡рдХ рдореБрдХреНрдд рдЧрд░реНрджрдЫ, рдкреГрд╖реНрда рдХреНрдпрд╛рд╕ (рдкреНрд░рдгрд╛рд▓реАрдорд╛ рд╕рдореНрдкреВрд░реНрдг рдбрд┐рд╕реНрдХ I/O, рд╡рд╛рд╕реНрддрд╡рдорд╛) рдбрд┐рд╕реНрдХрдорд╛ рдлрд┐рд░реНрддрд╛ рдлреНрдпрд╛рдБрдХреНрдЫред рдердк рд╡рд┐рд╡рд░рдгрдорд╛, рдХрд░реНрдиреЗрд▓рдорд╛ рддреНрдпрд╕реНрддрд╛ рд╕рдорд╕реНрдпрд╛рд╣рд░реВ рд╣рдЯрд╛рдЙрди рдЖрд╡рд╢реНрдпрдХ рдЪрд░рдгрд╣рд░реВрдХреЛ рд╡рд┐рд╡рд░рдгрдХреЛ рд╕рд╛рде, рддрдкрд╛рдЗрдБ рдкрдвреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рдпрд╣рд╛рдБ.

рдпреЛ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реБрдзрд╛рд░ рдЧрд░реНрдиреБрдкрд░реНрдЫ рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдиреЗрд▓ 4.6+ рдХреЛ рд╕рд╛рдеред

рдХрдерд╛ 6. рдкреЛрдбрд╣рд░реВ рдкреЗрдиреНрдбрд┐рдЩ рдЕрд╡рд╕реНрдерд╛рдорд╛ рдЕрдбреНрдХрд┐рдП

рдХреЗрд╣реА рдХреНрд▓рд╕реНрдЯрд░рд╣рд░реВрдорд╛, рдЬрд╣рд╛рдБ рд╡рд╛рд╕реНрддрд╡рдорд╛ рдзреЗрд░реИ рдкреЛрдбрд╣рд░реВ рд╕рдЮреНрдЪрд╛рд▓рдирдорд╛ рдЫрдиреН, рд╣рд╛рдореАрд▓реЗ рдпрд╛рдж рдЧрд░реНрди рдерд╛рд▓реНрдпреМрдВ рдХрд┐ рддрд┐рдиреАрд╣рд░реВрдордзреНрдпреЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рд░рд╛рдЬреНрдпрдорд╛ рдзреЗрд░реИ рд▓рд╛рдореЛ рд╕рдордпрдХреЛ рд▓рд╛рдЧрд┐ "рд╣реНрдпрд╛рдЩ" рдЫрдиреНред Pending, рдпрджреНрдпрдкрд┐ рдбрдХрд░ рдХрдиреНрдЯреЗрдирд░рд╣рд░реВ рдЖрдлреИрдВ рдиреЛрдбрд╣рд░реВрдорд╛ рдЪрд▓рд┐рд░рд╣реЗрдХрд╛ рдЫрдиреН рд░ рдореНрдпрд╛рдиреБрдЕрд▓ рд░реВрдкрдорд╛ рдХрд╛рдо рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред

рдпрд╕рдмрд╛рд╣реЗрдХ, рдорд╛ 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

рдХреЗрд╣реА рдЦрдиреНрдиреЗ рдкрдЫрд┐, рд╣рд╛рдореАрд▓реЗ рдХреБрдмреЗрд▓реЗрдЯрд╕рдБрдЧ рдПрдкреАрдЖрдИ рд╕рд░реНрднрд░рдорд╛ рдкреЛрдбрдХреЛ рдЕрд╡рд╕реНрдерд╛ рд░ рдЬреАрд╡рдиреНрддрддрд╛/рддрдпрд╛рд░реА рдкрд░реАрдХреНрд╖рдгрд╣рд░реВрдХреЛ рдмрд╛рд░реЗрдорд╛ рд╕рдмреИ рдЬрд╛рдирдХрд╛рд░реА рдкрдард╛рдЙрдирдХреЛ рд▓рд╛рдЧрд┐ рд╕рдордп рд╣реБрдБрджреИрди рднрдиреНрдиреЗ рдзрд╛рд░рдгрд╛ рдмрдирд╛рдпреМрдВред

рд░ рдорджреНрджрдд рдЕрдзреНрдпрдпрди рдЧрд░реЗрдкрдЫрд┐, рд╣рд╛рдореАрд▓реЗ рдирд┐рдореНрди рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ рдлреЗрд▓рд╛ рдкрд╛рд░реНрдпреМрдВ:

--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 рд╕рд░реНрднрд░рдорд╛ рдХрд▓рд╣рд░реВрдХреЛ рдЧреНрд░рд╛рдлрдорд╛ рдирд┐рдореНрди рдЪрд┐рддреНрд░ рджреЗрдЦреНрдпреМрдВ:

Kubernetes рдХреЛ рд╕рдЮреНрдЪрд╛рд▓рдирдорд╛ 6 рдордиреЛрд░рдЮреНрдЬрди рдкреНрд░рдгрд╛рд▓реА рдмрдЧрд╣рд░реВ [рд░ рддрд┐рдиреАрд╣рд░реВрдХреЛ рд╕рдорд╛рдзрд╛рди]

... рд░ рд╣реЛ, рд╕рдмреИ рдЙрдбреНрди рдерд╛рд▓реНрдпреЛ!

PS

рдмрдЧрд╣рд░реВ рд╕рдЩреНрдХрд▓рди рдЧрд░реНрди рд░ рдпреЛ рд▓реЗрдЦ рддрдпрд╛рд░ рдЧрд░реНрдирдорд╛ рдЙрдиреАрд╣рд░реВрдХреЛ рдорджреНрджрддрдХреЛ рд▓рд╛рдЧрд┐, рдо рд╣рд╛рдореНрд░реЛ рдХрдореНрдкрдиреАрдХрд╛ рдЕрд╕рдВрдЦреНрдп рдЗрдиреНрдЬрд┐рдирд┐рдпрд░рд╣рд░реВ рд░ рд╡рд┐рд╢реЗрд╖ рдЧрд░реА рд╣рд╛рдореНрд░реЛ R&D рдЯреЛрд▓реАрдХрд╛ рдореЗрд░рд╛ рд╕рд╣рдХрд░реНрдореА Andrey Klimentyev (zuzzas).

рдкреАрдкреАрдПрд╕

рд╣рд╛рдореНрд░реЛ рдмреНрд▓рдЧрдорд╛ рдкрдирд┐ рдкрдвреНрдиреБрд╣реЛрд╕реН:

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди