๋กœ์ผ“๐Ÿพ
article thumbnail
๋ฐ˜์‘ํ˜•

 

 

 

์˜ˆ์ „๋ถ€ํ„ฐ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ์žˆ์–ด์„œ ๊ถ๊ธˆํ•œ ์ ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

"์—„์ฒญ ๋‚˜๊ฒŒ ๋งŽ์€ ๋กœ๊ทธ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋“ค๋กœ ์ธํ•ด ๋…ธ๋“œ์˜ ๋””์Šคํฌ๊ฐ€ ๋ถ€์กฑํ•ด์ง€๋ฉด ์–ด๋–กํ•˜์ง€?"

 

"๊ณ„์† ์ƒˆ๋กœ์šด ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์šด ๋ฐ›์•„์„œ ๊ทธ๋กœ ์ธํ•ด ๋…ธ๋“œ์˜ ๋””์Šคํฌ๊ฐ€ ๋ถ€์กฑํ•ด์ง€๋ฉด ์–ด๋–กํ•˜์ง€?"

 

๋…ธ๋“œ์˜ ๋””์Šคํฌ๊ฐ€ ๋ถ€์กฑํ•˜๊ฒŒ ๋˜๋ฉด ๋…ธ๋“œ์—์„œ DiskPressure ๋ผ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ๋ฑ‰๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.  ๊ทธ๋Ÿฐ๋ฐ ๊ถ๊ธˆํ•œ ์š”์ ์€ ๋””์Šคํฌ๊ฐ€ ๋ถ€์กฑํ•  ๋•Œ "์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•˜๋ƒ" ๊ฐ€ ์•„๋‹ˆ๊ณ  "์–ด๋–ป๊ฒŒ ์˜ˆ๋ฐฉํ•˜๋ƒ" ์ž…๋‹ˆ๋‹ค. 

 

๊ทธ๋ž˜์„œ ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ์˜ˆ๋ฐฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

 

๋ ›์ธ ๋‘๋”์ฝ”๋“œ~

 

 

์ €๋Š” ๊ฐœ์ธ์ ์œผ๋กœ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๋ฉด์„œ ๊ฐ€์žฅ ์ค‘์š”์‹œํ•˜๊ฒŒ ์ƒ๊ฐํ•˜๋Š” ํ‚ค์›Œ๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ”๋กœ ์ผ์‹œ์ (empheral) ๊ณผ ๋™์ (Dynamic) ์ž…๋‹ˆ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด, ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ๊ฐ€์žฅ ๊ธฐ๋ณธ ๋‹จ์œ„์ธ ํŒŒ๋“œ๋Š” ์–ธ์ œ, ์–ด๋””์„œ๋“  ์ •์ƒ์ ์ธ ์ข…๋ฃŒ๊ฐ€ ๋  ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๋Š” ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๊ณ  ์žˆ์–ด์•ผ ํ•˜๋ฉฐ, ์ข…๋ฃŒ ๋˜์—ˆ์„ ๋•Œ ๋‹ค๋ฅธ ๋ฆฌ์†Œ์Šค์— ์˜ํ–ฅ์ด ์—†์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ดํ›„ ๋‹ค์‹œ ์ƒ์„ฑ๋˜๋”๋ผ๋„ ์ด์ „ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๊ฒŒ๋” ๊ตฌ์„ฑ์„ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. 

pod, pvc, sc, efs ์˜ ๊ด€๊ณ„

 

ํŒŒ๋“œ์˜ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๋Š” ๊ฐ€์žฅ ํšจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ•์€ Storage Class, PV ๊ทธ๋ฆฌ๊ณ  PVC ๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ ์ž…๋‹ˆ๋‹ค. 

๋” ๋‚˜์•„๊ฐ€ NFS ์™€ ๊ฐ™์€ ๋„คํŠธ์›Œํฌ ํŒŒ์ผ ์‹œ์Šคํ…œ์„ ๋„์ž…ํ•˜๋ฉด ์‰ฌ์šฐ๋ฉด์„œ ํšจ์œจ์ ์œผ๋กœ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์–ด๋Š ๋…ธ๋“œ์— ํŒŒ๋“œ๊ฐ€ ์‹คํ–‰๋˜๋“  ์ง€ Stateful ํ•œ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์ฃ .

 

AWS EFS ๋ฅผ ์ด์šฉํ•ด์„œ Storage Class, PV ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๊ถ๊ธˆํ•˜๋‹ค๋ฉด ์—ฌ๊ธฐ!

 

๊ทธ๋Ÿฐ๋ฐ ๋ฌธ์ œ๋Š” ์šฐ๋ฆฌ๊ฐ€ ํ”ํžˆ kubectl logs ๋ช…๋ น์–ด๋ฅผ ์จ์„œ ๋ณด๋Š” ์ปจํ…Œ์ด๋„ˆ์˜ ๋กœ๊ทธ๋“ค์€ ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์— ์ €์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

Nginx ๋กœ ์‚ดํŽด๋ณด๋ฉด ๋ฆฌ๋ˆ…์Šค ํ‘œ์ค€ ์ถœ๋ ฅ์ธ stdout ์œผ๋กœ ๋กœ๊ทธ๊ฐ€ ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค. 

nginx ์ปจํ…Œ์ด๋„ˆ

 

access.log ์™€ error.log ๊ฐ€ ๊ฐ stdout, stderr ์™€ ์†Œํ”„ํŠธ ๋งํฌ ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋”ฐ๋ผ์„œ ์ด๋Ÿฌํ•œ ํ‘œ์ค€ ์ถœ๋ ฅ์€ ํŒŒ๋“œ์— ์ €์žฅ๋˜์ง€ ์•Š์•„, NFS ์™€ ๊ฐ™์€ ํŒŒ์ผ ์‹œ์Šคํ…œ์„ ํ™œ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

 

์—ฌ๊ธฐ์„œ ์ž ๊น!

ํŒŒ๋“œ์˜ Sidecar Pattern ์„ ์ด์šฉํ•ด์„œ Sidecar ์ปจํ…Œ์ด๋„ˆ์— ๋”ฐ๋กœ ๋กœ๊ทธ๋ฅผ ์ €์žฅํ•ด NFS ๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๊ฒ ์ง€๋งŒ, ๋งค๋ฒˆ ๋ฐฐํฌํ•ด์•ผ ํ•˜๋Š” ํŒŒ๋“œ์— Sidecar ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€์ด ์žˆ์ฃ .

๊ทธ์น˜๋งŒ ์ด ๋ฐฉ๋ฒ•๋„ ์•„์ฃผ ์ข‹์€ ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

 

๊ฐ„๋‹จํ•˜๊ฒŒ ํ•œ๋ฒˆ ๋‹ค๋ค„๋ณด๋„๋ก ํ•˜์ฃ .

 

์‚ฌ์šฉํ•  yaml ์€ ์•„๋ž˜์™€ ๊ฐ™์•„์š”!

apiVersion: v1
kind: Pod
metadata:
  name: nginx-sidecar
spec:
  containers:
    - name: nginx
      image: nginx
      ports:
        - containerPort: 80
      volumeMounts:
        - name: log
          mountPath: /var/log/nginx
    - name: sidecar-access
      image: busybox
      args: [/bin/sh, -c, 'tail -n+1 -f /var/log/nginx/access.log']
      volumeMounts:
        - name: log
          mountPath: /var/log/nginx
    - name: sidecar-error
      image: busybox
      args: [/bin/sh, -c, 'tail -n+1 -f /var/log/nginx/error.log']
      volumeMounts:
        - name: log
          mountPath: /var/log/nginx
  volumes:
    - name: log
      emptyDir: {}
  nodeSelector:
    kubernetes.io/hostname: k8s-worker-3

 

๋„์‹ํ™”ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ฃ !

Nginx ์ปจํ…Œ์ด๋„ˆ์™€ 2๊ฐœ์˜ ์‚ฌ์ด๋“œ์นด ์ปจํ…Œ์ด๋„ˆ

 

 

Nginx ์ปจํ…Œ์ด๋„ˆ์—์„œ curl ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด localhost ๋กœ ์ ‘๊ทผํ•˜์—ฌ ํ‘œ์ค€ ์ถœ๋ ฅ์„ ์–ป๊ฒŒ ๋˜๊ณ ,

 

Sidecar access ์ปจํ…Œ์ด๋„ˆ๋กœ ์ ‘์†ํ•ด์„œ access.log ๋ฅผ ํ™•์ธํ•ด๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ๋กœ๊ทธ๊ฐ€ ์ž…๋ ฅ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿผ ๋‹ค์Œ Fluentd ๋‚˜ Loki ๋ฅผ ์ด์šฉํ•ด์„œ ๋กœ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•ด๋‚˜๊ฐ€๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

ํ•˜์ง€๋งŒ ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ๋ฐ”์™€ ๊ฐ™์ด ์‚ฌ์ด๋“œ์นด๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๋ถˆํŽธํ•จ์ด ์žˆ์Šต๋‹ˆ๋‹ค. (์ €๋งŒ ๋ถˆํŽธํ•œ ๊ฒƒ์ผ ์ˆ˜๋„..)

 

 

๋กœ๊ทธ๋กœ ์ธํ•œ ๋””์Šคํฌ ๋ถ€์กฑ


 

๊ทธ๋Ÿผ ๋‹ค์‹œ ๋ณธ๋ก ์œผ๋กœ ๋Œ์•„์˜ค๊ฒ ์Šต๋‹ˆ๋‹ค.

 

stdout ์œผ๋กœ๋งŒ ๋กœ๊ทธ๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค๊ณ  ํ•ด์„œ ๋กœ๊ทธ๋ฅผ ํŒŒ์ผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ํŒŒ๋“œ๊ฐ€ ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š” ๋…ธ๋“œ์— ์ ‘๊ทผํ•˜๋ฉด ๊ด€๋ จ๋œ ๋กœ๊ทธ๋ฅผ ํŒŒ์ผ๋กœ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

/var/log/pods

 

๋ณดํ†ต ๋…ธ๋“œ์˜ /var/log/pods ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค

 

๋”ฐ๋ผ์„œ ํŒŒ๋“œ ๋‚ด์— ๋กœ๊ทธ๊ฐ€ ์ €์žฅ๋˜์ง€ ์•Š๋”๋ผ๋„ ๋…ธ๋“œ์— ์ €์žฅ์ด ๋˜๊ณ , ๋กœ๊ทธ๊ฐ€ ์ง€์†์ ์œผ๋กœ ์Œ“์ด๊ฒŒ ๋œ๋‹ค๋ฉด ์ถฉ๋ถ„ํžˆ ๋…ธ๋“œ์— ๋””์Šคํฌ๊ฐ€ ๋ถ€์กฑํ•ด์ง€๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Nginx ๊ฐ€ ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š” ๋…ธ๋“œ์— ์ง์ ‘ ์ ‘๊ทผํ•ด์„œ ํ™•์ธ ๊ฐ€๋Šฅ

 

default_nginx_ ๋’ค์— ์žˆ๋Š” ๋‚œ์ˆ˜๋Š” Pod ์˜ Uid ์ž…๋‹ˆ๋‹ค
crictl ps ์™€ crictl inspect <cotainer_id> | grep "uid" ๋กœ ์•Œ์•„ ๋‚ผ ์ˆ˜ ์žˆ์ฃ .

 

EKS ๋ฅผ ์ด์šฉํ•ด์„œ ๋…ธ๋“œ๋“ค์„ ๊ตฌ์„ฑํ•  ๋•Œ, ๋ชจ๋ฒ” ์‚ฌ๋ก€๋Š” SSH ๋กœ ์ธํ•œ ์ ‘๊ทผ์„ ๋ง‰๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ SSH ์ ‘๊ทผ์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ ์ง์ ‘์ ์œผ๋กœ ๋กœ๊ทธ๋ฅผ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜์ฃ . ๊ณ„์† ์Œ“์—ฌ๋งŒ ๊ฐˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค. 

 

EC2 Userdata ๋ฅผ ์ด์šฉํ•ด์„œ CronTab ๊ณผ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ด์šฉํ•ด์„œ ํŠน์ • ๊ธฐ๊ฐ„ ๋™์•ˆ ์•ก์„ธ์Šค ๋˜์ง€ ์•Š์€ ๋กœ๊ทธ๋ฅผ ์‚ญ์ œํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ์„ ์ˆ˜ ์žˆ๊ฒ ์ง€๋งŒ, ์ด๊ฒƒ๋„ ์ฉ ๋‚ดํ‚ค๋Š” ๋ฐฉ๋ฒ•์€ ์•„๋‹™๋‹ˆ๋‹ค. 

 

 

์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋กœ ์ธํ•œ ๋””์Šคํฌ ๋ถ€์กฑ 


 

๋ฐ”๋กœ ์œ„์—์„  ์ถ•์ ๋œ ๋กœ๊ทธ๋กœ ์ธํ•ด ๋…ธ๋“œ์— ๋””์Šคํฌ ๋ถ€์กฑ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ์„ ๋ดค๋‹ค๋ฉด, ์ด๋ฒˆ์—๋Š” ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋กœ ์ธํ•ด ๋””์Šคํฌ ๋ถ€์กฑ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

๋…ธ๋“œ ์ ‘์†ํ•ด์„œ crictl ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์ด๋ฏธ์ง€๋“ค์˜ ์‚ฌ์ด์ฆˆ๋ฅผ ๋ณผ ์ˆ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์šด๋กœ๋“œ ๋œ ์ด๋ฏธ์ง€๋“ค

 

ํ˜„์žฌ ์‚ฌ์šฉํ•˜๋Š” ์ด๋ฏธ์ง€๋ผ๋ฉด ์ƒ๊ด€์—†์ง€๋งŒ, ๋ถ„๋ช… ๋…ธ๋“œ์—์„œ ์‚ญ์ œ๋˜์–ด ๋ถˆํ•„์š”ํ•œ ์ด๋ฏธ์ง€๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์„ ๊ฒ๋‹ˆ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด, Nginx 1.23 ๋ฒ„์ „์„ ์“ฐ๊ณ  ์žˆ๋‹ค๊ฐ€ ๋˜‘๊ฐ™์€ ๋…ธ๋“œ์—์„œ 1.24 ๋ฒ„์ „์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ ํ•œ๋‹ค๋ฉด ์ด์ „ ์ด๋ฏธ์ง€๋Š” ๋” ์ด์ƒ ์“ธ๋ชจ๊ฐ€ ์—†๊ณ  ์šฉ๋Ÿ‰๋งŒ ์ฐจ์ง€ํ•˜๊ณ  ์žˆ๊ฒŒ ๋˜์ฃ .

 

๋”ฐ๋ผ์„œ ์ด๋Ÿฌํ•œ ๋ถˆํ•„์š”ํ•œ ์ด๋ฏธ์ง€๋“ค์ด ์Œ“์ด๋ฉด ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋…ธ๋“œ๋Š” ๊ธˆ๋ฐฉ ์šฉ๋Ÿ‰์ด ๋ถ€์กฑํ•ด ์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

 

๋””์Šคํฌ ๋ถ€์กฑ ๋ฏธ๋ฆฌ ์˜ˆ๋ฐฉํ•˜๊ธฐ


 

์šฐ์„  ์ถ•์ ๋œ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋กœ ์ธํ•œ ๋””์Šคํฌ ๋ถ€์กฑ์— ๋Œ€ํ•ด ์˜ˆ๋ฐฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

์•„๋งˆ EKS ๋“ , ๋กœ์ปฌ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋“  ์ด๋ฏธ ์ด ์˜ˆ๋ฐฉ ๋ฐฉ๋ฒ•์€ ์‚ฌ์šฉํ•˜๊ณ  ๊ณ„์‹ค ๊ฒ๋‹ˆ๋‹ค.

 

๋ฐ”๋กœ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ ์ž…๋‹ˆ๋‹ค.

 

๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๋Š” Kubelet ์— ๋‚ด์žฅ๋˜์–ด Kubelet ์ด ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š” ๋…ธ๋“œ์—์„œ ์ด๋ฏธ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ์˜ ๊ฐ€๋น„์ง€๋ผ ํ•˜๋ฉด ์ข…๋ฃŒ๋œ ์žก, ๊ณ ์•„ ์˜ค๋ธŒ์ ํŠธ, ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ์ปจํ…Œ์ด๋„ˆ์™€ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€, ๋ณผ๋ฅจ ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

https://kubernetes.io/ko/docs/concepts/architecture/garbage-collection/

 

 

๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๊ฐ€ ๋…ธ๋“œ ๋‚ด์—์„œ ๋ถˆํ•„์š”ํ•œ ์ด๋ฏธ์ง€๋ฅผ ๋ชจ๋‘ ์‚ญ์ œํ•ด์ฃผ์—ˆ๋˜ ๊ฒƒ์ด์ฃ .

 

๊ทธ๋Ÿผ ์ง„์งœ ๋ถˆํ•„์š”ํ•œ ์ด๋ฏธ์ง€๊ฐ€ ์‚ญ์ œ๋˜๋Š” ์ง€ ํ•œ๋ฒˆ ์•Œ์•„๋ณด์ฃ !

 

aws-cli ๋ฅผ ์ด์šฉํ•˜๋Š” ํŒŒ๋“œ๋ฅผ ๋ฐฐํฌํ•จ์— ๋”ฐ๋ผ ๋…ธ๋“œ์—๋Š” aws-cli ์ปจํ…Œ์ด๋„ˆ์™€  aws-cli ์ด๋ฏธ์ง€๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

aws-cli ์ปจํ…Œ์ด๋„ˆ
aws-cli ์ด๋ฏธ์ง€

 

istio-proxy ๋Š” ์ด์Šคํ‹ฐ์˜ค์— ์˜ํ•ด ์ž๋™ ์ฃผ์ž… ๋˜์–ด์„œ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  ์•„๋ž˜์™€ ๊ฐ™์€ ํด๋”์— ์ด์ œ stdout ์œผ๋กœ ์ถœ๋ ฅ๋˜๋Š” ๋ฐ์ดํ„ฐ๋“ค์„ ์ €์žฅํ•˜๊ณ  ์žˆ์ฃ .

๋…ธ๋“œ์— ์ง์ ‘ ์ €์žฅ๋˜์–ด ์žˆ๋Š” ํ‘œ์ค€ ์ถœ๋ ฅ

 

์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€, ๋กœ๊ทธ ๋ชจ๋‘ ๋…ธ๋“œ์˜ ์ง์ ‘์ ์ธ ๋””์Šคํฌ๋ฅผ ์ฐจ์ง€ํ•˜๋Š” ๊ฑธ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ดํ›„, ์ด์ œ ๋‹ค์‹œ aws-cli ํŒŒ๋“œ๋ฅผ ์‚ญ์ œํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ Kubelet ์ด ์•„๋ž˜์™€ ๊ฐ™์€ ๋กœ๊ทธ๋ฅผ ์ถœ๋ ฅํ•˜๋ฉด์„œ ๊ด€๋ จ ์ปจํ…Œ์ด๋„ˆ์™€ ๋กœ๊ทธ๊ฐ€ ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๋ณผ๋ฅจ ๋“ฑ์„ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

kubelet ๋กœ๊ทธ

 

journalctl | grep -i "kubelet" ์„ ํ†ตํ•ด kubelet ์˜ ๋กœ๊ทธ๋ฅผ ๊ด€์ฐฐ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๊ณต์‹ ๋ฌธ์„œ์— ๋‚˜์™€ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ  ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ์ปจํ…Œ์ด๋„ˆ์— ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘์€ 1๋ถ„๋งˆ๋‹ค ์ˆ˜ํ–‰๋˜๋Š” ๊ฒƒ์„ ํ™•์ธ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋กœ๊ทธ ๋˜ํ•œ ์‚ญ์ œ๋˜์—ˆ์ฃ .

์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ์ปจํ…Œ์ด๋„ˆ์™€ ์ด๋ฏธ์ง€ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘

 

๊ทธ๋Ÿฐ๋ฐ ๋ฌธ์ œ๋Š” 5๋ถ„์ด ์ง€๋‚˜๋„ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ์ด๋ฏธ์ง€๋Š” ๊ทธ๋Œ€๋กœ ๋‚จ์•„ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ํ•œ๋ฒˆ kubelet ์˜ config ๋ฅผ ์ˆ˜์ • ํ•ด๋ณด๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค.

https://kubernetes.io/docs/reference/config-api/kubelet-config.v1beta1/#kubelet-config-k8s-io-v1beta1-KubeletConfiguration

 

์œ„ ์˜ต์…˜๋“ค์ด ์ด๋ฏธ์ง€์™€ ๊ด€๋ จ๋œ ์˜ต์…˜์ธ ๊ฑฐ ๊ฐ™์•„์„œ ํ•ด๋‹น ๋ถ€๋ถ„์„ ์ˆ˜์ •ํ•ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

/var/lib/kubelet/config.yaml

 

kubectl ์˜ config ์œ„์น˜๋Š” /var/lib/kubelet/config.yaml ์ž…๋‹ˆ๋‹ค.

 

 

imageMinimumGCAge ์€ ์ง€์ •๋œ ์‹œ๊ฐ„๋งŒํผ์€ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ์— ์˜ํ•ด ์‚ญ์ œ๋˜์ง€ ์•Š๋Š” ์˜ต์…˜์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ๊ฑด imageGCHighThresholdPercent ์™€ imageGCLowThresholdPercent ์ž…๋‹ˆ๋‹ค.

 

imageGCHighThresholdPercent ์€ ๊ธฐ๋ณธ๊ฐ’์ด 85์ธ๋ฐ ํ˜„์žฌ ๋…ธ๋“œ์˜ ๋‚จ์•„์žˆ๋Š” ๋””์Šคํฌ ์šฉ๋Ÿ‰์„ ํผ์„ผํŠธ๋กœ ๊ณ„์‚ฐํ•ด์„œ 85 ์ด์ƒ์ด๋ผ๋ฉด ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๊ฐ€ ํ•ญ์ƒ ์‹คํ–‰๋˜๊ฒŒ๋” ํ•˜๋Š” ์˜ต์…˜์ด๊ณ , imageGCLowThresholdPercent ์€ ๋ฐ˜๋Œ€๋กœ ์ฃผ์–ด์ง„ ๊ฐ’๋ณด๋‹ค ๋‚ฎ๋‹ค๋ฉด ์‹คํ–‰๋˜์ง€ ์•Š๋Š” ์˜ต์…˜์ž…๋‹ˆ๋‹ค.

 

๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๊ฐ€ ํ•ญ์ƒ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋„๋ก imageGCHighThresholdPercent ์€ 1, imageGCLowThresholdPercent ์€ 0 ์„ ๋ถ€์—ฌํ–ˆ์Šต๋‹ˆ๋‹ค.

 

๋ณ€๊ฒฝ๋œ ์˜ต์…˜์ด ์ ์šฉ๋  ์ˆ˜ ์žˆ๋„๋ก kubelet ์„ ์žฌ์‹คํ–‰์„ ํ•ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹คํ–‰ํžˆ ๋ฌด์‚ฌํžˆ ๋™์ž‘ํ•˜๋„ค์š”.

systemctl status kubelet

kubelet ์„ ์žฌ์‹œ์ž‘ํ•˜๋Š” ๋ช…๋ น์–ด๋Š” systemctl restart kubelet ์ž…๋‹ˆ๋‹ค.

 

์ดํ›„ ๋‹ค์‹œ crictl images ๋ช…๋ น์–ด๋กœ ํ™•์ธํ•ด ๋ณธ ๊ฒฐ๊ณผ, aws-cli ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ด์™ธ์— ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ชจ๋“  ์ด๋ฏธ์ง€๊ฐ€ ์‚ญ์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋งˆ์นจ docker image prune ๊ณผ ๊ฐ™์€ ํšจ๊ณผ์˜€์ฃ .

crictl images

 

์ด๋ ‡๊ฒŒ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๋กœ ์ธํ•ด ๋…ธ๋“œ ๋‚ด์— ๋ถˆํ•„์š”ํ•œ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€, ๋ณผ๋ฅจ ๋ฆฌ์†Œ์Šค๋“ค์„ ์ •๋ฆฌํ•˜์—ฌ ์ง€์†์ ์œผ๋กœ ๋””์Šคํฌ๋ฅผ ํ™•๋ณดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿผ ๋‹ค์Œ์œผ๋กœ ๋…ธ๋“œ์— ์ถ•์ ๋œ ๋กœ๊ทธ๋ฅผ ์ธํ•œ ๋””์Šคํฌ ๋ถ€์กฑ์„ ์˜ˆ๋ฐฉํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

์—ฌ๊ธฐ์„œ ๋‹ค์‹œ ํ•œ๋ฒˆ ์ผ์‹œ์ (empheral) ๊ณผ ๋™์ (Dynamic) ์ด๋ผ๋Š” ํ‚ค์›Œ๋“œ๋ฅผ ์ƒ๊ธฐํ•ฉ๋‹ˆ๋‹ค.

 

์ด๋ฒˆ์—๋Š” ์•„์‰ฝ๊ฒŒ๋„ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ์˜ ๋„์›€์„ ๋ฐ›์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ๋กœ์ฌ ๋กœ๊ทธ๋ฅผ ์ง€์›Œ์ฃผ๋Š” ํŠน๋ณ„ํ•œ ๋ฌด์–ธ๊ฐ€๋„ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. (์žˆ๋‹ค๋ฉด ๊ผญ ์•Œ๋ ค์ฃผ์„ธ์š”!)

 

๋ณดํ†ต Cloud ํ™˜๊ฒฝ์—์„œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ ์šด์˜ํ•˜๊ณ  ๊ณ„์‹ค ๊ฒ๋‹ˆ๋‹ค. EKS ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” Karpenter ๋ฅผ ์ด์šฉํ•ด์„œ ๋…ธ๋“œ๋“ค์„ ์Šค์ผ€์ผ ์•„์›ƒํ•˜๊ฑฐ๋‚˜ ์Šค์ผ€์ผ ์—…์„ ํ•˜๊ณ  ๊ณ„์‹ค ๊ฒ๋‹ˆ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  ๋…ธ๋“œ์— ์ €์žฅ๋˜๋Š” ๋ฐ์ดํ„ฐ๋Š” ๋ณดํ†ต ๋กœ๊ทธ ์™€ ๊ฐ™์€ ๋ฐ์ดํ„ฐ์ด์ง€, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰์— ์ค‘์š”ํ•˜์ง„ ์•Š์Šต๋‹ˆ๋‹ค.

 

๊ทธ๋ ‡๋‹ค๋ฉด  ๋กœ๊ทธ ๋ฐ์ดํ„ฐ๋Š” ๋ฏธ๋ฆฌ Fluentd, Loki, AWS Cloudwatch ์™€ ๊ฐ™์€ ๋กœ๊ทธ ์ค‘์•™ ์‹œ์Šคํ…œ์— ๋ชฐ์•„ ๋„ฃ๊ณ , ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰์— ์ค‘์š”ํ•œ ๋ฐ์ดํ„ฐ๋Š” PVC ๋ฅผ ์ด์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ด ๋ง์€ ์ฆ‰์Šจ, ๋” ์ด์ƒ ๋…ธ๋“œ์— ๊ฐ€์น˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค.

 

๊ทธ๋ƒฅ ๋…ธ๋“œ๋ฅผ ์ข…๋ฃŒ์‹œํ‚ค๊ณ  ๋‹ค์‹œ ์‹คํ–‰์‹œ์ผœ ๋ฒ„๋ฆฌ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•ด๋„, ์ด๋ฏธ ์ด์ „ ๋…ธ๋“œ์— ์žˆ๋˜ ๋กœ๊ทธ ๋ฐ์ดํ„ฐ๋“ค์€ ๋กœ๊ทธ ์ค‘์•™ ์‹œ์Šคํ…œ์— ์ €์žฅ๋˜์–ด ์žˆ๊ณ , ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ํ•„์š”ํ•œ ์ค‘์š”ํ•œ ๋ฐ์ดํ„ฐ๋“ค์€ PVC ๋ฅผ ํ†ตํ•ด EFS ์— ์ €์žฅ๋˜์–ด ์žˆ์ฃ .

 

์ด ๋ฐฉ๋ฒ•์€ ๋ถ„๋ช… ์ผ์‹œ์ (empheral) ์ด๋ฉด์„œ ๋™์ (Dynamic) ์ž…๋‹ˆ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ ! Karpenter ๋Š” ๋ถ„๋ช… ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ฃ !

 

์•„๋ž˜๋Š” Karpenter ๋ฆฌ์†Œ์Šค ์ค‘ ํ•˜๋‚˜์ธ NodePools ์˜ ์ผ๋ถ€๋ถ„ ์ž…๋‹ˆ๋‹ค.

https://karpenter.sh/docs/concepts/nodepools/

 

Karpenter v0.32 ๋ฒ„์ „๋ถ€ํ„ฐ Provisioner ๊ฐ€ NodePools ๋กœ ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

 

Karpenter ๊ฐ€ ๊ถ๊ธˆํ•˜๋‹ค๋ฉด ์—ฌ๊ธฐ!

 

 

expireAfter ์ด 720h ๋กœ ์ •์˜๋˜์–ด ์žˆ๋Š”๋ฐ, ๊ทธ ๋ง์€ ์ฆ‰์Šจ, 30 ์ผ ๋’ค์— ํ•ด๋‹น ๋…ธ๋“œ๋ฅผ ์ข…๋ฃŒํ•˜๊ณ  ์ƒˆ๋กญ๊ฒŒ ๋„์šด๋‹ค๋Š” ์˜ต์…˜์ž…๋‹ˆ๋‹ค.

expireAfter ์˜ต์…˜

 

์ด๋ ‡๊ฒŒ ํ•จ์œผ๋กœ์จ ์˜ค๋ž˜ ์ง€์†๋œ ๋…ธ๋“œ์— ๋Œ€ํ•œ ๋ณด์•ˆ ์ทจ์•ฝ์ ์„ ์—†์•จ ์ˆ˜ ์žˆ๊ณ , ๋˜ํ•œ file fragmentation ๊ณผ memory leaks ๋„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋…ธ๋“œ๊ฐ€ ์ข…๋ฃŒ๋˜๊ธฐ ์ง์ „๊นŒ์ง€ ์ง€์†์ ์œผ๋กœ ๋กœ๊ทธ ์ค‘์•™ ์‹œ์Šคํ…œ์— ๋กœ๊ทธ๋ฅผ ์ €์žฅํ•˜๊ณ , ๋…ธ๋“œ๋ฅผ ํ†ต์งธ๋กœ ์ข…๋ฃŒ์‹œํ‚ค๋ฉด์„œ ์•„์˜ˆ ์ด์ „ ๋กœ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ๋‚ ๋ ค๋ฒ„๋ฆฌ๋Š” ๊ฑฐ์ฃ . ๊ทธ๋ฆฌ๊ณ  ๋˜ ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑ๋œ ๋…ธ๋“œ์—์„œ ๋กœ๊ทธ๋ฅผ ์ˆ˜์ง‘ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿฐ๋ฐ ์—ฌ๊ธฐ์„œ ํ•˜๋‚˜ ๋ฌธ์ œ๊ฐ€ ๋˜ ์žˆ์Šต๋‹ˆ๋‹ค. Karpenter ๋ฅผ ์ด์šฉํ•˜์ง€ ์•Š๋Š” ๋กœ์ปฌ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํ™˜๊ฒฝ์€ ์–ด๋–กํ•˜๋ƒ๋Š” ๊ฒƒ์ด์ฃ . CronTab ๊ณผ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์งœ์•ผํ•˜๋Š” ๊ฒƒ์ผ๊นŒ?..

 

๋‹คํ–‰ํžˆ ์—ฌ๊ธฐ๋„ ํ•ด๊ฒฐ์ฑ…์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. Kured(KUbernetes REboot Daemon) ๋ผ๋Š” ํ”„๋กœ์ ํŠธ๊ฐ€ ๋ฐ”๋กœ ๊ทธ ํ•ด๊ฒฐ์ฑ…์ด์ฃ . ์ง์ ‘ ์‚ฌ์šฉํ•ด๋ณด์ง„ ์•Š์•˜์ง€๋งŒ, ์ด๋ฆ„์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด ํŠน์ • ๊ธฐ๊ฐ„๋งˆ๋‹ค ๋ฐ๋ชฌ์ด ๋Œ์•„๊ฐ€๋Š” ๋…ธ๋“œ๋ฅผ ์žฌ๋ถ€ํŒ… ํ•ด์ฃผ๊ณ  ๊ทธ์— ๋”ฐ๋ผ ๋ถˆํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ญ์ œ๋˜๋Š” ๊ฒƒ์„ ๊ธฐ๋Œ€ํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

24๋…„ 1์›” 08์ผ ๊ธฐ์ค€ SandBox ์ด๊ธด ํ•˜์ง€๋งŒ CNCF ํ”„๋กœ์ ํŠธ ์ค‘ ์ผ๋ถ€์ด๊ธฐ ๋•Œ๋ฌธ์— ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์™€๋„ ํ˜ธํ™˜์„ฑ์ด ๋›ฐ์–ด๋‚  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋ฉ๋‹ˆ๋‹ค.

 

https://github.com/kubereboot/kured

 

 

๊ณ„์†ํ•ด์„œ ์Œ“์ด๋Š” ๋กœ๊ทธ ๋ฐ์ดํ„ฐ๋‚˜ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋กœ ์ธํ•ด ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๊ฐ€ ๋ง๊ฐ€์ง€๋ฉด ์–ด๋–กํ•˜์ง€? ๋ผ๋Š” ๊ฑฑ์ •์„ ํ•ด์™”๋Š”๋ฐ, ์ด๋กœ์จ ๋ชจ๋‘ ํ•ด์†Œํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ผ๋Š” ๋…€์„์€ ๊นŒ๋ฉด ๊น” ์ˆ˜๋ก ์ฐธ ์žฌ๋ฐŒ๋Š” ๋…€์„์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์งœ์‹..

 

๊ทธ๋Ÿผ ์˜ค๋Š˜์€ ์—ฌ๊ธฐ๊นŒ์ง€~

 

 

ps. Karpenter ์˜ NodePools ๋กœ Kubelet ์˜ Config ๊ฐ’๋„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค! 

์˜ˆ์ œ์— ๋‚˜์™€์žˆ๋Š” ์˜ต์…˜ ๋ง๊ณ ๋„ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๊ณต์‹ ๋ฌธ์„œ์— ๋‚˜์™€์žˆ๋Š” ์˜ต์…˜๋“ค๋„ ์ถ”๊ฐ€ํ•ด๋„ ๋ฉ๋‹ˆ๋‹ค.

https://karpenter.sh/docs/concepts/nodepools/

๋ฐ˜์‘ํ˜•
profile on loading

Loading...