RAN CN 테스트베드 구축/Free5GC on K8s (Core)

Helm을 활용한 Free5GC 설치 방법 (Orange Opensource의 Towards5gs-helm

gksyb4235 2026. 1. 6. 23:31

Outline


 

이제 Step 1. Kubernetes Cluster 설치에 이어서 Step 2. Free5GC Installation을 진행할 차례이다.

Free5GC의 설치는 Helm을 통해 수행할 수 있다.

 

 

Helm이란?


https://www.cncf.io/projects/helm/

 

 

Helm이란 쿠버네티스용 패키지 매니저, 애플리케이션 배포를 단순화해주는 오픈소스이다.
(2020
1월에 CNCF Graduated Project가 되었다)

YAML 템플릿을 차트(Chart) 라는 패키지 형식으로 묶어서 원클릭으로 손쉽게 설치, 업그레이드, 롤백할 수 있다.
덕분에 복잡한 쿠버네티스 리소스 구성을 재사용 가능하고 일관성 있게 관리할 수 있다.

 

 

 

 

Orange Opensource의 towards5gs-helm


https://github.com/Orange-OpenSource/towards5gs-helm

 

towards5gs-helm5G 네트워크 서비스쿠버네티스 위에서 쉽게 배포할 수 있게 해주는 Helm 차트 모음이다.
Orange
OpenSource에서 관리하며, AMF, SMF, UPF 같은 5G 코어 네트워크 기능(NF) 들을 쿠버네티스 클러스터 위에 컨테이너 형태로 올릴 수 있다.


Helm
을 활용해 복잡한 YAML 설정 없이 자동화된 배포와 스케일링이 가능하다.
이를 통해 연구·개발 환경에서 5G 코어 테스트베드 구축을 빠르고 일관성 있게 진행할 수 있다.

 

 

 

towards5gs-helm chart의 구성


 

이 페이지는 towards5gs-helm 저장소 구조와 각 YAML 파일의 역할을 설명하고 있다.
우선, charts 디렉토리 안에 free5gcueransim 폴더가 있으며 이 중 free5gc 폴더 내에 Free5GC의 모든 Helm 차트가 들어있다.

여기 있는 메인 values.yaml 파일은 전체 5G 코어 배포에 대한 글로벌 설정을 정의한다.

 

다음으로, 5G 코어 네트워크 기능(NF)별로 free5gc-amf.yaml, free5gc-smf.yaml, free5gc-upf.yaml 같은 values.yaml 파일이 존재해 개별 NFNetwork interface, endpoint, service parameter를 설정한다.
마지막으로, 이 구조 덕분에 사용자는 전역 설정과 개별 NF 설정을 분리해 관리할 수 있어 5G 코어 네트워크 배포를 더 유연하게 할 수 있다.

 

 

 

Helm 설치 및 Free5GC 세팅


Helm 설치 (https://helm.sh/docs/intro/install/)

sudo apt-get install curl gpg apt-transport-https --yes
curl -fsSL https://packages.buildkite.com/helm-linux/helm-debian/gpgkey | gpg --dearmor | sudo tee /usr/share/keyrings/helm.gpg > /dev/null
echo "deb [signed-by=/usr/share/keyrings/helm.gpg] https://packages.buildkite.com/helm-linux/helm-debian/any/ any main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list
sudo apt-get update
sudo apt-get install helm

 

 

Towards5gs-helm chart 설치

sudo apt install git
git clone https://github.com/Orange-OpenSource/towards5gs-helm.git
cd towards5gs-helm/charts/free5gc

 

 

멀티노드 환경 구성


https://github.com/Orange-OpenSource/towards5gs-helm/tree/main/charts/free5gc#networks-configuration

 

 

그 다음으로, 5G 코어 NFvalues.yaml 파일에서 nodeSelector 값을 수정해서,
UPF
free5gc-up 노드에, 나머지 NF들은 free5gc-cp 노드에 배치되도록 한다.

이를 통해 멀티 노드 환경에서 컨트롤 플레인과 사용자 플레인 기능을 분리 배포할 수 있다.

 

 

 

네트워크 Interface 구성


 

다음으로 메인 values.yaml 파일에서 5G 코어 네트워크 기능(NF) 들의 네트워크 인터페이스와 IP 엔드포인트를 정의해야 한다여기에는 N2, N3, N4 같은 주요 인터페이스에 대해 masterIf(호스트 인터페이스), subnetIP, gatewayIP 같은 정보가 설정된다.


예를 들어, N3 인터페이스는 gNBUPF 간 사용자 트래픽 경로를 담당하고, N4SMFUPF 간 제어 신호를 처리하는데, 이 값을 올바르게 지정해야 각 NF들이 쿠버네티스 클러스터에서 올바른 IP 주소와 네트워크를 통해 통신할 수 있다.

현재 VM 환경에서 NAT Interfaceenp0s3, Host-only Networkenp0s8로 설정되어 있기 때문에

이에 맞게 네트워크의 IPinterface를 설정한다.

 

 

 

이 설정은 AMF, SMF, UPFvalues.yaml 파일에서 N2, N3, N4 인터페이스와 IP 주소를 지정해 각 NF 간 올바른 통신이 가능하도록 만든다.
, 쿠버네티스 환경에서 5G 코어 네트워크의 데이터 경로 연결을 가능하게 한다.

 

 

MongoDB의 PV와 PVC 설정


 

 

이 설정은 쿠버네티스에서 MongoDB 데이터의 영속성을 보장하기 위해 PV(Persistent Volume)PVC(Persistent Volume Claim) 를 생성하는 과정이다.

기본적으로 쿠버네티스의 데이터들은 Pod에 쌓이게 되는데, PodRestart되면 기존의 데이터들을 모두 날아가게 된다.

MongoDB 같은 데이터베이스는 Pod재시작되더라도 데이터가 유지되어야 하므로, 이 스토리지 설정이 필수적이다.
이때 Persistent Volume는 클러스터에서 독립적이고 재사용 가능한 스토리지를 제공하고, Persistent Volume Claim은 해당 스토리지를 Pod가 요청해 바인딩하도록 한다.
따라서 이 단계는 Free5GC 코어 네트워크의 데이터 무손실 운영을 위한 기반을 마련한다.

 

 

 

Free5GC Core Run


# Free5GC 올릴 때
kubectl apply -f persistent-vol-for-mongodb.yaml
kubectl apply -f persistent-vol-for-cert.yaml
helm install free5gc . -n free5gc

# 업그레이드 시
helm upgrade free5gc . -n free5gc

# Free5GC 내릴 때
helm uninstall free5gc -n free5gc
kubectl delete pv free5gc-pv-cert
kubectl delete pv free5gc-pv-mongo

 

 

 

 

Demo 영상


Helm 명령어를 통해 Free5GC Core를 클러스터에 배포하고,

Dashboard에서 pod가 생성되는 것을 확인하는 Demo 영상이다.