전체 목차
- 쿠버네티스 클러스터 #1 Ubuntu OS 설치 및 설정
- 쿠버네티스 클러스터 #2 시스템 설정
- 쿠버네티스 클러스터 #3 쿠버네티스 설치 및 설정
- 쿠버네티스 클러스터 #4 로컬 Docker Disktop 설치 및 설정
- 쿠버네티스 클러스터 #5 Spring boot 어플리케이션 배포
- 쿠버네티스 클러스터 #6 node 및 pod 설정 점검
- 쿠버네티스 클러스터 #7 안전한 시작, 종료 스크립트
- 쿠버네티스 클러스터 #8 Spring boot 로그 확인
- 쿠버네티스 클러스터 #9 CI/CD 적용
- 쿠버네티스 클러스터 #번외1 Github CLI 활용
- 쿠버네티스 클러스터 #번외2 React Web - Springboot API 연동 (Gemini CLI 활용)
이전 챕터에서 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 설치를 진행하겠습니다.
끝.
'UNIX-Networking' 카테고리의 다른 글
| 쿠버네티스 클러스터 #4 로컬 Docker Disktop 설치 및 설정 (1) | 2026.01.19 |
|---|---|
| 쿠버네티스 클러스터 #3 - 쿠버네티스 설치 및 설정 (0) | 2025.12.19 |
| 쿠버네티스 클러스터 #1. Ubuntu OS 설치 및 설정 (0) | 2025.12.16 |
| [Ubuntu] 시간 동기화 서버 chrony 설치 (1) | 2025.07.20 |
| [AWS] EC2 추가, SK브로드밴드 이용하는 경우 outbound 22(ssh) port 차단 문제 (0) | 2025.04.29 |