рдкрд╛рдареНрдпрдХреНрд░рдо рдХреА рд╢реБрд░реБрдЖрдд рдХреА рдкреВрд░реНрд╡ рд╕рдВрдзреНрдпрд╛ рдкрд░ рд▓реЗрдЦ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛
рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдХреНрд▓рд╛рдЙрдб рд▓рд╛рдЧрдд рдХреИрд╕реЗ рдмрдЪрд╛рдПрдВ? рдХреЛрдИ рдПрдХ рд╕рд╣реА рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЖрд▓реЗрдЦ рдХрдИ рдЯреВрд▓ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдЕрдзрд┐рдХ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдФрд░ рдЖрдкрдХреА рдХреНрд▓рд╛рдЙрдб рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рд▓рд╛рдЧрдд рдХреЛ рдХрдо рдХрд░рдиреЗ рдореЗрдВ рдЖрдкрдХреА рд╕рд╣рд╛рдпрддрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдореИрдВрдиреЗ рдпрд╣ рд▓реЗрдЦ AWS рдХреЗ рд▓рд┐рдП Kubernetes рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдХрд░ рд▓рд┐рдЦрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ (рд▓рдЧрднрдЧ) рдЕрдиреНрдп рдХреНрд▓рд╛рдЙрдб рдкреНрд░рджрд╛рддрд╛рдУрдВ рдкрд░ рдмрд┐рд▓реНрдХреБрд▓ рдЙрд╕реА рддрд░рд╣ рд▓рд╛рдЧреВ рд╣реЛрдЧрд╛ред рдореИрдВ рдорд╛рди рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЖрдкрдХреЗ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдСрдЯреЛрд╕реНрдХреЗрд▓рд┐рдВрдЧ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рд╣реИ (
рдпрд╣ рд▓реЗрдЦ рдХрд╡рд░ рдХрд░реЗрдЧрд╛:
- рдЕрдкреНрд░рдпреБрдХреНрдд рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рд╕рдлрд╛рдИ (
рдХреНрдпреВрдм-рдЪреМрдХреАрджрд╛рд░ ) - рдЧреИрд░-рдХрд╛рд░реНрдп рдШрдВрдЯреЛрдВ рдХреЗ рджреМрд░рд╛рди рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдХрдо рдХрд░реЗрдВ (
рдХреНрдпреВрдм-рдбрд╛рдЙрдирд╕реНрдХреЗрд▓рд░ ) - рдХреНрд╖реИрддрд┐рдЬ рдСрдЯреЛрд╕реНрдХреЗрд▓рд┐рдВрдЧ (HPA) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ,
- рдЕрддреНрдпрдзрд┐рдХ рд╕рдВрд╕рд╛рдзрди рдЖрд░рдХреНрд╖рдг рдореЗрдВ рдХрдореА (
рдХреНрдпреВрдм-рд╕рдВрд╕рд╛рдзрди-рд░рд┐рдкреЛрд░реНрдЯ , рд╡реАрдкреАрдП) - рд╕реНрдкреЙрдЯ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
рдЕрдкреНрд░рдпреБрдХреНрдд рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рд╕рдлрд╛рдИ
рддреЗрдЬрд╝ рдЧрддрд┐ рд╡рд╛рд▓реЗ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИред рд╣рдо рддрдХрдиреАрдХреА рд╕рдВрдЧрдарди рдЪрд╛рд╣рддреЗ рд╣реИрдВ
(рд╣реЗрдирд┐рдВрдЧ рдЬреИрдХрдмреНрд╕:
рдЭрд┐рдЬрд╝рд╛:
(рдЙрджреНрдзрд░рдг) рдХреЛрд░реА рдХреНрд╡рд┐рди:
рдорд┐рдердХ: рдЖрдкрдХрд╛ AWS рдЦрд╛рддрд╛ рдЖрдкрдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдПрдХ рдХрд╛рд░реНрдп рд╣реИред
рддрдереНрдп: рдЖрдкрдХрд╛ AWS рд╕реНрдХреЛрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдореМрдЬреВрдж рдЗрдВрдЬреАрдирд┐рдпрд░реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред
рдЗрд╡рд╛рди рдХреБрд░реНрдиреЛрд╕реЛрд╡ (рдЬрд╡рд╛рдм рдореЗрдВ):
рд╡рд╛рд╕реНрддрд╡рд┐рдХ рддрдереНрдп: рдЖрдкрдХрд╛ AWS рд╕реНрдХреЛрд░ рдЙрди рдЪреАрдЬрд╝реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдЕрдХреНрд╖рдо/рд╣рдЯрд╛рдирд╛ рднреВрд▓ рдЧрдП рд╣реИрдВред)
- рдХреНрд▓рд╕реНрдЯрд░-рд╡реНрдпрд╛рдкреА рдирд┐рдпрдо рдкреАрдЖрд░/рдкрд░реАрдХреНрд╖рдг рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХрддрдо рдЬреАрд╡рди-рд╕рдордп (рдЯреАрдЯреАрдПрд▓) рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
- рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдЬреЗрдирд┐рдЯрд░/рдЯреАрдЯреАрдПрд▓ рдХреЗ рд╕рд╛рде рдПрдиреЛрдЯреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП 7 рджрд┐рдиреЛрдВ рдХреЗ рдмрд╛рдж рд╕реНрдкрд╛рдЗрдХ/рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдПред
рд╕рд╛рдорд╛рдиреНрдп рдирд┐рдпрдо YAML рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИрдВред рдЗрд╕рдХрд╛ рдкрде рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗ рд╣реЛрдХрд░ рдЧреБрдЬрд░рддрд╛ рд╣реИ --rules-file
рдХреНрдпреВрдм-рдЬреЗрдирд┐рдЯрд░ рдореЗрдВред рдпрд╣рд╛рдВ рд╕рднреА рдирд╛рдорд╕реНрдерд╛рдиреЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рдирд┐рдпрдо рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ -pr-
рджреЛ рджрд┐рди рдмрд╛рдж рдирд╛рдо рдкрд░:
- id: cleanup-resources-from-pull-requests
resources:
- namespaces
jmespath: "contains(metadata.name, '-pr-')"
ttl: 2d
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг 2020 рдореЗрдВ рд╕рднреА рдирдП рдкрд░рд┐рдирд┐рдпреЛрдЬрди/рд╕реНрдЯреЗрдЯрдлреБрд▓рд╕реЗрдЯ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдФрд░ рд╕реНрдЯреЗрдЯрдлреБрд▓рд╕реЗрдЯ рдкреЙрдб рдкрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЗрдмрд▓ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд╛рде рд╣реА рдПрдХ рд╕рдкреНрддрд╛рд╣ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд▓реЗрдмрд▓ рдХреЗ рдмрд┐рдирд╛ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:
- id: require-application-label
# ╤Г╨┤╨░╨╗╨╕╤В╤М deployments ╨╕ statefulsets ╨▒╨╡╨╖ ╨╝╨╡╤В╨║╨╕ "application"
resources:
- deployments
- statefulsets
# ╤Б╨╝. http://jmespath.org/specification.html
jmespath: "!(spec.template.metadata.labels.application) && metadata.creationTimestamp > '2020-01-01'"
ttl: 7d
рдХреНрдпреВрдм-рдЬреЗрдирд┐рдЯрд░ рдЪрд▓рд╛рдиреЗ рд╡рд╛рд▓реЗ рдХреНрд▓рд╕реНрдЯрд░ рдкрд░ 30 рдорд┐рдирдЯ рдХреЗ рд▓рд┐рдП рд╕рдордп-рд╕реАрдорд┐рдд рдбреЗрдореЛ рдЪрд▓рд╛рдПрдБ:
kubectl run nginx-demo --image=nginx
kubectl annotate deploy nginx-demo janitor/ttl=30m
рдмрдврд╝рддреА рд▓рд╛рдЧрдд рдХрд╛ рдПрдХ рдЕрдиреНрдп рд╕реНрд░реЛрдд рд▓рдЧрд╛рддрд╛рд░ рдорд╛рддреНрд░рд╛ (рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ рдИрдмреАрдПрд╕) рд╣реИред Kubernetes StatefulSet рдХреЛ рд╣рдЯрд╛рдиреЗ рд╕реЗ рдЗрд╕рдХреЗ рд▓рдЧрд╛рддрд╛рд░ рд╡реЙрд▓реНрдпреВрдо (PVC - PersistentVolumeClaim) рдирд╣реАрдВ рд╣рдЯрддреЗред рдЕрдкреНрд░рдпреБрдХреНрдд рдИрдмреАрдПрд╕ рд╡реЙрд▓реНрдпреВрдо рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдкреНрд░рддрд┐ рдорд╛рд╣ рд╕реИрдХрдбрд╝реЛрдВ рдбреЙрд▓рд░ рдХреА рд▓рд╛рдЧрдд рдЖ рд╕рдХрддреА рд╣реИред Kubernetes Janitor рдореЗрдВ рдЕрдкреНрд░рдпреБрдХреНрдд рдкреАрд╡реАрд╕реА рдХреЛ рд╕рд╛рдл рдХрд░рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдирд┐рдпрдо рдЙрди рд╕рднреА рдкреАрд╡реАрд╕реА рдХреЛ рд╣рдЯрд╛ рджреЗрдЧрд╛ рдЬреЛ рдХрд┐рд╕реА рдореЙрдбреНрдпреВрд▓ рджреНрд╡рд╛рд░рд╛ рдорд╛рдЙрдВрдЯ рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рд╣реИрдВ рдФрд░ рдЬрд┐рдиреНрд╣реЗрдВ рд╕реНрдЯреЗрдЯрдлреБрд▓рд╕реЗрдЯ рдпрд╛ рдХреНрд░реЛрдирдЬреЙрдм рджреНрд╡рд╛рд░рд╛ рд╕рдВрджрд░реНрднрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
# ╤Г╨┤╨░╨╗╨╕╤В╤М ╨▓╤Б╨╡ PVC, ╨║╨╛╤В╨╛╤А╤Л╨╡ ╨╜╨╡ ╤Б╨╝╨╛╨╜╤В╨╕╤А╨╛╨▓╨░╨╜╤Л ╨╕ ╨╜╨░ ╨║╨╛╤В╨╛╤А╤Л╨╡ ╨╜╨╡ ╤Б╤Б╤Л╨╗╨░╤О╤В╤Б╤П StatefulSets
- id: remove-unused-pvcs
resources:
- persistentvolumeclaims
jmespath: "_context.pvc_is_not_mounted && _context.pvc_is_not_referenced"
ttl: 24h
рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдЬреЗрдирд┐рдЯрд░ рдЖрдкрдХреЗ рдХреНрд▓рд╕реНрдЯрд░ рдХреЛ рд╕рд╛рдл рд░рдЦрдиреЗ рдФрд░ рдХреНрд▓рд╛рдЙрдб рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рд▓рд╛рдЧрдд рдХреЛ рдзреАрд░реЗ-рдзреАрд░реЗ рдмрдврд╝рдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдореЗрдВ рдЖрдкрдХреА рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП, рдЕрдиреБрд╕рд░рдг рдХрд░реЗрдВ
рдЧреИрд░-рдХрд╛рд░реНрдп рдШрдВрдЯреЛрдВ рдХреЗ рджреМрд░рд╛рди рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдХрдо рдХрд░реЗрдВ
рдкрд░реАрдХреНрд╖рдг рдФрд░ рд╕реНрдЯреЗрдЬрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдЖрдорддреМрд░ рдкрд░ рдХреЗрд╡рд▓ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдШрдВрдЯреЛрдВ рдХреЗ рджреМрд░рд╛рди рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддреЗ рд╣реИрдВред рдХреБрдЫ рдЙрддреНрдкрд╛рджрди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ, рдЬреИрд╕реЗ рдмреИрдХ рдСрдлрд┐рд╕/рдПрдбрдорд┐рди рдЯреВрд▓реНрд╕ рдХреЛ рднреА рдХреЗрд╡рд▓ рд╕реАрдорд┐рдд рдЙрдкрд▓рдмреНрдзрддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд░рд╛рддреЛрдВрд░рд╛рдд рдЕрдХреНрд╖рдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
image: hjacobs/kube-downscaler:20.4.3
args:
- --interval=30
# ╨╜╨╡ ╨╛╤В╨║╨╗╤О╤З╨░╤В╤М ╨║╨╛╨╝╨┐╨╛╨╜╨╡╨╜╤В╤Л ╨╕╨╜╤Д╤А╨░╤Б╤В╤А╤Г╨║╤В╤Г╤А╤Л
- --exclude-namespaces=kube-system,infra
# ╨╜╨╡ ╨╛╤В╨║╨╗╤О╤З╨░╤В╤М kube-downscaler, ╨░ ╤В╨░╨║╨╢╨╡ ╨╛╤Б╤В╨░╨▓╨╕╤В╤М Postgres Operator, ╤З╤В╨╛╨▒╤Л ╨╕╤Б╨║╨╗╤О╤З╨╡╨╜╨╜╤Л╨╝╨╕ ╨С╨Ф ╨╝╨╛╨╢╨╜╨╛ ╨▒╤Л╨╗╨╛ ╤Г╨┐╤А╨░╨▓╨╗╤П╤В╤М
- --exclude-deployments=kube-downscaler,postgres-operator
- --default-uptime=Mon-Fri 08:00-20:00 Europe/Berlin
- --include-resources=deployments,statefulsets,stacks,cronjobs
- --deployment-time-annotation=deployment-time
рд╕рдкреНрддрд╛рд╣рд╛рдВрдд рдкрд░ рдХреНрд▓рд╕реНрдЯрд░ рд╡рд░реНрдХрд░ рдиреЛрдбреНрд╕ рдХреЛ рд╕реНрдХреЗрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЧреНрд░рд╛рдлрд╝ рдпрд╣рд╛рдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
~13 рд╕реЗ 4 рд╡рд░реНрдХрд░ рдиреЛрдбреНрд╕ рддрдХ рд╕реНрдХреЗрд▓ рдХрд░рдиреЗ рд╕реЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЖрдкрдХреЗ AWS рдмрд┐рд▓ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рдЕрдВрддрд░ рдЖрддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдореБрдЭреЗ рдХреНрд▓рд╕реНрдЯрд░ "рдбрд╛рдЙрдирдЯрд╛рдЗрдо" рдХреЗ рджреМрд░рд╛рди рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдкрдбрд╝реЗ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рдбрд╛рдЙрдирд╕реНрдХреЗрд▓рд░/рдмрд╣рд┐рд╖реНрдХреГрдд: рд╕рддреНрдп рдПрдиреЛрдЯреЗрд╢рди рдЬреЛрдбрд╝рдХрд░ рдХреБрдЫ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреЛ рд╕реНрдХреЗрд▓рд┐рдВрдЧ рд╕реЗ рд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдмрд╛рд╣рд░ рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред YYYY-MM-DD HH:MM (UTC) рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкреВрд░реНрдг рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рдХреЗ рд╕рд╛рде рдбрд╛рдЙрдирд╕реНрдХреЗрд▓рд░/рдПрдХреНрд╕рдХреНрд▓реВрдб-рдЯрд┐рд▓ рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рддреИрдирд╛рддреА рдХреЛ рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдмрд╛рд╣рд░ рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ рдкреЙрдб рддреИрдирд╛рдд рдХрд░рдХреЗ рдкреВрд░реЗ рдХреНрд▓рд╕реНрдЯрд░ рдХреЛ рдЫреЛрдЯрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ downscaler/force-uptime
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, nginx рдмреНрд▓реИрдВрдХ рд▓реЙрдиреНрдЪ рдХрд░рдХреЗ:
kubectl run scale-up --image=nginx
kubectl annotate deploy scale-up janitor/ttl=1h # ╤Г╨┤╨░╨╗╨╕╤В╤М ╤А╨░╨╖╨▓╨╡╤А╤В╤Л╨▓╨░╨╜╨╕╨╡ ╤З╨╡╤А╨╡╨╖ ╤З╨░╤Б
kubectl annotate pod $(kubectl get pod -l run=scale-up -o jsonpath="{.items[0].metadata.name}") downscaler/force-uptime=true
рджреЗрдЦрдирд╛
рдХреНрд╖реИрддрд┐рдЬ рдСрдЯреЛрд╕реНрдХреЗрд▓рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
рдХрдИ рдПрдкреНрд▓рд┐рдХреЗрд╢рди/рд╕реЗрд╡рд╛рдПрдВ рдЧрддрд┐рд╢реАрд▓ рд▓реЛрдбрд┐рдВрдЧ рдкреИрдЯрд░реНрди рд╕реЗ рдирд┐рдкрдЯрддреА рд╣реИрдВ: рдХрднреА-рдХрднреА рдЙрдирдХреЗ рдореЙрдбреНрдпреВрд▓ рдирд┐рд╖реНрдХреНрд░рд┐рдп рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдХрднреА-рдХрднреА рд╡реЗ рдкреВрд░реА рдХреНрд╖рдорддрд╛ рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдЕрдзрд┐рдХрддрдо рдкреАрдХ рд▓реЛрдб рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдкреЙрдб рдХреЗ рд╕реНрдерд╛рдпреА рдмреЗрдбрд╝реЗ рдХрд╛ рд╕рдВрдЪрд╛рд▓рди рдХрд░рдирд╛ рдХрд┐рдлрд╛рдпрддреА рдирд╣реАрдВ рд╣реИред рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдПрдХ рд╕рдВрд╕рд╛рдзрди рдореЗрдВ рдХреНрд╖реИрддрд┐рдЬ рдСрдЯреЛ-рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: my-app
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: my-app
minReplicas: 3
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
averageUtilization: 100
type: Utilization
рдЬрд╝рд╛рд▓реИрдВрдбреЛ рдиреЗ рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХрд╕реНрдЯрдо рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдШрдЯрдХ рдмрдирд╛рдпрд╛ рд╣реИ:
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: myapp-hpa
annotations:
# metric-config.<metricType>.<metricName>.<collectorName>/<configKey>
metric-config.pods.requests-per-second.json-path/json-key: "$.http_server.rps"
metric-config.pods.requests-per-second.json-path/path: /metrics
metric-config.pods.requests-per-second.json-path/port: "9090"
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: myapp
minReplicas: 1
maxReplicas: 10
metrics:
- type: Pods
pods:
metric:
name: requests-per-second
target:
averageValue: 1k
type: AverageValue
рд╕реНрдЯреЗрдЯрд▓реЗрд╕ рд╕реЗрд╡рд╛рдУрдВ рдХреА рджрдХреНрд╖рддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдЪрдкреАрдП рдХреЗ рд╕рд╛рде рдХреНрд╖реИрддрд┐рдЬ рдСрдЯреЛрд╕реНрдХреЗрд▓рд┐рдВрдЧ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред Spotify рдХреЗ рдкрд╛рд╕ HPA рдХреЗ рд▓рд┐рдП рдЙрдирдХреЗ рдЕрдиреБрднрд╡ рдФрд░ рдЕрдиреБрд╢рдВрд╕рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░рд╕реНрддреБрддрд┐ рд╣реИ:
рд╕рдВрд╕рд╛рдзрди рдУрд╡рд░рдмреБрдХрд┐рдВрдЧ рдХрдо рдХрд░реЗрдВ
рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рд╡рд░реНрдХрд▓реЛрдб "рд╕рдВрд╕рд╛рдзрди рдЕрдиреБрд░реЛрдзреЛрдВ" рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдкрдиреА рд╕реАрдкреАрдпреВ/рдореЗрдореЛрд░реА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд╕реАрдкреАрдпреВ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд╡рд░реНрдЪреБрдЕрд▓ рдХреЛрд░ рдпрд╛ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдпрддрдГ "рдорд┐рд▓реАрдХреЛрд░реНрд╕" рдореЗрдВ рдорд╛рдкрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП 500 рдореАрдЯрд░ рдХрд╛ рдорддрд▓рдм 50% рд╡реАрд╕реАрдкреАрдпреВ рд╣реИред рдореЗрдореЛрд░реА рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ рдорд╛рдкрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рддреНрдпрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕реЗ 500Mi, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ 500 рдореЗрдЧрд╛рдмрд╛рдЗрдЯред рд╕рдВрд╕рд╛рдзрди рдЕрдиреБрд░реЛрдз рд╡рд░реНрдХрд░ рдиреЛрдбреНрд╕ рдкрд░ рдХреНрд╖рдорддрд╛ рдХреЛ "рд▓реЙрдХ" рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ 1000 рд╡реАрд╕реАрдкреАрдпреВ рд╡рд╛рд▓реЗ рдиреЛрдб рдкрд░ 4 рдореАрдЯрд░ рд╕реАрдкреАрдпреВ рдЕрдиреБрд░реЛрдз рд╡рд╛рд▓рд╛ рдПрдХ рдкреЙрдб рдЕрдиреНрдп рдкреЙрдб рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ 3 рд╡реАрд╕реАрдкреАрдпреВ рдЙрдкрд▓рдмреНрдз рдЫреЛрдбрд╝реЗрдЧрд╛ред
рд╕реБрд╕реНрдд (рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрд░рдХреНрд╖рд┐рдд) рдЕрдиреБрд░реЛрдзрд┐рдд рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрдкрдпреЛрдЧ рдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдкреЙрдб рдЬреЛ 2 GiB рдореЗрдореЛрд░реА рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ 200 MiB рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЙрд╕рдореЗрдВ ~1,8 GiB "рдЕрддрд┐рд░рд┐рдХреНрдд" рдореЗрдореЛрд░реА рд╣реЛрддреА рд╣реИред рдЕрдзрд┐рдХрддрд╛ рд╕реЗ рдкреИрд╕рд╛ рдЦрд░реНрдЪ рд╣реЛрддрд╛ рд╣реИ. рдХреЛрдИ рдореЛрдЯреЗ рддреМрд░ рдкрд░ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ 1 GiB рдЕрдирд╛рд╡рд╢реНрдпрдХ рдореЗрдореЛрд░реА рдХреА рд▓рд╛рдЧрдд ~$10 рдкреНрд░рддрд┐ рдорд╛рд╣ рд╣реИред
рд╕реАрдкреАрдпреВ рдЕрдиреБрд░реЛрдз рдХреЛ 3000 рдореАрдЯрд░ рд╕реЗ рдШрдЯрд╛рдХрд░ ~400 рдореАрдЯрд░ рдХрд░рдиреЗ рд╕реЗ рдЕрдиреНрдп рдХрд╛рд░реНрдпрднрд╛рд░ рдХреЗ рд▓рд┐рдП рд╕рдВрд╕рд╛рдзрди рдореБрдХреНрдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдХреНрд▓рд╕реНрдЯрд░ рдЫреЛрдЯрд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
"EC2 рдЗрдВрд╕реНрдЯреЗрдВрд╕реЗрд╕ рдХрд╛ рдФрд╕рдд CPU рдЙрдкрдпреЛрдЧ рдЕрдХреНрд╕рд░ рдПрдХрд▓-рдЕрдВрдХреАрдп рдкреНрд░рддрд┐рд╢рдд рд╕реАрдорд╛ рдореЗрдВ рд░рд╣рддрд╛ рд╣реИ,"
рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣рдо рд╕рдЪрдореБрдЪ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд▓реЛрдЧ YAML рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдорд╛рди рдмрджрд▓реЗрдВ? рдирд╣реАрдВ, рдорд╢реАрдиреЗрдВ рдЗрд╕реЗ рдмрд╣реБрдд рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рдХрд░ рд╕рдХрддреА рд╣реИрдВ! рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕
рдореИрдВрдиреЗ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд▓рд┐рдЦрд╛
EC2 рд╕реНрдкреЙрдЯ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
рдЕрдВрддрд┐рдо рд▓реЗрдХрд┐рди рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд, рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рд╡рд░реНрдХрд░ рдиреЛрдбреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдкреЙрдЯ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ AWS EC2 рд▓рд╛рдЧрдд рдХреЛ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
EC2 рд╕реНрдкреЙрдЯ рдкрд░ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреИрд╕реЗ рдЪрд▓рд╛рдПрдВ? рдХрдИ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ: SpotInst (рдЬрд┐рд╕реЗ рдЕрдм "Spot" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдореБрдЭрд╕реЗ рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рди рдкреВрдЫреЗрдВ) рдЬреИрд╕реА рддреГрддреАрдп рдкрдХреНрд╖ рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдпрд╛ рдмрд╕ рдЕрдкрдиреЗ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдПрдХ Spot AutoScalingGroup (ASG) рдЬреЛрдбрд╝реЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдВ рдХрдИ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде "рдХреНрд╖рдорддрд╛-рдЕрдиреБрдХреВрд▓рд┐рдд" рд╕реНрдкреЙрдЯ рдПрдПрд╕рдЬреА рдХреЗ рд▓рд┐рдП рдХреНрд▓рд╛рдЙрдбрдлреЙрд░реНрдореЗрд╢рди рд╕реНрдирд┐рдкреЗрдЯ рд╣реИ:
MySpotAutoScalingGroup:
Properties:
HealthCheckGracePeriod: 300
HealthCheckType: EC2
MixedInstancesPolicy:
InstancesDistribution:
OnDemandPercentageAboveBaseCapacity: 0
SpotAllocationStrategy: capacity-optimized
LaunchTemplate:
LaunchTemplateSpecification:
LaunchTemplateId: !Ref LaunchTemplate
Version: !GetAtt LaunchTemplate.LatestVersionNumber
Overrides:
- InstanceType: "m4.2xlarge"
- InstanceType: "m4.4xlarge"
- InstanceType: "m5.2xlarge"
- InstanceType: "m5.4xlarge"
- InstanceType: "r4.2xlarge"
- InstanceType: "r4.4xlarge"
LaunchTemplate:
LaunchTemplateId: !Ref LaunchTemplate
Version: !GetAtt LaunchTemplate.LatestVersionNumber
MinSize: 0
MaxSize: 100
Tags:
- Key: k8s.io/cluster-autoscaler/node-template/label/aws.amazon.com/spot
PropagateAtLaunch: true
Value: "true"
рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рд╕реНрдкреЙрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рдХреБрдЫ рдиреЛрдЯреНрд╕:
- рдЖрдкрдХреЛ рд╕реНрдкреЙрдЯ рдЯрд░реНрдорд┐рдиреЗрд╢рди рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдмрдВрдж рд╣реЛрдиреЗ рдкрд░ рдиреЛрдб рдХреЛ рдорд░реНрдЬ рдХрд░рдХреЗ
- рдЬрд╝рд╛рд▓реИрдВрдбреЛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ
рдХрд╛рдБрдЯрд╛ рдиреЛрдб рдкреВрд▓ рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдХреНрд▓рд╕реНрдЯрд░ рдСрдЯреЛрд╕реНрдХреЗрд▓рд┐рдВрдЧ - рд╕реНрдкреЙрдЯ рдиреЛрдбреНрд╕
рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рд╕реНрдкреЙрдЯ рдореЗрдВ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрднрд╛рд░ рдХрд╛ "рдкрдВрдЬреАрдХрд░рдг" рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВ
рд╕рд╛рд░рд╛рдВрд╢
рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдП рдЧрдП рдХреБрдЫ рдЙрдкрдХрд░рдг рдЖрдкрдХреЗ рдХреНрд▓рд╛рдЙрдб рдмрд┐рд▓ рдХреЛ рдХрдо рдХрд░рдиреЗ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд▓рдЧреЗрдВрдЧреЗред рдЖрдк рд▓реЗрдЦ рдХреА рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рд╛рдордЧреНрд░реА рдпрд╣рд╛рдВ рднреА рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ
рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдкрд░ рдХреНрд▓рд╛рдЙрдб рд▓рд╛рдЧрдд рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреА рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдерд╛рдПрдБ рдХреНрдпрд╛ рд╣реИрдВ? рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдпрд╣рд╛рдВ рдмрддрд╛рдПрдВ
рд╕реНрд░реЛрдд: www.habr.com