[프로메테우스 #15] Docker 설정 문제가 아니었다: Apple Silicon에서 Harbor가 안 뜨는 구조적 이유

도람·2025년 12월 18일

왜 이 글을 쓰게 되었는지

쿠버네티스 실습 중 Prometheus를 사용해 외부 서비스의 메트릭을 수집하는 구조를 이해하기 위해 이 실습을 진행했다.
특히, 쿠버네티스 클러스터 내부가 아닌 외부 VM에서 동작하는 Harbor의 메트릭을 Prometheus가 수집하는 구조를 직접 구성해보는 것이 목적이다.

이 실습을 통해 다음을 이해하는 것이 목표다.

  • 쿠버네티스와 무관한 외부 서비스의 메트릭 수집 방식
  • additionalScrapeConfigs의 실제 사용 목적
  • 운영 환경에서 Prometheus가 외부 시스템을 모니터링하는 구조

실습 전체 아키텍처 개요

전체 구성은 다음과 같다.

[ 외부 VM (amd64) ]
- Docker
- Docker Compose
- Harbor
- harbor-exporter
→ /metrics 제공

        ↓ HTTP 요청

[ Kubernetes Cluster (ARM64) ]
- kube-prometheus-stack
- Prometheus
→ 외부 Harbor 메트릭 수집

중요한 점은 Harbor는 쿠버네티스 외부에서 동작한다는 점이다.
쿠버네티스 노드에는 Harbor를 설치하지 않는다.


1. 외부 VM에 Harbor 설치하기 (Docker Compose 방식)

1-1. 외부 VM 준비 (이론상 요구사항)

이 실습에서는 쿠버네티스와 무관한 별도의 외부 VM이 필요하다.

요구 조건은 다음과 같다.

  • 아키텍처: amd64 (x86_64)
  • Docker, Docker Compose 설치 가능
  • 쿠버네티스 클러스터에서 접근 가능한 고정 IP 보유

예시 IP:
ex): 192.168.1.92

이 VM은 Prometheus가 항상 동일한 주소로 접근할 수 있어야 하므로
고정 IP 설정이 필수다.

고정 IP 설정 과정

  1. netplan 파일 확인

다음과 같이 설정하여 IP를 고정해준다.

이 설정이 의미하는 것:

  • dhcp4: false
    → DHCP 사용 안 한다
  • addresses
    → 이 VM은 항상 192.168.174.132를 쓴다
  • gateway4
    → 외부 통신 가능
    -nameservers
    → DNS 정상 동작

즉, Prometheus가 항상 같은 IP로 Harbor에 접근할 수 있게 만드는 설정이다.


  1. 설정 적용
sudo chmod 600 /etc/netplan/01-netcfg.yaml
sudo netplan apply


  1. 적용됐는지 확인

1-2 필수 패키지 설치



나는 다음과 같이 아무것도 깔려있지 않아서 모두 깔아주었다.
해당 명령어를 통해 기존에 깔아져있는 것이 있으면 그것은 넘어가도 된다.

Docker 설치

sudo apt update
sudo apt install -y docker.io
sudo systemctl enable docker
sudo systemctl start docker

Docker 권한 설정

기본적으로 Docker은 root권한이 필요하기 때문에
실습 편의를 위해 현재 사용자를 docker 그룹에 추가해준다.

sudo usermod -aG docker doram

적용을 위해 로그아웃 후 재접속한다.

exit 

다시 SSH로 접속한 뒤 확인한다.

docker ps

에러 없이 출력되면 정상이다.


Docker Compose 설치

sudo apt install -y docker-compose

나는 이 과정에서 디스크 공간 부족 문제를 겪었다.

따라서
df -h
하여 보았는데,

트러블슈팅 1

다음과 같이 원래 쿠버네티스 노드로 쓰이던 vm이라
새 외부 VM을 만들기로 하였다.


새 vm에서 설치 완료하였다.


설치확인

docker --version
docker-compose version

위와같이 나옴으로서, 잘 설치된 것을 확인할 수 있다.


1-3 Harbor 설치 파일 준비

wget https://github.com/goharbor/harbor/releases/download/v2.14.1/harbor-offline-installer-v2.14.1.tgz
tar -xvf harbor-offline-installer-v2.14.1.tgz
cd harbor

ls 하여
harbor.yml.tmpl, install.sh이 있는 것을 보아 성공했다고 볼 수 있다.


1-4 harbor.yml 설정

cp harbor.yml.tmpl harbor.yml
sudo vim harbor.yml
hostname: 192.168.174.132

http:
  port: 80

harbor_admin_password: Harbor12345

database:
  password: root123

data_volume: /data

metric:
  enabled: true
  • hostname은 외부 VM의 IP이다.
  • HTTPS는 실습에서는 사용하지 않는다. (#으로 주석처리 해준다.)
  • metric.enabled: true가 핵심이다.
    이 설정이 있어야 Harbor 메트릭이 노출된다.

1-5 Harbor 설치 진행

Harbor 설정(harbor.yml)까지 완료한 후
다음 명령으로 설치를 진행했다.

sudo ./install.sh

그러나 설치 과정 중 다음과 같은 오류가 발생했다.

exec format error

이 에러는 단순한 설치 실패가 아니다.
원인을 분석해보면 다음과 같다.

트러블슈팅: exec format error의 원인

  • Harbor 공식 이미지들은 amd64(x86_64) 기준으로 빌드되어 있다.
  • 그런데 현재 사용 중인 외부 VM의 아키텍처는 ARM64(aarch64) 이다.
  • Docker는 이미지를 실행할 때 호스트 CPU 아키텍처와 바이너리 포맷을 직접 사용한다.
  • 아키텍처가 다를 경우, 컨테이너 내부 바이너리를 실행할 수 없다.

즉,

  • 설정 문제도 아니다
  • harbor.yml 문제도 아니다
  • 네트워크 문제도 아니다
  • Docker 문제도 아니다
    -> CPU 아키텍처 자체가 맞지 않는다.

그래서 컨테이너는 뜨지만,
컨테이너 안의 실행 파일이 실행되지 못해 exec format error가 발생한다.


왜 이 실습이 내 환경에서는 구조적으로 불가능했는가

이 지점이 이 글의 핵심이다.

내 실습 환경 요약

  • MacBook: Apple Silicon (ARM64)
  • 가상화 도구: VMware Fusion
  • 외부 VM: ARM64 Ubuntu
  • Harbor: amd64 전용 이미지

구조적 문제 정리

  • Apple Silicon Mac은 ARM64 CPU다.
  • VMware Fusion은 호스트 CPU와 동일한 아키텍처만 가상화할 수 있다.
  • 즉, ARM Mac에서는 x86(amd64) VM을 가상화할 수 없다.
  • VMware Fusion (Apple Silicon)은 x86 에뮬레이션을 지원하지 않는다.

그래서 발생한 상황은 다음과 같다.

  • amd64 Ubuntu ISO → 부팅 자체 불가
  • ARM Ubuntu ISO → 부팅 가능
  • ARM Ubuntu 위에서 Harbor 설치 → exec format error 발생

👉 즉, VM을 새로 만들어도 해결되지 않는 구조적 한계다.

이 실습은 이론적으로는 정상적인 실습이지만,
Apple Silicon + VMware Fusion 환경에서는 실행 자체가 불가능했다.


정리: 실습은 실패했지만, 목적은 달성했다

결론적으로 이 실습은 환경 제약으로 인해 실제 구성까지는 실패했다.
그러나 이 실습을 통해 다음은 명확히 이해했다.

  • Prometheus는 additionalScrapeConfigs를 통해 외부 시스템을 수집한다
  • Harbor는 쿠버네티스 외부 서비스의 대표적인 예시다
  • 이 구조는 실습용이 아니라 운영 환경에서 그대로 사용된다
  • 실패 원인은 설정 미숙이 아니라 아키텍처 불일치다

이 실습이 원래 의도한 구조는 정상적이며 타당했다.
다만, 내 실습 환경(Apple Silicon + VMware Fusion) 에서는
해당 구조를 물리적으로 재현할 수 없었을 수 없었다.


profile
정도를 걷는 엔지니어

0개의 댓글