Outline

Free5GC를 Kubernetes 클러스터에 설치하는 전체적인 Outline은 위와 같다.
1단계: Kubernetes를 이용해 Kubernetes Cluster를 구축.
이때 클러스터는 총 3개의 VM으로 구성되며, 하나는 Control Plane 노드이고 나머지 두 개는 워커 노드다.
워커 노드 중 하나에는 free5GC의 control plane이 설치되고, 다른 하나에는 free5GC의 user plane이 설치된다. (멀티 노드)
2단계 : 그 다음 단계에서는 Helm을 사용해 free5GC를 워커 노드에 배포.
Helm 차트를 활용함으로써 free5GC의 여러 구성 요소를 빠르고 일관된 방식으로 Pod 형태로 설치할 수 있다.
3단계 : 클러스터 모니터링을 위한 Addon들을 설치.
이를 통해 Kubernetes 클러스터와 free5GC 구성 요소들의 상태를 모니터링하고, 자원 사용량과 동작 상태를 체계적으로 관찰하는 방법을 소개한다.
Virtual Machine Setup
전체 아키텍처

총 3개의 VM을 설치한다.
각 VM은 마스터 노드, 워커 노드 1, 워커 노드 2의 역할을 수행한다. 마스터 노드는 Kubernetes Control Plane 역할을 담당하고, 워커 노드 1과 워커 노드 2에는 각각 free5GC의 control plane과 user plane이 배치된다.
운영체제와 커널 버전

운영체제와 커널 버전은 free5GC 공식 문서에서 권장하는 환경을 따른다.
Ubuntu 20.04.06 LTS와 kernel version 5.4.0-169-generic을 기준으로 VM을 설치하면 호환성 문제를 최소화할 수 있다.
Virtual Machine 세팅
개인 PC에서 사용할 수 있는 VM은 아래와 같다.
- Oracle VirtualBox : 무료 오픈소스 기반 가상화 소프트웨어로 Windows, Linux, macOS에서 모두 사용 가능.
- VMware Workstation : Windows·Linux용 고성능 데스크톱 가상화 도구로, 스냅샷과 네트워크 기능이 강력.
- VMware Fusion : macOS 전용 제품으로, Mac에서 Windows나 Linux를 실행할 때 사용.
- Parallels Desktop : macOS에서 Windows 실행에 특화된 상용 VM으로, 성능과 사용자 편의성이 뛰어남.
여기서는 Virtual Box 7.1.6 버전을 사용해 환경을 구축했다.
- Download : https://download.virtualbox.org/virtualbox/7.1.6/VirtualBox-7.1.6-167084-Win.exe
- Site : https://www.virtualbox.org/wiki/Downloads
Network Adaptor
이때 VM은 네트워크 어댑터 설정에서 NAT과 Host-only Network를 가지도록 한다.


- Adapter 1: NAT (10.0.2.x)
목적: VM이 인터넷에 접근할 수 있도록 해줌.
Kubernetes 설치 시 필요한 kubeadm, kubelet, containerd, Helm chart, Free5GC 이미지 등을 다운로드하기 위해 필요.
호스트(Windows/Linux)와 직접 통신하지는 않음 - Adapter 2: Host-only (192.168.56.x)
목적: VM 간 내부 클러스터 네트워크 역할
master-node, free5gc-cp, free5gc-up이 쿠버네티스 Pod, 서비스, API 트래픽을 주고받는 전용 네트워크
호스트 PC에서도 이 네트워크 대역에 접근 가능하므로 kubectl, Grafana, Prometheus 같은 모니터링 툴 접속에도 사용 가능
이중 어댑터를 쓰는 이유는 아래와 같다.
- NAT만 쓰면 VM 간 직접 통신이 안 되고 포트포워딩이 필요함 → Kubernetes 노드 간 통신에 불편
- Host-only만 쓰면 인터넷 접근 불가 → 패키지 다운로드, Docker 이미지 Pull 불가
- 둘 다 활성화하면 NAT: 인터넷 접근 / Host-only: 클러스터 내부 통신 + 호스트와 연결
모든 VM에서 리눅스 Setup

- 맨 처음에는 모든 노드에서 리눅스 Setup을 한다.
기본 패키지 설치 & 최신 패키지 목록으로 업데이트 (apt update)
HTTPS 리포지토리 접근, 인증서 검증, GPG 키 관리, 소프트웨어 속성 추가 등을 위한 필수 패키지 설치
이후 쿠버네티스(kubeadm, kubelet 등)나 도커 리포지토리 추가에 필요 - 시간대 & NTP 동기화
서버 시간대를 한국 시간(Asia/Seoul)으로 설정
chrony를 설치해 NTP(Network Time Protocol) 기반 시간 동기화
클러스터 내 모든 노드의 시간이 동일해야 인증서 만료나 분산 환경 동기화 문제를 피할 수 있음 - 호스트네임 설정
각 VM에 고유 호스트네임 부여 (master-node, free5gc-cp, free5gc-up) - /etc/hosts 수정
노드 간 통신 시 IP 대신 호스트네임으로 접근 가능하도록 설정
kubectl, Free5GC 컴포넌트, 내부 DNS 서비스 설정에서 유용
쿠버네티스 환경설정
쿠버네티스 설치 전 환경설정
쿠버네티스 공식 문서를 보면, 최소 VM의 사양이 나와있고, 특정 Port가 Open 되어야 하며,
Swap이 비활성화 되어야 한다고 써 있다.


- 방화벽 비활성화
따라서 UFW(Uncomplicated Firewall) 를 비활성화한다.
쿠버네티스 노드 간 통신은 다양한 포트를 사용하기 때문에, 초기 설정 시 방화벽이 트래픽을 막지 않도록 해준다. - 스왑 메모리 해제
스왑을 비활성화 하고, 시스템 부팅 시 swap이 자동으로 켜지지 않도록 한다.
쿠버네티스 kubelet은 메모리 관리가 중요한데,
스왑이 켜져 있으면 메모리 사용량 계산이 꼬여 Pod 스케줄링 문제가 발생할 수 있음
모든 노드에 쿠버네티스 설치


이렇게 사전 준비가 완료되었으면 각 노드에 쿠버네티스를 설치해야 한다.
쿠버네티스는 총 3개의 구성 요소로 나뉜다.
1. kubeadm :
Kubernetes 클러스터 생성 및 초기화 도구
마스터 노드 초기화(kubeadm init), 워커 노드 조인(kubeadm join) 수행
2. kubelet :
각 노드에서 Pod와 컨테이너 실행·관리
API Server와 통신하며 Pod 상태를 모니터링 및 자동 복구
3. kubectl :
Kubernetes 명령줄 인터페이스(CLI)
Pod, Deployment, Service 등 리소스 관리 및 상태 확인

현재 여기서는 1.28 버전의 쿠버네티스를 설치했는데, 현재 1.34버전(24년 9월 기준)까지 나온 상태이다.
3개월마다 새로운 버전이 나올정도로 release 주기는 빠른 편이며 지원 기간은 1년이다.
Kubernetes 버전은 x.y.z 형태로 표시되며, x는 메이저 버전, y는 마이너 버전, z는 패치 버전을 의미한다.
Containerd 환경설정
쿠버네티스를 사용하기 위해서는 container runtime을 깔아야 한다고 공식문서에 나와있다.
쿠버네티스에서 Pod를 실행하려면 컨테이너 런타임(예: containerd, CRI-O, Docker 등)이 필요하다.

kubelet이 Pod를 생성하면, 실제 컨테이너 실행은 런타임이 담당한다.
즉, 각 노드에 컨테이너 런타임을 설치해야 Pod를 배포하고 실행할 수 있다.

containerd를 깔기 전에, Prerequisites로 IPv4 패킷 포워딩을 enable해야 한다고 되어 있다.
쿠버네티스 Pod 간 네트워크는 브리지 네트워크와 CNI 플러그인(Calico, Flannel 등, 여기서는 Calico를 사용)을 사용한다.
패킷 포워딩이 꺼져 있으면 Pod 간 통신이나 외부 네트워크 접근이 차단될 수 있다.


따라서 공식문서의 설정대로 Ipv4 패킷 포워딩을 활성화한다.
Containerd 설치
그 다음으로 container runtime을 설치해야 하는데, 우리는 containerd를 사용했다.
쿠버네티스와 containerd의 버전을 주의해서 설치해야 하는데, 호환되는 버전을 공식문서에서 확인하고 설치해야 한다.

containerd --version

systemctl is-enabled containerd

여기서는 Kubernetes 1.28 버전에 맞는 containerd 1.6.21 버전을 설치했다.

아래 명령어를 통해 container runtime이 잘 활성화가 되었는지 확인할 수 있다.
systemctl status containerd.service

여기까지 수행하면 기본적인 VM 설정과 쿠버네티스 설정은 완료가 된다.
다음 포스트에서는 쿠버네티스 클러스터를 구축하는 방법에 대해 다룰 것이다.
'RAN CN 테스트베드 구축 > Free5GC on K8s (Core)' 카테고리의 다른 글
| Helm을 활용한 Free5GC 설치 방법 (Orange Opensource의 Towards5gs-helm (0) | 2026.01.06 |
|---|---|
| 쿠버네티스 클러스터 구축 방법 (K8s - Free5GC 클러스터 구축) (0) | 2026.01.06 |
| 쿠버네티스의 개념, 기능, 특징, 역사 총정리 (0) | 2026.01.06 |
| 5G의 Service-Based Architecture와 쿠버네티스의 도입 (0) | 2026.01.06 |
| Network Slicing과 Traffic Steering의 개념 (0) | 2025.11.04 |