Nova를 활용한 Helm 차트 버전 관리: 설치부터 고급 설정까지

Kubernetes 환경에서 Helm 차트 버전을 관리하는 것은 운영 효율성과 보안에 직결된 과제입니다. Nova는 클러스터에 설치된 Helm 차트를 자동 스캔하여 구버전이나 폐기된 차트를 식별해 주는 오픈소스 도구입니다. 이 도구를 사용하면 복잡한 마이크로서비스 아키텍처에서도 수십, 수백 개의 차트 상태를 한눈에 파악할 수 있습니다.

Nova의 핵심 기능

  • 클러스터 내 모든 Helm 릴리스 자동 탐색
  • 등록된 Helm 저장소의 최신 버전과 비교
  • 폐기된 차트 버전 경고 (보안 위험 방지)
  • 컨테이너 이미지 버전까지 함께 점검

빠른 설치 (5분 이내)

방법 1: 바이너리 다운로드

wget https://github.com/FairwindsOps/nova/releases/download/v3.2.0/nova_3.2.0_linux_amd64.tar.gz
tar xzf nova_3.2.0_linux_amd64.tar.gz
sudo install nova /usr/local/bin/

방법 2: Homebrew (macOS)

brew tap fairwindsops/tap
brew install fairwindsops/tap/nova

방법 3: 소스 빌드

git clone https://github.com/fairwindsops/nova.git
cd nova
go build -o nova .

설치 확인:

nova version

기본 사용법

클러스터 스캔

$ nova scan

Release Name      Installed    Latest     Outdated    Deprecated
============      =========    ======     =======     ==========
cert-manager      v0.11.0      v0.15.2    yes         no
metrics-server    5.6.0        5.10.10    yes         no
grafana           2.1.3        3.1.1      yes         no

상세 정보 출력

$ nova scan --extended

Release Name      Chart Name        Namespace         HelmVer    Installed    Latest     Outdated    Deprecated
============      ==========        =========         =======    =========    ======     =======     ==========
goldilocks        goldilocks        goldilocks        3          3.3.1        4.0.1      yes         no

컨테이너 이미지 버전 검사

$ nova scan --images

Container Image                            Current      Outdated   Latest     Latest Minor   Latest Patch
===============                            =======      ========   ======     =============   =============
k8s.gcr.io/coredns/coredns                v1.8.0       yes        v1.8.6     v1.8.6          v1.8.6
k8s.gcr.io/etcd                           3.4.13-0     yes        3.5.3-0    3.4.13-0        3.4.13-0

고급 설정

원하는 버전 지정

항상 최신 버전이 아닌 특정 버전을 기준으로 비교할 수 있습니다.

YAML 설정 파일 (nova.yaml)

desired-versions:
  metrics-server: 6.0.0
  vpa: 12.0.0

CLI 옵션

nova scan --desired-versions='metrics-server=6.0.0,vpa=12.0.0'

스캔 제외 목록

# 차트 이름 기준 제외
nova scan --skip-charts="cert-manager,nginx-ingress"

# 릴리스 이름 기준 제외
nova scan --skip-releases="my-release-1,my-release-2"

출력 형식 지정

nova scan --format=table    # 기본 표
nova scan --format=json     # JSON (자동화용)
nova scan --output=results.json  # 파일 저장

실제 활용 사례

정기 보안 점검 (CronJob)

# 매주 월요일 오전 8시 실행
0 8 * * 1 nova scan --format=json --output=/var/log/nova-weekly-$(date +\%Y\%m\%d).json

CI/CD 파이프라인 통합 (GitLab CI)

nova-check:
  stage: test
  script:
    - nova scan --show-outdated --format=json > nova-report.json
    - |
      if jq '.helm[] | select(.outdated == true or .deprecated == true)' nova-report.json | grep -q .; then
        echo "Outdated or deprecated Helm charts detected!"
        exit 1
      fi

멀티 클러스터 관리

# 개발 클러스터: 최신 버전 허용
nova scan --context=dev-cluster --desired-versions='metrics-server=latest'

# 운영 클러스터: 안정 버전 고정
nova scan --context=prod-cluster --desired-versions='metrics-server=5.10.10,nginx-ingress=1.40.3'

아키텍처 개요

컴포넌트역할소스 위치
Cluster ScannerKubernetes 클러스터에서 Helm 릴리스 수집pkg/helm/cluster.go
ArtifactHub ClientArtifactHub에서 차트 메타데이터 조회pkg/helm/artifacthub.go
Version Comparator버전 비교 및 구버전 판단pkg/helm/findscore.go
Container Scanner컨테이너 이미지 버전 스캔pkg/containers/images.go
Output Formatter결과 출력 포맷팅pkg/output/output.go

문제 해결 및 팁

ArtifactHub 연결 실패

nova scan --poll-artifacthub=false --url=https://charts.helm.sh/stable

스캔 속도 저하

nova scan --timeout=30

프라이빗 저장소 인증

helm repo add private-repo https://private.example.com/charts
helm repo update
nova scan --url=https://private.example.com/charts

보안 참고사항

v3.12.0부터 이미지 저장소가 변경되었습니다:

# 이전
quay.io/fairwinds/nova:<tag>
# 이후
us-docker.pkg.dev/fairwinds-ops/oss/nova:<tag>

서명된 이미지와 불변 태그를 사용하려면 전체 버전 태그를 지정하세요:

us-docker.pkg.dev/fairwinds-ops/oss/nova:v3.12.0

추천 운영 방식

  • 1주일에 한 번 이상 전체 스캔 실행
  • 운영 환경에는 보수적인 원하는 버전 설정
  • 스캔 결과를 모니터링 시스템이나 알림 채널에 연동
  • 팀 전체가 접근 가능한 대시보드에 결과 공유

태그: Nova helm Chart kubernetes 버전관리

8월 28일 21:04에 게시됨