쿠버네티스 실습 중 Prometheus를 사용해 외부 서비스의 메트릭을 수집하는 구조를 이해하기 위해 이 실습을 진행했다.
특히, 쿠버네티스 클러스터 내부가 아닌 외부 VM에서 동작하는 Harbor의 메트릭을 Prometheus가 수집하는 구조를 직접 구성해보는 것이 목적이다.
이 실습을 통해 다음을 이해하는 것이 목표다.
전체 구성은 다음과 같다.
[ 외부 VM (amd64) ]
- Docker
- Docker Compose
- Harbor
- harbor-exporter
→ /metrics 제공
↓ HTTP 요청
[ Kubernetes Cluster (ARM64) ]
- kube-prometheus-stack
- Prometheus
→ 외부 Harbor 메트릭 수집
중요한 점은 Harbor는 쿠버네티스 외부에서 동작한다는 점이다.
쿠버네티스 노드에는 Harbor를 설치하지 않는다.
1-1. 외부 VM 준비 (이론상 요구사항)
이 실습에서는 쿠버네티스와 무관한 별도의 외부 VM이 필요하다.
요구 조건은 다음과 같다.
예시 IP:
ex): 192.168.1.92
이 VM은 Prometheus가 항상 동일한 주소로 접근할 수 있어야 하므로
고정 IP 설정이 필수다.


다음과 같이 설정하여 IP를 고정해준다.
이 설정이 의미하는 것:
즉, Prometheus가 항상 같은 IP로 Harbor에 접근할 수 있게 만드는 설정이다.
sudo chmod 600 /etc/netplan/01-netcfg.yaml
sudo netplan apply



나는 다음과 같이 아무것도 깔려있지 않아서 모두 깔아주었다.
해당 명령어를 통해 기존에 깔아져있는 것이 있으면 그것은 넘어가도 된다.
sudo apt update
sudo apt install -y docker.io
sudo systemctl enable docker
sudo systemctl start docker
기본적으로 Docker은 root권한이 필요하기 때문에
실습 편의를 위해 현재 사용자를 docker 그룹에 추가해준다.
sudo usermod -aG docker doram
적용을 위해 로그아웃 후 재접속한다.
exit
다시 SSH로 접속한 뒤 확인한다.
docker ps
에러 없이 출력되면 정상이다.

sudo apt install -y docker-compose

나는 이 과정에서 디스크 공간 부족 문제를 겪었다.
따라서
df -h
하여 보았는데,

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

새 vm에서 설치 완료하였다.
docker --version
docker-compose version

위와같이 나옴으로서, 잘 설치된 것을 확인할 수 있다.
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이 있는 것을 보아 성공했다고 볼 수 있다.

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
Harbor 설정(harbor.yml)까지 완료한 후
다음 명령으로 설치를 진행했다.
sudo ./install.sh
그러나 설치 과정 중 다음과 같은 오류가 발생했다.
exec format error
이 에러는 단순한 설치 실패가 아니다.
원인을 분석해보면 다음과 같다.
트러블슈팅: exec format error의 원인
즉,
그래서 컨테이너는 뜨지만,
컨테이너 안의 실행 파일이 실행되지 못해 exec format error가 발생한다.
이 지점이 이 글의 핵심이다.
내 실습 환경 요약
구조적 문제 정리
그래서 발생한 상황은 다음과 같다.
👉 즉, VM을 새로 만들어도 해결되지 않는 구조적 한계다.
이 실습은 이론적으로는 정상적인 실습이지만,
Apple Silicon + VMware Fusion 환경에서는 실행 자체가 불가능했다.
결론적으로 이 실습은 환경 제약으로 인해 실제 구성까지는 실패했다.
그러나 이 실습을 통해 다음은 명확히 이해했다.
이 실습이 원래 의도한 구조는 정상적이며 타당했다.
다만, 내 실습 환경(Apple Silicon + VMware Fusion) 에서는
해당 구조를 물리적으로 재현할 수 없었을 수 없었다.