전체 목차

 

이전 챕터에서 OS를 설치했습니다.

이번 챕터에서는 쿠버네티스를 설치하기 위해 시스템 절정을 변경합니다.

1. 설치 사양

1.1. Master

  • CPU : Intel(R) Xeon(R) CPU E5-2680 v4 @ 2.40GHz (x86_64)
  • Memory : 32G
  • OS : Ubuntu 24.04.3 LTS

1.2. Worker Node (Raspberry Pi 5 Model B 3대)

  • CPU : Cortex-A76 (aarch64)
  • Memory : 8G
  • OS : Ubuntu 24.04.3 LTS

2. Swap 메모리 비활성화

Swap 메모리란 물리적인 메모리가 부족 할 때 메모리의 일부를 Disk에 기록하고 필요 할 때 다시 메모리로 로드해서 사용하기 위산 Disk 파티션의 일종입니다.

쿠버네티스는 메모리 관리 일관성을 위해 물리적인 메모리(RAM)만을 이용하도록 되어 있어서 Swap을 비활성화 해야 합니다.

2.1. Swap 영역 확인 및 비활성화

free -h 명령으로 스왑 영역을 확인해 보면 Xeon CPU에 Ubuntu OS를 설치한  서버에서는 아래와 같이 Swap 영역이 확인 됩니다.

basscraft@master:~# free -h
               total        used        free      shared  buff/cache   available
Mem:            31Gi       803Mi        30Gi       1.7Mi       360Mi        30Gi
Swap:          8.0Gi          0B       8.0Gi
basscraft@master:~#

 

스왑 영역을 확인해 보면 아래 처럼 활성화 되어 있다.

basscraft@master:~# swapon -s
Filename                                Type            Size            Used            Priority
/swap.img                               file            8388604         0               -2
basscraft@master:~#

 

워커노드로 이용하기 위해 라즈베리파이에 설치한 Ubuntu 에서는 Swap 영역이 없습니다.

basscraft@node1:~# free -h
               total        used        free      shared  buff/cache   available
Mem:           7.7Gi       395Mi       7.1Gi       3.4Mi       464Mi       7.4Gi
Swap:             0B          0B          0B
basscraft@node1:~#

 

Swap 영역이 있으면 비활성화 해야 합니다.

일시적으로 비활성화 하는 방법으로 swapoff -a 명령을 이용하기도 하지만 영구적으로 비활성화 하기 위해 /etc/fstab 에 설정을 수정하고 재부팅합니다.

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/ubuntu-vg/ubuntu-lv during curtin installation
/dev/disk/by-id/dm-uuid-LVM-Nw2rXaLtjrHPFy9DNNnpiFiJAlLqvUTezWPgzjcQFfTveQUfUOUcditTf0fRn93P / ext4 defaults 0 1
# /boot was on /dev/nvme0n1p2 during curtin installation
/dev/disk/by-uuid/545cbcab-f0e2-4ef4-bfa0-ad3fd4e5c28b /boot ext4 defaults 0 1
# /boot/efi was on /dev/nvme0n1p1 during curtin installation
/dev/disk/by-uuid/499A-58D0 /boot/efi vfat defaults 0 1
# swap 비활성화
#/swap.img       none    swap    sw      0       0

 

재부팅후 swap 영역 확인

basscraft@master:~$ free -h
               total        used        free      shared  buff/cache   available
Mem:            31Gi       808Mi        30Gi       1.7Mi       342Mi        30Gi
Swap:             0B          0B          0B
basscraft@master:~$ sudo swapon -s
basscraft@master:~$

free 명령으로도 비활성화 되어 있고 swapon -s 명령으로도 나오지 않음

 

3.Congrol Groups v2 활성화 확인

cgroup 은 커널이 리소스 사용을 관리하데 사용됩니다.

https://velog.io/@yy2hi/Cgroup-%EC%9D%B4%EB%9E%80

 

Cgroup 이란 ?

컨테이너와 Cgroup

velog.io

모든 노드에서 확인 합니다.

Master

basscraft@master:~$ stat -fc %T /sys/fs/cgroup
cgroup2fs
basscraft@master:~$

 

Worker Node

basscraft@node1:~$ stat -fc %T /sys/fs/cgroup
cgroup2fs
basscraft@node1:~$

 

모든 장치에서 cgroup2fs 로 지정되어 있습니다.

4. 필수 커널 모듈 및 sysctl 설정 (모든 노드)

4.1. 커널 모듈 로드

  • br-netfilter: 브릿지 인터페이스를 통과하는 패킷이 호스트의 iptables 규칙에 의해 필터링되도록 합니다. 이게 없으면 Flannel 같은 CNI가 Pod 간 통신을 제어할 수 없습니다.
  • ip_forward: 노드가 수신한 패킷을 다른 곳(Pod 또는 외부)으로 전달할 수 있게 하는 '라우터' 역할을 활성화합니다.
basscraft@master:~$ sudo modprobe overlay
basscraft@master:~$ sudo modprobe br_netfilter

 

부팅시 자동 로드 되도록 /etc/modules-load.d/containerd.conf 파일을 새로 생성하고 overlay, br_netfilter 추가 

basscraft@master:~$ sudo vi /etc/modules-load.d/containerd.conf
overlay
br_netfilter
~
~
~
basscraft@master:~$

 

4.2. Kubernetes 네트워크용 sysctl 설정

/etc/sysctl.d/ 새로운 파일을 만들고 아래 내용을 입력 합니다.

basscraft@master:~$ sudo vi /etc/sysctl.d/99-kubernetes-cri.conf
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
~
~
~
basscraft@master:~$

 

적용

basscraft@master:~$ sudo sysctl --system
* Applying /usr/lib/sysctl.d/10-apparmor.conf ...
* Applying /etc/sysctl.d/10-bufferbloat.conf ...
* Applying /etc/sysctl.d/10-console-messages.conf ...
* Applying /etc/sysctl.d/10-ipv6-privacy.conf ...
* Applying /etc/sysctl.d/10-kernel-hardening.conf ...
...생략 ...
fs.protected_hardlinks = 1
fs.protected_regular = 2
fs.protected_symlinks = 1
basscraft@master:~$

 

 

5. 라즈베리파이용 설정 (워커노드에서 작업)

5.1. cgroup 메모리 활성화 (중요)

라즈베리 파이는 기본적으로 메모리 cgroup이 꺼져 있습니다. 이를 켜지 않으면 kubeadm init이나 join 시 에러가 발생합니다.

/boot/firmware/cmdline.txt 파일의 기존 내용에 한칸 띄우고 아래 내용을 추가

cgroup_enable=cpuset cgroup_enable=memory cgroup_memory=1

 

5.2. GPU 메모리 할당 최소화

CLI 환경으로 사용할 것 이므로 GPU에 할당된 메모리를 줄여 시스템 가용 메모리를 확보

/boot/firmware/config.txt 파일 맨 끝 추가

[all]
gpu_mem=16

 

 

다음 챕터에서 Container Runtime 설치를 진행하겠습니다.

 

끝.

+ Recent posts