Post

[Kubernetes] ๐Ÿ” containerd OverlayFS ์Šค๋ƒ…์ƒท ๋””์Šคํฌ ์ ์œ  ์ปจํ…Œ์ด๋„ˆ ์ถ”์ ํ•˜๊ธฐ

containerd OverlayFS ์Šค๋ƒ…์ƒท ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ๋””์Šคํฌ๋ฅผ ๊ณผ๋„ํ•˜๊ฒŒ ์ ์œ ํ•  ๋•Œ, Snapshot ID์—์„œ Container ID, Pod Name๊นŒ์ง€ ์ถ”์ ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋‹จ๊ณ„๋ณ„๋กœ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.

[Kubernetes] ๐Ÿ” containerd OverlayFS ์Šค๋ƒ…์ƒท ๋””์Šคํฌ ์ ์œ  ์ปจํ…Œ์ด๋„ˆ ์ถ”์ ํ•˜๊ธฐ

์ด ๊ธ€์—์„œ๋Š” /var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/ ํ•˜์œ„์˜ ํŠน์ • ์ˆซ์ž ํด๋”๊ฐ€ ์ˆ˜์‹ญ GB๋ฅผ ์ฐจ์ง€ํ•˜๋Š” ์ƒํ™ฉ์—์„œ, ์–ด๋–ค Pod๊ฐ€ ์›์ธ์ธ์ง€ ์ฐพ์•„๋‚ด๋Š” ๊ณผ์ •์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค. Snapshot ID โ†’ Container ID โ†’ Pod Name ์ˆœ์„œ๋กœ ์—ญ์ถ”์ ํ•˜๋ฉฐ, crictl๊ณผ kubectl์„ ์ค‘์‹ฌ์œผ๋กœ ์‹ค๋ฌด์—์„œ ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ช…๋ น์–ด๋ฅผ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.


๐Ÿšจ ๋ฌธ์ œ ์ƒํ™ฉ: ๋””์Šคํฌ ์šฉ๋Ÿ‰ ๊ฒฝ๊ณ 

์„œ๋ฒ„์— DiskPressure ๊ฒฝ๊ณ ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์›์ธ์„ ์ถ”์ ํ•˜๊ธฐ ์œ„ํ•ด du ๋ช…๋ น์–ด๋กœ ์šฉ๋Ÿ‰์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

1
2
3
4
# ์ตœ์ƒ์œ„ ๋””๋ ‰ํ† ๋ฆฌ๋ณ„ ์šฉ๋Ÿ‰ ํ™•์ธ
du -sh /var/lib/containerd/*
# ๋˜๋Š” ์ปค์Šคํ…€ ๋ฐ์ดํ„ฐ ๊ฒฝ๋กœ๋ผ๋ฉด
du -sh /appdata/cri/*

๊ณ„์† ํŒŒ๊ณ ๋“ค๋‹ค ๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ๊ฒฝ๋กœ์—์„œ ํŠน์ • ์ˆซ์ž ํด๋”๊ฐ€ ์ˆ˜์‹ญ GB๋ฅผ ์ฐจ์ง€ํ•˜๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ•ฉ๋‹ˆ๋‹ค.

1
2
du -sh /var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/* \
  | sort -rh | head -20
1
2
3
38G   /var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/11773
2.1G  /var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/11201
...

์ด์ œ 11773์ด๋ผ๋Š” ์Šค๋ƒ…์ƒท ํด๋”๊ฐ€ ์–ด๋А ์ปจํ…Œ์ด๋„ˆยทPod์˜ ๊ฒƒ์ธ์ง€ ์ถ”์ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿงฉ OverlayFS์™€ Snapshotter ๊ฐœ๋… ์ดํ•ด

์ถ”์  ๋ฐฉ๋ฒ•์„ ์ดํ•ดํ•˜๋ ค๋ฉด containerd์˜ ๋ ˆ์ด์–ด ๊ตฌ์กฐ๋ฅผ ๋จผ์ € ํŒŒ์•…ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋””๋ ‰ํ† ๋ฆฌ์—ญํ• 
lowerdir์ฝ๊ธฐ ์ „์šฉ ์ด๋ฏธ์ง€ ๋ ˆ์ด์–ด (Image Layer)
upperdir์ปจํ…Œ์ด๋„ˆ์˜ ์“ฐ๊ธฐ ๋ ˆ์ด์–ด (Write Layer)
workdirOverlayFS ๋‚ด๋ถ€ ์ž„์‹œ ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ
mergedlowerdir + upperdir๋ฅผ ํ•ฉ์ณ ์ปจํ…Œ์ด๋„ˆ์— ๋ณด์ด๋Š” ์ตœ์ข… ๋ทฐ

containerd์˜ Snapshotter๋Š” ๊ฐ ์ปจํ…Œ์ด๋„ˆ ๋ ˆ์ด์–ด๋ฅผ ์ˆซ์ž ID๋กœ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹คํ–‰๋˜๋ฉด ํ•ด๋‹น ์ปจํ…Œ์ด๋„ˆ ์ „์šฉ upperdir๊ฐ€ ์Šค๋ƒ…์ƒท ํด๋” ์•ˆ์— ์ƒ์„ฑ๋˜๋ฉฐ, ์ด ๊ณต๊ฐ„์— ๋กœ๊ทธยท์ž„์‹œ ํŒŒ์ผ ๋“ฑ์ด ์Œ“์ž…๋‹ˆ๋‹ค. ๋กœ๊ทธ๊ฐ€ ํญ๋ฐœํ•˜๊ฑฐ๋‚˜ ์ž„์‹œ ํŒŒ์ผ์ด ๋ˆ„์ˆ˜๋˜๋ฉด ์Šค๋ƒ…์ƒท ํด๋”๊ฐ€ ๋ฌดํ•œ์ • ์ปค์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

Tip: snapshots/<ID>/fs๋Š” ์ปจํ…Œ์ด๋„ˆ์˜ ์‹ค์ œ ํŒŒ์ผ์‹œ์Šคํ…œ(upperdir)์ž…๋‹ˆ๋‹ค. ์ด ์•ˆ์— ํŒŒ์ผ์ด ์Œ“์ด๋ฉด ํ•ด๋‹น ์Šค๋ƒ…์ƒท์˜ ํฌ๊ธฐ๊ฐ€ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ› ๏ธ 1๋‹จ๊ณ„: mount๋กœ ์Šค๋ƒ…์ƒท ๋งˆ์šดํŠธ ์ •๋ณด ํ™•์ธ

๊ฐ€์žฅ ๋จผ์ € ์‹œ๋„ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ mount ๋ช…๋ น์–ด๋กœ ํ•ด๋‹น ์Šค๋ƒ…์ƒท ID๊ฐ€ ์–ด๋–ค ์ปจํ…Œ์ด๋„ˆ์— ๋งˆ์šดํŠธ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

1
2
SNAPSHOT_ID=11773
mount | grep "snapshots/${SNAPSHOT_ID}"

๊ฒฐ๊ณผ ์˜ˆ์‹œ:

1
2
3
overlay on /run/containerd/io.containerd.runtime.v2.task/k8s.io/a3f2b1c0d4e5.../rootfs
type overlay (rw,relatime,lowerdir=.../11770/fs:.../11769/fs,
upperdir=.../11773/fs,workdir=.../11773/work)

upperdir ๊ฒฝ๋กœ ์•ˆ์— ์ปจํ…Œ์ด๋„ˆ์˜ Task ID(ํ•ด์‹œ๊ฐ’)๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํ•ด์‹œ๋ฅผ ๋ฉ”๋ชจํ•ฉ๋‹ˆ๋‹ค.

โš ๏ธ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ด๋ฏธ ์ข…๋ฃŒ๋œ ๊ฒฝ์šฐ mount ๊ฒฐ๊ณผ์— ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ 2๋‹จ๊ณ„๋กœ ๋„˜์–ด๊ฐ€์„ธ์š”.


๐Ÿ”Ž 2๋‹จ๊ณ„: Task ID๋กœ ์ปจํ…Œ์ด๋„ˆ ์ฐพ๊ธฐ

mount ๊ฒฐ๊ณผ์—์„œ ์–ป์€ Task ํ•ด์‹œ๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.

1
2
TASK_HASH=a3f2b1c0d4e5...
ctr -n k8s.io c ls | grep ${TASK_HASH}

๋˜๋Š” crictl์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

1
crictl ps -a | grep ${TASK_HASH}

๐Ÿ”‘ 3๋‹จ๊ณ„: crictl inspect๋กœ Snapshot ID ์—ญ์ถ”์ 

mount ๊ฒฐ๊ณผ ์—†์ด ์Šค๋ƒ…์ƒท ID๋งŒ ์•Œ๊ณ  ์žˆ์„ ๋•Œ, crictl inspect์˜ snapshotKey ํ•„๋“œ๋ฅผ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค.

1
2
3
4
5
6
7
8
# ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ ์Šค๋ƒ…์ƒท ID ๊ฒ€์ƒ‰
crictl ps -a -q | while read CONTAINER_ID; do
  RESULT=$(crictl inspect ${CONTAINER_ID} 2>/dev/null | grep -i "11773")
  if [ -n "${RESULT}" ]; then
    echo "Found in container: ${CONTAINER_ID}"
    crictl inspect ${CONTAINER_ID} | grep -E '"name"|"image"|snapshotKey'
  fi
done

๋˜๋Š” jq๊ฐ€ ์„ค์น˜๋œ ํ™˜๊ฒฝ์—์„œ๋Š” ๋” ์ •ํ™•ํ•˜๊ฒŒ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

1
2
3
4
5
6
7
8
9
10
11
SNAPSHOT_ID=11773
crictl ps -a -q | while read CID; do
  SNAP=$(crictl inspect ${CID} 2>/dev/null \
    | jq -r '.info.runtimeSpec.annotations["io.kubernetes.cri.sandbox-id"] // empty' 2>/dev/null)
  ROOTFS=$(crictl inspect ${CID} 2>/dev/null \
    | jq -r '.info.config.image.image // empty' 2>/dev/null)
  if crictl inspect ${CID} 2>/dev/null | grep -q "snapshots/${SNAPSHOT_ID}"; then
    echo "Container ID : ${CID}"
    echo "Image        : ${ROOTFS}"
  fi
done

๐Ÿ—‚๏ธ 4๋‹จ๊ณ„: Container ID โ†’ Pod Name ์—ฐ๊ฒฐ

์ปจํ…Œ์ด๋„ˆ ID๋ฅผ ์ฐพ์•˜๋‹ค๋ฉด, ํ•ด๋‹น ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์†ํ•œ Pod๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

1
2
3
4
5
6
7
CONTAINER_ID=a3f2b1c0d4e5

# Pod ID(์ƒŒ๋“œ๋ฐ•์Šค ID) ํ™•์ธ
crictl inspect ${CONTAINER_ID} | grep -i sandbox

# Pod ์ƒ์„ธ ์ •๋ณด ํ™•์ธ
crictl inspectp <POD_SANDBOX_ID>

๋˜๋Š” crictl ps ์ถœ๋ ฅ์—์„œ ์ง์ ‘ Pod ์ด๋ฆ„์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

1
crictl ps -a --output=table | grep ${CONTAINER_ID}

์ถœ๋ ฅ ์˜ˆ์‹œ:

1
2
CONTAINER    IMAGE    CREATED    STATE    NAME    ATTEMPT    POD ID    POD
a3f2b1c0d4e5 ...      2h ago     Running  app     0          b4c3d2e1  my-app-7d6f9b-xkpqr

Pod ์ด๋ฆ„์„ ํ™•์ธํ–ˆ๋‹ค๋ฉด kubectl๋กœ ์ƒ์„ธ ์ •๋ณด๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.

1
2
kubectl get pod my-app-7d6f9b-xkpqr -n <namespace> -o wide
kubectl describe pod my-app-7d6f9b-xkpqr -n <namespace>

๐Ÿ”ฌ 5๋‹จ๊ณ„: ์Šค๋ƒ…์ƒท ๋‚ด๋ถ€ ํŒŒ์ผ ํ™•์ธ

์–ด๋–ค ํŒŒ์ผ์ด ์šฉ๋Ÿ‰์„ ์ ์œ ํ•˜๋Š”์ง€ ์ง์ ‘ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

1
2
3
4
5
6
# ์Šค๋ƒ…์ƒท์˜ upperdir(์‹ค์ œ ์ปจํ…Œ์ด๋„ˆ ์“ฐ๊ธฐ ๋ ˆ์ด์–ด) ํƒ์ƒ‰
ls -lh /var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/11773/fs/

# ํ•˜์œ„ ๋””๋ ‰ํ† ๋ฆฌ๋ณ„ ์šฉ๋Ÿ‰ ํ™•์ธ
du -sh /var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/11773/fs/* \
  | sort -rh | head -20

๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ๋‹ค์Œ ๊ฒฝ๋กœ์—์„œ ํŒŒ์ผ์ด ํญ์ฆํ•ฉ๋‹ˆ๋‹ค.

1
2
3
/var/log/               โ† ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ๊ทธ ๋ˆ„์ˆ˜
/tmp/                   โ† ์ž„์‹œ ํŒŒ์ผ ๋ˆ„์ˆ˜
/var/cache/             โ† ์บ์‹œ ํŒŒ์ผ ๋ฏธ์ •๋ฆฌ

โœ… ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

๋ฒ”์ธ Pod ์žฌ์‹œ์ž‘ ๋˜๋Š” ์‚ญ์ œ

1
2
3
4
5
# Pod ์žฌ์‹œ์ž‘ (Deployment ๋“ฑ ์ƒ์œ„ ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ)
kubectl rollout restart deployment/<deployment-name> -n <namespace>

# Pod ์ง์ ‘ ์‚ญ์ œ (ReplicaSet์ด ์ƒˆ Pod๋ฅผ ์ƒ์„ฑ)
kubectl delete pod my-app-7d6f9b-xkpqr -n <namespace>

โš ๏ธ rm -rf snapshots/11773 ๊ฐ™์€ ์ง์ ‘ ์‚ญ์ œ๋Š” ์ ˆ๋Œ€ ํ•˜์ง€ ๋งˆ์„ธ์š”. containerd ๋Ÿฐํƒ€์ž„ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์™€ ๋ถˆ์ผ์น˜๊ฐ€ ๋ฐœ์ƒํ•ด ๋…ธ๋“œ๊ฐ€ ๋ถˆ์•ˆ์ •ํ•ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฏธ์‚ฌ์šฉ ์ด๋ฏธ์ง€ยท์ปจํ…Œ์ด๋„ˆ ์ •๋ฆฌ

1
2
3
4
5
6
7
8
9
10
11
12
# ์ข…๋ฃŒ๋œ ์ปจํ…Œ์ด๋„ˆ ์กฐํšŒ ๋ฐ ์‚ญ์ œ
crictl ps -a --state exited
crictl rm $(crictl ps -a --state exited -q)

# ๋ฏธ์‚ฌ์šฉ ์ด๋ฏธ์ง€ ์ •๋ฆฌ
crictl rmi --prune

# ctr๋ฅผ ์ด์šฉํ•œ ์ •๋ฆฌ (24์‹œ๊ฐ„ ์ด์ƒ ๋ฏธ์‚ฌ์šฉ)
ctr -n k8s.io images prune --all-unused --older-than 24h

# ์Šค๋ƒ…์ƒท ์ •๋ฆฌ
ctr -n k8s.io snapshots prune

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ๊ทธ ๋กœํ…Œ์ด์…˜ ์„ค์ •

์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ ๋กœ๊ทธ๊ฐ€ ์Œ“์ธ๋‹ค๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋กœ๊ทธ ๋กœํ…Œ์ด์…˜์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

1
2
3
4
5
6
7
8
# Deployment์— ์ปจํ…Œ์ด๋„ˆ ๋กœ๊ทธ ํฌ๊ธฐ ์ œํ•œ ์ถ”๊ฐ€
spec:
  containers:
  - name: app
    # ...
    resources:
      limits:
        ephemeral-storage: "2Gi"   # ์ž„์‹œ ์Šคํ† ๋ฆฌ์ง€ ์ƒํ•œ ์„ค์ •

๐Ÿ›ก๏ธ ์˜ˆ๋ฐฉ: Kubelet GC ๋ฐ containerd GC ์„ค์ •

Kubelet ์ด๋ฏธ์ง€ GC ์„ค์ •

/var/lib/kubelet/config.yaml์— ๋‹ค์Œ ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

1
2
imageGCHighThresholdPercent: 85   # 85% ์ดˆ๊ณผ ์‹œ GC ์‹œ์ž‘
imageGCLowThresholdPercent: 80    # 80%๊นŒ์ง€ ์ •๋ฆฌ

containerd ์ฃผ๊ธฐ์  GC ์„ค์ •

/etc/containerd/config.toml์— GC ์Šค์ผ€์ค„๋Ÿฌ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

1
2
3
4
5
6
[plugins."io.containerd.gc.v1.scheduler"]
  pause_threshold = 0.02
  deletion_threshold = 0
  mutation_threshold = 100
  schedule_delay = "0s"
  startup_delay = "100ms"

๋””์Šคํฌ ์‚ฌ์šฉ๋Ÿ‰ ๋ชจ๋‹ˆํ„ฐ๋ง

Prometheus๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด node_filesystem_avail_bytes ๋ฉ”ํŠธ๋ฆญ์— ์•Œ๋žŒ์„ ์„ค์ •ํ•˜์—ฌ DiskPressure ์ด์ „์— ์กฐ์น˜๋ฅผ ์ทจํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

1
2
3
4
5
6
7
8
# PrometheusRule ์˜ˆ์‹œ
- alert: NodeDiskPressureWarning
  expr: |
    node_filesystem_avail_bytes{mountpoint="/var/lib/containerd"} /
    node_filesystem_size_bytes{mountpoint="/var/lib/containerd"} < 0.15
  for: 5m
  annotations:
    summary: "containerd ๋””์Šคํฌ ์—ฌ์œ  ๊ณต๊ฐ„ 15% ๋ฏธ๋งŒ"

โ“ ์ž์ฃผ ๋ฌป๋Š” ์งˆ๋ฌธ

Q. ์Šค๋ƒ…์ƒท ํด๋”๋ฅผ ์ง์ ‘ rm -rf ํ•ด๋„ ๋˜๋‚˜์š”?

์•ˆ ๋ฉ๋‹ˆ๋‹ค. containerd๋Š” ๋‚ด๋ถ€ bolt DB(meta.db)์— ์Šค๋ƒ…์ƒท ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ํŒŒ์ผ๋งŒ ์‚ญ์ œํ•˜๋ฉด DB์™€ ๋ถˆ์ผ์น˜๊ฐ€ ๋ฐœ์ƒํ•ด containerd๊ฐ€ ์˜ค์ž‘๋™ํ•˜๊ฑฐ๋‚˜ ๋…ธ๋“œ๊ฐ€ NotReady ์ƒํƒœ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋“œ์‹œ crictl rm, ctr snapshots rm ๋“ฑ ๋Ÿฐํƒ€์ž„ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

Q. mount | grep ์œผ๋กœ ์•„๋ฌด๊ฒƒ๋„ ์•ˆ ๋‚˜์˜ฌ ๋•Œ๋Š”์š”?

์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ด๋ฏธ ์ข…๋ฃŒ๋œ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. crictl ps -a๋กœ ์ข…๋ฃŒ๋œ ์ปจํ…Œ์ด๋„ˆ๊นŒ์ง€ ํฌํ•จํ•˜์—ฌ ํ™•์ธํ•˜๊ฑฐ๋‚˜, ctr -n k8s.io snapshots info <snapshot-key>๋กœ ์Šค๋ƒ…์ƒท ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ง์ ‘ ์กฐํšŒํ•ด ๋ณด์„ธ์š”.

Q. ctr์™€ crictl ์ค‘ ์–ด๋–ค ๊ฒƒ์„ ์จ์•ผ ํ•˜๋‚˜์š”?

Kubernetes ํ™˜๊ฒฝ์—์„œ๋Š” crictl์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. crictl์€ CRI(Container Runtime Interface)๋ฅผ ํ†ตํ•ด Kubernetes Podยท์ปจํ…Œ์ด๋„ˆ ์ •๋ณด์™€ ์—ฐ๋™๋˜๋ฏ€๋กœ, Pod ์ด๋ฆ„ ๋“ฑ ์ƒ์œ„ ์ •๋ณด๋ฅผ ์–ป๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. ctr๋Š” containerd ๋„ค์ดํ‹ฐ๋ธŒ CLI๋กœ, Kubernetes ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์—†์ด ๋” ๋กœ์šฐ๋ ˆ๋ฒจ ์ ‘๊ทผ์ด ํ•„์š”ํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

Q. ephemeral-storage ์ œํ•œ์„ ๊ฑธ๋ฉด Pod๊ฐ€ Evict๋˜์ง€ ์•Š๋‚˜์š”?

๋งž์Šต๋‹ˆ๋‹ค. ์„ค์ •ํ•œ ์ƒํ•œ์„ ์ดˆ๊ณผํ•˜๋ฉด kubelet์ด ํ•ด๋‹น Pod๋ฅผ evictํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋‹จ์ผ Pod์˜ ๋ฌด์ œํ•œ ๋””์Šคํฌ ์ ์œ ๋กœ ๋…ธ๋“œ ์ „์ฒด๊ฐ€ DiskPressure์— ๋น ์ง€๋Š” ๊ฒƒ์„ ๋ง‰์•„์ฃผ๋Š” ์•ˆ์ „์žฅ์น˜์ž…๋‹ˆ๋‹ค. limits๋Š” ๋„‰๋„‰ํ•˜๊ฒŒ, requests๋Š” ์‹ค์ œ ์‚ฌ์šฉ๋Ÿ‰ ๊ธฐ์ค€์œผ๋กœ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ“š ์ฐธ๊ณ 

This post is licensed under CC BY 4.0 by the author.