Overview
오늘은 OpenStack Zun에 대해 알아보겠다. Zun은 OpenStack 환경에서 컨테이너를 직접 실행하고 관리하는 서비스이다.
Magnum과 달리 Kubernetes 같은 오케스트레이션 플랫폼 없이, OpenStack 네이티브 API와 CLI를 통해 컨테이너 단독 실행 및 관리를 지원하는 CaaS(Container as a Service) 서비스다.
📅 관련 글
2022.05.11 - [Openstack] - Openstack이란?
2022.07.29 - [Openstack] - Openstack Nova란?
2022.08.08 - [Openstack] - Openstack Neutron이란? (network)
2022.08.08 - [Openstack] - Openstack 배치 서비스 Placement란?
2022.08.08 - [Openstack] - Openstack Glance란? (image)
2022.08.08 - [Openstack] - Openstack Keystone이란? (identity)
2022.08.08 - [Openstack] - Openstack horizon이란? (dashboard)
2022.08.09 - [Openstack] - Openstack Cinder/Swift란? (block storage/object storage)
2025.02.27 - [Openstack] - OpenStack Heat란? (Orchestration)
2025.02.27 - [Openstack] - OpenStack Ceilometer란? (Telemetry & Monitoring)
2025.02.28 - [Openstack] - OpenStack Mistral이란? (Workflow Service)
2025.02.28 - [Openstack] - OpenStack Magnum이란? (Container Orchestration)
2025.02.28 - [Openstack] - OpenStack Kuryr이란? (Container Networking)
Zun이란?
- Zun은 OpenStack 환경에서 VM 대신 컨테이너를 직접 실행할 수 있게 해주는 서비스다.
- OpenStack Nova가 VM을 다루듯이, Zun은 컨테이너를 직접 다룬다.
- Kubernetes처럼 복잡한 오케스트레이션 기능은 없지만, OpenStack의 리소스(Nova, Neutron, Cinder 등)를 활용해 컨테이너를 가볍게 실행할 수 있다.
Zun과 Magnum의 차이
항목 | Zun | Magnum |
목표 | 개별 컨테이너 실행 | 컨테이너 클러스터 관리 |
오케스트레이션 | 없음 | Kubernetes 등 COE 사용 |
사용 난이도 | 쉬움 | 상대적으로 복잡 |
관리 대상 | 컨테이너 1개 단위 | 전체 클러스터 단위 |
목적 | CaaS (Container as a Service) | COE (Container Orchestration Engine as a Service) |
Zun의 주요 특징
컨테이너 단독 실행 (K8s 필요 없음)
- VM 대신 가볍게 컨테이너만 실행하고 싶은 경우 적합
- OpenStack API/CLI로 직접 컨테이너 관리 가능
OpenStack 리소스와 완전 연동
- 컨테이너 네트워크 → Neutron 네트워크 사용
- 컨테이너 볼륨 → Cinder 볼륨 연결 가능
- Keystone으로 인증 및 프로젝트 분리
네이티브 CaaS 제공
- 사용자가 따로 Kubernetes 설정 없이, 바로 컨테이너 실행 가능
- Nova처럼 `openstack container run` 명령으로 즉시 실행
다양한 런타임 지원
- Docker (기본 지원)
- CRI-O 등 다양한 컨테이너 런타임과 연동 가능 (플러그인 방식)
Zun 아키텍처 구성
구성 요소 | 설명 |
Zun API | 컨테이너 요청/관리 API 제공 |
Zun Compute | 컨테이너 실행/상태 관리 |
Zun DB | 컨테이너 메타데이터 저장 |
Kuryr (옵션) | Neutron 연동 시 사용 |
Keystone | 인증 및 프로젝트 분리 |
Zun 설정 및 사용 예시
컨테이너 실행
openstack appcontainer run \\
--name my-container \\
--image nginx \\
--net network=public \\
--cpu 1 --memory 512
실행된 컨테이너 조회
openstack appcontainer list
컨테이너 상세 정보 확인
openstack appcontainer show my-container
컨테이너 로그 확인
openstack appcontainer logs my-container
Zun의 활용 사례
사례 | 설명 |
CI/CD 파이프라인 | 빌드/테스트 단계마다 임시 컨테이너 실행 후 바로 삭제 |
경량 서비스 배포 | VM 대신 단일 컨테이너로 서비스 배포 (LAMP 스택 등) |
배치 작업 실행 | 특정 스크립트 실행용 컨테이너 실행 후 자동 종료 |
개발 환경 제공 | 사용자별 독립 컨테이너 실행 환경 제공 |
Zun vs Magnum vs Nova 비교
비교 항목 | Zun (CaaS) | Magnum (COE) | Nova (VM) |
목적 | 컨테이너 단독 실행 | 컨테이너 클러스터 관리 | VM 실행 |
오케스트레이션 | 없음 | Kubernetes 등 사용 | 없음 |
네트워크 | Neutron | Neutron | Neutron |
볼륨 | Cinder | Cinder | Cinder |
사용 난이도 | 쉬움 | 중간 | 쉬움 |
스케일 | 단일 컨테이너 | 클러스터 전체 | 단일 VM |
Zun 실전 운영 팁
주제 | 팁 |
이미지 관리 | 외부 레지스트리 사용 가능 (Docker Hub, Private Registry) |
네트워크 정책 | Neutron Security Group으로 컨테이너 트래픽 제어 |
데이터 보존 | 컨테이너 종료 후 데이터 보존하려면 Cinder 볼륨 필수 |
로깅 | 컨테이너 로그 수집은 Fluentd, Loki 등 외부 도구와 연동 추천 |
배포 자동화 | Ansible 등으로 openstack appcontainer run 자동화 구성 |
Zun 한계 및 주의점
항목 | 내용 |
오케스트레이션 부재 | 서비스 디스커버리, 오토스케일 등 없음 |
상태 관리 | 컨테이너 장애 시 재시작 기능 약함 |
성능 | 네트워크 성능은 Kuryr에 의존 (튜닝 필요) |
업데이트 전략 | 롤링 업데이트 기능 없음 (수동 재배포 필요) |
보안 | 컨테이너 보안 업데이트 추적 관리 직접 필요 |
Zun 추천 사용 시나리오
- 단기성 컨테이너 작업 (CI/CD, 배치 작업)
- 개발용 컨테이너 환경 제공
- 가벼운 서비스 (웹서버, API 서버) 배포
- VM 대신 컨테이너 기반 경량 서비스 구성
Zun 비추천 시나리오
- 복잡한 마이크로서비스 아키텍처 운영 (서비스 디스커버리, 오토스케일 필요)
- 본격적인 Kubernetes 클러스터 운영
- 수백~수천 개 컨테이너 관리 (스케일 문제)
Zun 장애 대응 및 운영 자동화
Zun 장애 대응 팁 (Troubleshooting)
컨테이너 생성 실패 시
로그 확인
openstack appcontainer logs <container_name>
kubectl logs -n openstack deployment/zun-compute
kubectl logs -n openstack deployment/zun-api
흔한 원인 & 해결책
원인 | 해결책 |
이미지 풀 실패 | Docker Hub 네트워크 문제 or 인증 실패 (Private Registry) |
네트워크 연결 실패 | Neutron 네트워크 설정 확인 (Subnet, Security Group 등) |
볼륨 마운트 실패 | Cinder 볼륨 존재 여부 및 상태 확인 |
컨테이너 런타임 충돌 | Docker 데몬 상태 점검 (systemctl status docker) |
컨테이너 네트워크 장애 시
네트워크 연결 확인
openstack port list --device-owner zun:container
흔한 원인 & 해결책
원인 | 해결책 |
Security Group 미적용 | 해당 포트의 Security Group 규칙 확인 |
Floating IP 연결 실패 | Floating IP 할당 및 연동 여부 점검 |
Kuryr 연동 문제 | Kuryr Controller 및 CNI 로그 확인 |
컨테이너 재시작 실패 시
openstack appcontainer restart <container_name>
흔한 원인 & 해결책
원인 | 해결책 |
컨테이너 이미지 삭제됨 | 해당 이미지 다시 다운로드 (docker pull) |
Neutron 포트 충돌 | 기존 포트 정리 후 재시도 |
Zun Compute 상태 비정상 | Zun Compute 서비스 재시작 |
kubectl rollout restart deployment/zun-compute
Zun 서비스 자체 장애
서비스 상태 확인
kubectl get pod -n openstack | grep zun
서비스 재시작
kubectl rollout restart deployment/zun-api
kubectl rollout restart deployment/zun-compute
Zun + GitOps 자동화 구성 방법
목표
GitOps 방식으로 Zun의 컨테이너 배포 정의를 Git에 저장하고, Git 변경을 감지해 자동으로 Zun 컨테이너를 생성/수정/삭제하는 파이프라인 구성.
Git Repository 구조 예시
zun-gitops/
├── containers/
│ ├── nginx.yaml
│ ├── backend.yaml
컨테이너 정의 예시 (nginx.yaml)
name: nginx-container
image: nginx:latest
cpu: 1
memory: 512
net: public
port_mappings:
- container_port: 80
host_port: 8080
파이프라인 구성 예시 (GitLab CI 기준)
stages:
- deploy
deploy_container:
stage: deploy
script:
- curl -sSL <https://cli.openstack.org/install.sh> | bash
- openstack appcontainer list
- CONTAINER_NAME=$(yq e '.name' containers/nginx.yaml)
- IMAGE=$(yq e '.image' containers/nginx.yaml)
- CPU=$(yq e '.cpu' containers/nginx.yaml)
- MEMORY=$(yq e '.memory' containers/nginx.yaml)
- NETWORK=$(yq e '.net' containers/nginx.yaml)
- openstack appcontainer delete $CONTAINER_NAME || true
- openstack appcontainer run --name $CONTAINER_NAME --image $IMAGE --cpu $CPU --memory $MEMORY --net network=$NETWORK
ArgoCD 연동 예시 (선택적 구성)
- ArgoCD로 GitOps 구성 시, Helm Chart로 Zun 컨테이너 정의 템플릿 작성 가능
- Zun API 호출용 Custom Helm Chart 작성
- Git Commit → ArgoCD 감지 → Helm 배포 → Zun 컨테이너 자동 배포
ArgoCD 자동화 파이프라인 흐름
- 개발자가 Git에 컨테이너 정의 수정 커밋
- ArgoCD가 변경 감지 후 Helm Chart로 Zun 컨테이너 배포 수행
- ArgoCD는 Zun API를 통해 컨테이너 생성/업데이트 요청
장점
- Git으로 모든 컨테이너 상태 관리 (변경 이력 추적)
- YAML 기반으로 관리 → 인프라 정의의 표준화
- 사람이 직접 CLI로 배포할 필요 없음 (완전 자동화)
전체 구성 아키텍처 예시 (Zun + GitOps)
+------------------+
| Developer |
+------------------+
|
v
+--------------------+
| Git Repository |
+--------------------+
|
v
+--------------------+
| ArgoCD (GitOps) |
+--------------------+
|
v
+--------------------+
| OpenStack Zun API |
+--------------------+
|
v
+--------------------+
| Zun Compute Node |
| (Container Runtime)|
+--------------------+
Zun 운영 시 "기억해야 할 것"
포인트 | 설명 |
Stateless 서비스 추천 | Zun 컨테이너는 VM처럼 강한 상태 보장은 어렵다 |
데이터는 외부 저장소로 | 컨테이너 내 데이터 보존은 어렵기 때문에 Cinder 마운트 추천 |
헬스체크 직접 구성 필요 | 컨테이너 상태 감시는 별도 구현 필요 (Zun 자체 모니터링 약함) |
이미지 관리 체계 중요 | 보안 업데이트, 신규 이미지 배포 전략 반드시 수립 |
결론
Zun은 OpenStack 환경에서 빠르고 쉽게 컨테이너를 실행할 수 있는 CaaS 서비스다.
Magnum처럼 Kubernetes 클러스터 전체를 관리할 필요는 없고, 단순히 "이 컨테이너 하나만 띄우고 싶다"는 경우에 매우 적합하다.
특히 다음과 같은 경우 강력 추천
- 개발팀에서 가벼운 서비스 배포할 때
- CI/CD 파이프라인에서 테스트 컨테이너 임시 실행할 때
- VM 대신 컨테이너 기반 서비스로 전환하고 싶은데, Kubernetes까지는 필요 없는 경우
하지만 다음과 같은 경우는 Magnum이나 외부 Kubernetes 서비스가 더 적합할 수 있다
- 마이크로서비스 대규모 운영
- 서비스 디스커버리, 로드밸런싱, 헬스체크 등 오케스트레이션 기능이 필요한 경우
OpenStack 환경에서 가벼운 컨테이너 서비스가 필요하다면, Zun은 좋은 선택이다.
- Zun은 "OpenStack 친화적인 CaaS"로, 가볍고 빠르게 컨테이너 실행할 때 유리
- Kubernetes 수준의 오케스트레이션은 안 되지만, GitOps 구성으로 상당 부분 자동화 가능
- 컨테이너 상태 유지, 장애 감지, 데이터 보존 같은 부분은 직접 보완 필수
- OpenStack 네이티브 리소스(Neutron, Cinder 등)와 완전 연동 가능 → OpenStack 환경에서는 매우 유용
Reference
- https://docs.openstack.org/zun/latest/
- https://github.com/openstack/zun
- https://docs.openstack.org/api-ref/container/
'Openstack' 카테고리의 다른 글
OpenStack Kuryr이란? (Container Networking) (0) | 2025.04.11 |
---|---|
OpenStack Magnum이란? (Container Orchestration) (0) | 2025.03.27 |
OpenStack Mistral이란? (Workflow Service) (0) | 2025.03.14 |
OpenStack Ceilometer란? (Telemetry & Monitoring) (0) | 2025.03.05 |
OpenStack Heat란? (Orchestration) (0) | 2025.02.27 |