Kubernetes 노드에서 스왑 메모리 구성하기

Kubernetes 노드에서 스왑 메모리 구성하기

이 페이지는 kubeadm을 사용해 Kubernetes 노드에 스왑(swap) 메모리를 프로비저닝하고 구성하는 예시를 제공해요.

출처: 문서

본문

목표 (Objectives)

  • kubeadm으로 Kubernetes 노드에 스왑 메모리 프로비저닝
  • 암호화 및 비암호화 스왑 둘 다 구성하는 법 배우기
  • 부팅 시 스왑 활성화하는 법 배우기

시작하기 전에

Kubernetes 클러스터가 있어야 하고 kubectl 명령줄 도구가 클러스터와 통신하도록 구성되어 있어야 해요. 이 튜토리얼은 컨트롤 플레인 호스트가 아닌 노드가 최소 두 개 있는 클러스터에서 실행하는 것을 권장해요. 아직 클러스터가 없다면 minikube를 이용해 만들거나, 아래 Kubernetes 플레이그라운드 중 하나를 사용할 수 있어요.

버전을 확인하려면 kubectl version을 입력해요.

클러스터에 Linux 운영체제를 실행하는 워커 노드가 최소 하나 있어야 해요. 이 데모에서는 kubeadm 도구가 kubeadm 설치 가이드에 설명된 단계에 따라 설치되어 있어야 해요.

스왑을 구성할 각 워커 노드에는 다음이 필요해요.

  • fallocate
  • mkswap
  • swapon
  • 암호화 스왑 공간용(권장)으로 추가로:
  • cryptsetup

kubeadm으로 스왑 지원 클러스터 설치

스왑 파일을 만들고 스왑 켜기

스왑이 활성화되어 있지 않다면 노드에 스왑을 프로비저닝해야 해요. 다음 섹션들은 암호화 및 비암호화 경우 둘 다에서 4GiB의 스왑을 만드는 방법을 보여줘요.

암호화 스왑 설정

암호화 스왑 파일은 다음과 같이 설정할 수 있어요. 이 예시가 cryptsetup 바이너리(대부분의 Linux 배포판에서 사용 가능)를 사용한다는 점을 명심해요.

# Allocate storage and restrict access
fallocate --length 4GiB /swapfile
chmod 600 /swapfile

# Create an encrypted device backed by the allocated storage
cryptsetup --type plain --cipher aes-xts-plain64 --key-size 256 -d /dev/urandom open /swapfile cryptswap

# Format the swap space
mkswap /dev/mapper/cryptswap

# Activate the swap space for paging
swapon /dev/mapper/cryptswap

비암호화 스왑 설정

비암호화 스왑 파일은 다음과 같이 설정할 수 있어요.

# Allocate storage and restrict access
fallocate --length 4GiB /swapfile
chmod 600 /swapfile

# Format the swap space
mkswap /swapfile

# Activate the swap space for paging
swapon /swapfile

스왑 활성화 확인

스왑은 swapon -s 명령이나 free 명령 둘 다로 확인할 수 있어요.

swapon -s 사용:

Filename       Type		Size		Used		Priority
/dev/dm-0      partition 	4194300		0		-2

free -h 사용:

total        used        free      shared  buff/cache   available
Mem:           3.8Gi       1.3Gi       249Mi        25Mi       2.5Gi       2.5Gi
Swap:          4.0Gi          0B       4.0Gi

부팅 시 스왑 활성화

스왑을 설정한 후, 부팅 시 스왑 파일을 시작하려면 보통 (암호화된) 스왑을 활성화하는 systemd 유닛을 설정하거나, /etc/fstab/swapfile swap swap defaults 0 0과 비슷한 줄을 추가해요.

systemd를 스왑 활성화에 사용하면, 시스템이 원한다면 스왑이 가용해질 때까지 kubelet 시작을 지연시킬 수 있어요. 비슷한 방식으로 systemd를 사용하면 서버가 kubelet(그리고 보통 컨테이너 런타임)이 종료될 때까지 스왑을 활성 상태로 유지하게 할 수 있어요.

kubelet 구성 설정

노드에서 스왑을 활성화한 후에는 kubelet이 그것을 사용하도록 구성해야 해요. 이 노드에 대한 스왑 동작을 선택해야 해요. 이 튜토리얼에서는 LimitedSwap 동작을 구성할 거예요.

kubelet 구성 파일을 찾아 편집하고:

  • failSwapOnfalse로 설정
  • memorySwap.swapBehaviorLimitedSwap으로 설정
# this fragment goes into the kubelet's configuration file
 failSwapOn: false
 memorySwap:
     swapBehavior: LimitedSwap

이 구성이 적용되려면 kubelet을 재시작해야 해요. 보통 다음을 실행해 그렇게 해요.

systemctl restart kubelet.service

이제 kubelet이 건강하고, 필요에 따라 스왑 메모리를 사용하는 파드를 실행할 수 있다는 것을 발견할 거예요.

더 알아보기 (Learn more)