Neutron Helm Chart 구조 파악

openstack-helm 의 neutron chart 는 OpenStack 네트워킹 서비스를 Kubernetes 위에 배포하는 Helm chart 다. 이 문서는 차트 디렉터리 의 파일 구성과 각 항목이 실제 Kubernetes 리소스로 어떻게 구현되는지를 정리한다.

차트 최상위 파일

neutron/
├── Chart.yaml        # 차트 메타데이터
├── values.yaml       # 기본값 정의
├── requirements.yaml # 의존 차트 선언
└── templates/        # Kubernetes 리소스 템플릿

Chart.yaml 은 차트 이름, 버전(2026.1.0), appVersion(28.0.0)을 선언하며, helm-toolkit 을 라이브러리 의존성으로 등록한다. helm-toolkit 은 openstack-helm 전체에서 공통 스니펫(snippet)을 제공하는 내부 라이브러리 차트로, 실제 Kubernetes 리소스를 직접 생성하지는 않는다.

values.yaml 은 배포 시 오버라이드할 수 있는 기본값 전체를 담는다. 주요 최상위 블록은 아래 표와 같다.

블록

역할

images

컴포넌트별 컨테이너 이미지 태그

labels

각 Deployment/DaemonSet 의 nodeSelector 키값

network

backend 리스트로 openvswitch 또는 ovn 선택

conf

neutron.conf, ml2_conf.ini 등 설정 파일 내용 (INI 형식)

endpoints

Keystone/MariaDB/RabbitMQ 등 외부 서비스 URL 과 자격증명

dependencies

각 컴포넌트의 기동 선행 조건 (Job 완료 여부, 서비스 Ready 여부)

manifests

리소스별 true/false 토글 — 원하지 않는 컴포넌트를 비활성화

templates/ 디렉터리 구성

templates/ 아래 파일들은 역할에 따라 다음과 같이 묶인다.

설정 관련

bin/ 디렉터리에는 각 컴포넌트의 기동 스크립트가 _*.sh.tpl 형식으로 들어 있다. Helm 이 렌더링하면 configmap-bin.yaml 에 의해 단일 ConfigMap 으로 묶여 각 Pod 의 /tmp/ 경로에 마운트된다.

configmap-etc.yamlvalues.yamlconf 블록 값을 neutron.conf, ml2_conf.ini, l3_agent.ini 등 설정 파일로 렌더링한다. 특이한 점은 이 템플릿 내부에서 endpoints 블록을 참조해 DB 접속 URL, RabbitMQ transport URL, Keystone auth_url 등을 자동으로 채워 넣는다는 것이다.

values.yaml
  endpoints.oslo_db  ──┐
  endpoints.oslo_messaging ─┤→ configmap-etc → /etc/neutron/neutron.conf (Pod 마운트)
  endpoints.identity ──┘

워크로드 관련

컴포넌트의 역할에 따라 Kubernetes 워크로드 타입이 다르게 선택된다.

템플릿 파일

Kubernetes 리소스

배포 이유

deployment-server.yaml

Deployment

API 서버는 노드 독립적/스테이트리스 → replicas 조정 가능

deployment-rpc_server.yaml

Deployment

RabbitMQ RPC 처리 전담. API 서버와 분리해 부하 격리

deployment-ironic-agent.yaml

Deployment

베어메탈 연동. 특정 노드가 아닌 임의 노드에서 실행 가능

daemonset-ovs-agent.yaml

DaemonSet

OVS 브리지/포트를 호스트마다 관리해야 하므로 노드 단위 배포

daemonset-ovn-agent.yaml

DaemonSet

OVN logical flow 동기화. 역시 노드 단위

daemonset-dhcp-agent.yaml

DaemonSet

dnsmasq 가 각 노드의 네트워크 네임스페이스에서 실행

daemonset-l3-agent.yaml

DaemonSet

가상 라우터/NAT/플로팅 IP 처리, 호스트 네트워크 네임스페이스 필요

daemonset-metadata-agent.yaml

DaemonSet

169.254.169.254 메타데이터 프록시, 노드별 실행

daemonset-ovn-metadata-agent.yaml

DaemonSet

OVN 환경에서의 메타데이터 프록시

daemonset-sriov-agent.yaml

DaemonSet

SR-IOV VF 관리, 기본 비활성 (manifests.daemonset_sriov_agent: false)

daemonset-bagpipe-bgp.yaml

DaemonSet

BGP VPN 연동, 기본 비활성

daemonset-netns-cleanup-cron.yaml

DaemonSet

고아 네트워크 네임스페이스 정리 크론

network.backend 값에 따라 OVS 관련 또는 OVN 관련 DaemonSet 이 동적으로 활성화된다. 사용하지 않는 에이전트는 manifests 토글로 리소스 자체가 생성되지 않는다.

Job 관련

서비스 기동 전 일회성 작업은 Helm Hook(post-install, post-upgrade)으로 등록된 Job 으로 실행된다.

Job 템플릿

하는 일

job-db-init.yaml

MariaDB 에 neutron DB/사용자 생성

job-db-sync.yaml

neutron-db-manage upgrade head 로 DB 스키마 마이그레이션

job-ks-user.yaml

Keystone 에 neutron 서비스 계정 생성

job-ks-service.yaml

Keystone 에 network 타입 서비스 등록

job-ks-endpoints.yaml

Keystone 에 public/internal/admin 엔드포인트 URL 등록

job-rabbit-init.yaml

RabbitMQ 에 vhost/사용자/권한 설정

job-bootstrap.yaml

초기 네트워크 리소스 생성 (선택)

job-db-drop.yaml

DB 삭제 (차트 제거 시, 기본 비활성)

기타 리소스

템플릿 파일

생성되는 Kubernetes 리소스

service-server.yaml

ClusterIP Service (포트 9696) — neutron API 클러스터 내 노출

secret-db.yaml / secret-rabbitmq.yaml / secret-keystone.yaml

각 서비스 자격증명을 담은 Secret

pdb-server.yaml

PodDisruptionBudget — API 서버 롤링 업데이트 시 최소 가용 Pod 보장

network_policy.yaml

NetworkPolicy — 인그레스/이그레스 제한

certificates.yaml

TLS 인증서 Secret (TLS 활성화 시)

extra-manifests.yaml

values.yamlmanifests.extra 에 정의된 임의 Kubernetes 리소스 주입

값 → 리소스 반영 흐름 요약

아래는 helm install 시 values.yaml 의 값이 실제 Kubernetes 리소스로 이어지는 흐름이다.

values.yaml
├── manifests.*: false     → 해당 템플릿 파일 렌더링 자체를 스킵
├── labels.server.*        → Deployment nodeSelector
├── labels.ovs.*           → DaemonSet(ovs-agent) nodeSelector
├── conf.*                 → configmap-etc → /etc/neutron/ 마운트
├── endpoints.*            → configmap-etc 내 URL 자동 생성 + Job 에서 참조
├── pod.replicas.server    → Deployment replicas
└── network.backend        → 활성화할 DaemonSet 의존 관계 동적 결정