Openstack

OpenStack Zun이란? (Container as a Service - CaaS)

Somaz 2025. 4. 17. 13:10
728x90
반응형

Overview

오늘은 OpenStack Zun에 대해 알아보겠다. Zun은 OpenStack 환경에서 컨테이너를 직접 실행하고 관리하는 서비스이다.

Magnum과 달리 Kubernetes 같은 오케스트레이션 플랫폼 없이, OpenStack 네이티브 API와 CLI를 통해 컨테이너 단독 실행 및 관리를 지원하는 CaaS(Container as a Service) 서비스다.

 

출처 : https://wiki.openstack.org/wiki/Zun

 

 

 

 

 

📅 관련 글

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 자동화 파이프라인 흐름

  1. 개발자가 Git에 컨테이너 정의 수정 커밋
  2. ArgoCD가 변경 감지 후 Helm Chart로 Zun 컨테이너 배포 수행
  3. 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

 

 

728x90
반응형