마구잡

Kubernetes Ephemeral Storage 본문

Kubernetes/작은팁-짧은글

Kubernetes Ephemeral Storage

MAGUJOB 2024. 11. 4. 18:18
728x90

Ephemeral Storage

쿠버네티스에서 Ephemeral Storage는 파드의 생명 주기와 함께 존재하는 임시 저장 공간을 의미한다. 이는 파드가 삭제되면 함께 사라지며, 주로 emptyDir 볼륨, 컨테이너의 쓰기 가능한 레이어, 로그 파일 등이 이에 해당된다. 이러한 저장소는 파드 내에서 일시적인 데이터 저장을 위해 사용된다.

 

쿠버네티스는 CPU와 메모리 자원처럼 Ephemeral Storage에 대해서도 리소스 요청(Requests)과 제한(Limits)을 설정할 수 있도록 지원하고, 이를 통해 노드의 디스크 공간 사용을 관리하고, 파드가 과도한 디스크 사용으로 인해 다른 파드에 영향을 미치지 않도록 할 수 있다.

 

( 공식 사이트에서 발췌한 내용을 기반으로 작성하였으나, 명확하지 않은 부분은 경험을 토대로 작성하였습니다.

이는 정확한 정보가 아닐 수 있음을 알려드립니다. )

공식 사이트

( 광고 클릭은 큰 힘이 됩니다! )

 

임시 볼륨

이 문서는 쿠버네티스의 임시(ephemeral) 볼륨 에 대해 설명한다. 쿠버네티스 볼륨, 특히 퍼시스턴트볼륨클레임(PersistentVolumeClaim) 및 퍼시스턴트볼륨(PersistentVolume)에 대해 잘 알고 있는 것이 좋다.

kubernetes.io

 


Ephemeral Storage 확인하기

노드의 Ephemeral Storage 확인

kubectl describe node node-1

... 중략

Capacity:
  cpu:                2
  ephemeral-storage:  51290592Ki
  hugepages-1Gi:      0
  hugepages-2Mi:      0
  memory:             4004792Ki
  pods:               110
Allocatable:
  cpu:                2
  ephemeral-storage:  47269409509
  hugepages-1Gi:      0
  hugepages-2Mi:      0
  memory:             3902392Ki
  pods:               110

 

노드의 Disk 상태 보기

lsblk

NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
loop0    7:0    0   87M  1 loop /snap/lxd/27037
loop1    7:1    0 63.9M  1 loop /snap/core20/2105
loop2    7:2    0 40.4M  1 loop /snap/snapd/20671
loop3    7:3    0 63.7M  1 loop /snap/core20/2434
loop4    7:4    0   87M  1 loop /snap/lxd/29351
sr0     11:0    1 1024M  0 rom  
vda    252:0    0  100G  0 disk 
├─vda1 252:1    0    1M  0 part 
├─vda2 252:2    0   30G  0 part /
└─vda3 252:3    0   50G  0 part /var/lib
df -h
Filesystem      Size  Used Avail Use% Mounted on
tmpfs           392M  1.9M  390M   1% /run
/dev/vda2        30G  3.7G   25G  14% /
tmpfs           2.0G     0  2.0G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
/dev/vda3        49G  1.8G   45G   4% /var/lib
tmpfs           392M  4.0K  392M   1% /run/user/1000
shm              64M     0   64M   0% /run/containerd/io.containerd.grpc.v1.cri/sandboxes/77cdd004ffdef4bddd7c0dc196f260bf46aaa0d458fefe3502af2e4914262129/shm
shm              64M     0   64M   0% /run/containerd/io.containerd.grpc.v1.cri/sandboxes/c62ef312e57f0955511e2f51ffbbb98711570c1dd858e0b897eb61286350f338/shm
shm              64M     0   64M   0% /run/containerd/io.containerd.grpc.v1.cri/sandboxes/49eb631f13ea250423c098b5820ceff8beaaa61e3697d0d81d9c5647bfcbf8ba/shm

 

노드의 Disk 상태를 보게 되면 Ephemeral Storage와 /var/lib의 사이즈가 비슷한것을 확인 할 수 있다.

기본적으로 쿠버네티스 클러스터를 설치할 경우 Ephemeral Storage의 경로는 /var/lib/kubelet이 된다.

 


Ephemeral Storage 확장 검증하기

그렇다면 Ephemeral Stoarge를 확장하는 방법과, 실제로 해당위치가 맞는지 검증 과정을 거쳐본다.

 

 

1. 위 작업을 하기 위해선 현재 Ephemeral Stroage가 위치한 경로의 디스크 파티션이 Extend가 가능한 상황이여야 한다.
2. 확장, 축소 작업은 백업을 권장한다.
현 글에서 OS 버전은 ubuntu 22.04로 진행했다.

 

여유 공간 20G

lsblk

NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
loop0    7:0    0   87M  1 loop /snap/lxd/27037
loop1    7:1    0 63.9M  1 loop /snap/core20/2105
loop2    7:2    0 40.4M  1 loop /snap/snapd/20671
loop3    7:3    0 63.7M  1 loop /snap/core20/2434
loop4    7:4    0   87M  1 loop /snap/lxd/29351
sr0     11:0    1 1024M  0 rom  
vda    252:0    0  100G  0 disk 
├─vda1 252:1    0    1M  0 part 
├─vda2 252:2    0   30G  0 part /
└─vda3 252:3    0   50G  0 part /var/lib

 

growpart를 통해 3번 장치 확장

sudo growpart /dev/vda 3

CHANGED: partition=3 start=62918656 old: size=104857600 end=167776256 new: size=146796511 end=209715167

 

resize2fs를 통해 크기 확장

sudo resize2fs /dev/vda3

resize2fs 1.46.5 (30-Dec-2021)
Filesystem at /dev/vda3 is mounted on /var/lib; on-line resizing required
old_desc_blocks = 7, new_desc_blocks = 9
The filesystem on /dev/vda3 is now 18349563 (4k) blocks long.

 

확장 확인

lsblk
...
vda    252:0    0  100G  0 disk 
├─vda1 252:1    0    1M  0 part 
├─vda2 252:2    0   30G  0 part /
└─vda3 252:3    0   70G  0 part /var/lib

 

Ephemeral Storage 확인

 kubectl describe node geon-extend |grep ephemeral
  
  ephemeral-storage:  51290592Ki
  ephemeral-storage:  47269409509
  ephemeral-storage  0 (0%)      0 (0%)

 

kubelet restart 이후 Ephemeral Storage 확인

kubectl describe node geon-extend |grep ephemeral

  ephemeral-storage:  71931084Ki
  ephemeral-storage:  66291686905
  ephemeral-storage  0 (0%)      0 (0%)
ephemeral-storage는 다른 리소스와 달리 해당 노드의 kubelet을 재기동 해야만 반영이 된다.

 


Ephemeral Storage & Pressure

클러스터를 운영하다 보면 Ephemeral Storage의 용량이 임계치를 넘어가는 경우가 생겨 POD들이 Evicted되는 현상을 종종 볼 수 있다.
종합적으로 보자면 약 15% 이상의 여유공간이 없으면 Evicted 된다 생각하면 편하다.

 

( 하기 축출 임계값 공식 문서 발췌 https://kubernetes.io/ko/docs/concepts/scheduling-eviction/node-pressure-eviction/)

 

 

소프트 축출 (Soft Eviction)

소프트 축출 임계값은 리소스 부족이 예상될 때 Kubernetes가 설정된 기간 동안 우선순위가 낮은 파드를 정리할 수 있도록 한다. 소프트 축출은 즉각적으로 파드를 제거하지 않고, 설정된 유예 기간 동안 리소스가 회복되기를 기다린다.

 

기본 설정: 소프트 축출은 기본적으로 비활성화되어 있다. 필요한 경우 evictionSoftevictionSoftGracePeriodkubelet 설정에 추가하여 사용자 지정할 수 있다.

 

하드 축출 (Hard Eviction)

하드 축출은 노드의 리소스가 위험한 수준으로 부족할 때 즉시 파드를 종료하는 임계값이다. 하드 축출 임계값을 초과하면 파드를 즉각적으로 종료하여 노드의 가용성을 유지하려고 한다.

 

기본 설정: Kubernetes는 하드 축출을 위한 하기 임계값을 기본으로 지정한다.

 

memory.available 100Mi

nodefs.available 여유 공간 10% 미만

nodefs.inodesFree 여유 inode 5% 미만

imagefs.available 여유 공간 15% 미만

imagefs.inodesFree 여유 inode 5% 미만


잘못된 정보나, 문의등은 댓글로 메일과 함께 적어주시면 감사하겠습니다.

728x90