베어메탈
고친 사람 github-actions[bot]
베어메탈은 분야마다 다른 것을 가리키는 말입니다. 서버를 빌릴 때는 기계를 쪼개 주는 소프트웨어가 빠진 서버를 가리킵니다. 쿠버네티스에서는 클라우드가 대주던 로드 밸런서가 없는 클러스터를 가리킵니다. 가상 머신 위의 클러스터도 그렇게 부릅니다.
쉽고 빠른 이해
베어메탈은 분야마다 가리키는 것이 갈리는 말입니다. 클라우드에서 가상화하지 않은 서버를 빌리면 그 서버를 베어메탈 서버라고 부릅니다.
문제는 분야마다 가리키는 것이 다르다는 것입니다. 같은 말을 듣고도 서로 다른 구성을 떠올립니다.
이 말을 만나면 이렇게 읽습니다.
- 어느 분야의 문서인지 봅니다
- 그 분야에서 없다는 것이 무엇인지 찾습니다. 서버를 빌릴 때는 하이퍼바이저(기계 한 대를 여러 대처럼 쪼개 주는 소프트웨어), 임베디드에서는 운영체제, 쿠버네티스에서는 클라우드의 로드 밸런서입니다
- 내 구성에서 그것이 없는지 맞춰 봅니다
대가는 이 말 하나로는 구성이 정해지지 않는다는 것입니다. 쿠버네티스 문서의 베어메탈을 물리 서버로 읽으면 가상 머신 위 클러스터에도 맞는 MetalLB 같은 도구를 지나치게 됩니다.
상세
서버 호스팅·가상화·임베디드 세 분야를 한 그림에 놓고 견줍니다. 분야마다 물리 기계 바로 위에 무엇이 서는지를 그립니다. 견주는 기준은 하나입니다. 그 분야가 무엇이 빠졌다고 말하느냐입니다.
bare 는 「덮개 없이 드러난」이라는 영어 낱말입니다. 소프트웨어가 기계를 무언가로 감싸지 않고 바로 만진다는 뜻으로 씁니다. 겉뜻은 이것 하나입니다.
갈림을 보려면 낱말 둘을 먼저 풀어야 합니다. 운영체제는 프로그램 대신 메모리와 장치를 다뤄 주는 소프트웨어입니다. 하이퍼바이저는 물리 기계 한 대를 여러 대처럼 쪼개 주는 소프트웨어입니다. 쪼개진 한 대 한 대가 가상 머신입니다.
하이퍼바이저 자신이 어디에 서는지도 둘로 갈립니다. 기계 위에 바로 서면 타입 1 입니다. 운영체제 위에서 그 운영체제가 돌리는 프로그램으로 돌면 타입 2 입니다. 타입 2 를 밑에서 받치는 운영체제를 호스트 운영체제라고 부릅니다.
서버 호스팅 분야에서 빠진 것은 하이퍼바이저입니다. 운영체제는 남아서 기계 위에 바로 섭니다. 가상화 분야에서 빠진 것은 그 호스트 운영체제입니다. 하이퍼바이저가 기계 위에 바로 섭니다. 임베디드 분야에서는 운영체제가 빠집니다. 프로그램이 기계를 직접 다룹니다.
flowchart TD
subgraph H["서버 호스팅 · 빠진 것은 하이퍼바이저"]
H1["내 프로그램"] --> H2["운영체제"] --> H3["물리 기계"]
end
subgraph V["가상화 · 빠진 것은 호스트 운영체제"]
V1["가상 머신"] --> V2["하이퍼바이저"] --> V3["물리 기계"]
end
subgraph E["임베디드 · 빠진 것은 운영체제"]
E1["내 프로그램"] --> E2["물리 기계"]
end
H3 ~~~ V1
V3 ~~~ E1
세 그림에서 물리 기계 바로 위에 서는 것이 다 다릅니다. 서버 호스팅은 운영체제입니다. 가상화는 하이퍼바이저입니다. 임베디드는 내 프로그램입니다.
쿠버네티스 뜻은 이 그림에 안 들어갑니다. 빠진 것이 기계 위의 계층이 아니라 클라우드가 대주던 기능이기 때문입니다. 백업과 복구의 뜻도 그림 밖입니다. 그 뜻은 도는 방식이 아니라 되살리기를 시작하는 상태를 가리킵니다.
「베어메탈에서 돌린다」는 한 문장으로는 구성이 정해지지 않습니다. 서버를 빌리는 사람은 가상화하지 않은 서버를 떠올립니다. 쿠버네티스 운영자는 클라우드 밖의 클러스터를 떠올립니다. 같은 문장을 듣고 두 사람이 다른 기계를 그립니다.
맥락별 뜻
다섯 맥락을 표 하나에 놓습니다. 칸마다 그 맥락에서 가리키는 뜻과 그 뜻을 적은 문서를 댑니다. 표 아래 소절은 맥락마다 그 뜻이 무엇을 얻고 무엇을 치르는지 짚습니다.
| 맥락 | 뜻 | 출처 |
|---|---|---|
| 서버 호스팅·클라우드 | 가상화하지 않은 서버. 하이퍼바이저 없이 호스트 하드웨어 전체를 쓴다 | Amazon EC2 Instance Types — Nitro System · Instance type naming conventions |
| 가상화 | 하이퍼바이저가 호스트 운영체제 없이 맨 기계 위에서 돈다. 타입 1 | Robert P. Goldberg, 『Architectural Principles for Virtual Computer Systems』(1973). 원문 낱말은 bare machine |
| 임베디드 | 운영체제 없이도 돌 수 있는 프로그램 이미지 | Arm Compiler 6.14 User Guide · Arm Streamline 9.1 Target Setup Guide for Bare-metal Applications |
| 쿠버네티스 | 클라우드 제공자의 로드 밸런서 연동이 없는 클러스터. 가상 머신 위여도 된다 | MetalLB 첫 화면 · MetalLB Cloud compatibility · ingress-nginx Bare-metal considerations |
| 백업·복구와 서버 설치 | 시동조차 안 되는 기계를 처음부터 다시 세운다. 서버 설치에서는 아무것도 깔리지 않은 기계 | Windows Server Backup Add-WBBareMetalRecovery · System Center DPM · System Center Virtual Machine Manager |
서버 호스팅과 클라우드
AWS(Amazon Web Services)의 서버 대여 서비스가 EC2(Elastic Compute Cloud)입니다. EC2 에서 빌리는 서버 한 대를 인스턴스라고 부릅니다. 인스턴스 유형 이름은 점 뒤에 크기를 적습니다. small·4xlarge 같은 크기 대신 metal 이 붙으면 베어메탈 인스턴스입니다.
m5.large 는 가상화한 인스턴스입니다. m5.metal 은 같은 계열의 베어메탈 인스턴스입니다. 베어메탈 인스턴스는 가상화하지 않은 환경입니다.
이 환경이 얻는 것은 둘입니다. 하이퍼바이저가 중간에서 일하느라 드는 가상화 오버헤드를 걷어 냅니다. 호스트 하드웨어 전체에 접근해야 하는 일을 받칩니다.
가상화 쪽과의 차이가 늘 크다는 말은 아닙니다. AWS 가 만든 Nitro 하이퍼바이저는 대부분의 작업에서 베어메탈과 구별되지 않는 성능을 냅니다.
베어메탈 인스턴스가 잘 맞는 일은 둘입니다. 하나는 가상화 환경에서 못 쓰거나 온전히 지원되지 않는 낮은 수준의 하드웨어 기능이 필요할 때입니다. CPU(Central Processing Unit, 중앙 처리 장치)가 가상화를 돕는 기능인 Intel VT(Virtualization Technology, 가상화 기술)가 그 예입니다. 다른 하나는 라이선스나 지원 조건이 가상화하지 않은 환경을 요구할 때입니다.
대가는 켜는 시간입니다. 대부분의 경우 베어메탈 인스턴스를 띄우면 밑의 서버가 부팅합니다. 부팅하면서 하드웨어와 펌웨어를 전부 점검합니다. 펌웨어는 기계에 박혀 부팅 초기에 도는 소프트웨어입니다. 그래서 실행 상태가 된 뒤 네트워크로 닿기까지 20분 이상 걸릴 수 있습니다.
가상화
하이퍼바이저는 VMM(Virtual Machine Monitor, 가상 머신 모니터)이라고도 부릅니다. 타입 1 과 타입 2 라는 구분은 1973년 가상 머신 박사 논문이 세운 것입니다. 타입 1 은 운영체제가 없는 맨 기계 위에서 돕니다. 타입 2 는 호스트 운영체제 위에서 그 운영체제가 돌리는 프로그램으로 돕니다.
베어메탈 하이퍼바이저는 타입 1 을 가리킵니다. 이 뜻에서 빠진 것은 하이퍼바이저 밑의 운영체제입니다. 하이퍼바이저 위에 뜬 가상 머신 안에는 운영체제가 여전히 돕니다.
두 타입은 맡는 일이 다릅니다. 타입 1 은 밑에 운영체제가 없으니 스케줄링과 자원 배분을 하이퍼바이저가 직접 합니다. 그래서 가상 머신을 만드는 데 꼭 필요하지는 않은 코드까지 품을 수 있습니다.
타입 2 에서는 자원 배분과 환경 만들기가 더 또렷이 갈립니다. 호스트 운영체제가 평소대로 자원을 배분합니다. 하이퍼바이저는 그 위에서 가상 머신이 볼 하드웨어 환경을 만듭니다.
flowchart TD
subgraph T1["타입 1 · 기계 위에 바로 선다"]
A1["가상 머신"] --> A2["하이퍼바이저 · 스케줄링과 자원 배분까지 맡는다"] --> A3["물리 기계"]
end
subgraph T2["타입 2 · 호스트 운영체제 위에 선다"]
B1["가상 머신"] --> B2["하이퍼바이저 · 가상 머신이 볼 하드웨어 환경을 만든다"] --> B3["호스트 운영체제 · 평소대로 자원을 배분한다"] --> B4["물리 기계"]
end
A3 ~~~ B1
임베디드
임베디드는 가전이나 센서처럼 다른 기계 안에 들어가 정해진 일을 하는 컴퓨터를 다루는 분야입니다. 이미지는 기계에 올려 바로 실행할 수 있게 묶은 프로그램 덩어리입니다. 이 분야에서 베어메탈 이미지는 운영체제 없이도 돌 수 있는 이미지입니다.
Arm Compiler 는 기본으로 베어메탈 이미지를 만듭니다. 이미지는 실물 하드웨어 위에서 돌 수 있습니다. 그 하드웨어를 흉내 내는 소프트웨어 위에서도 돌 수 있습니다.
운영체제가 없으면 화면 출력 같은 입출력도 운영체제에 맡기지 못합니다. 세미호스팅은 개발용 호스트 컴퓨터의 입출력을 빌려 쓰는 기능입니다. Arm Compiler 의 C 라이브러리는 기본으로 이 기능을 씁니다. 개발 초기에 보드의 입출력을 아직 못 쓸 때 쓸모가 있습니다.
임베디드 안에서도 선이 하나로 그어지지 않습니다. 실시간 운영체제는 정해진 시간 안에 반응하도록 만든 운영체제입니다. Arm Streamline 은 장치의 시스템 상태를 그려 보이는 분석 도구입니다.
이 도구의 bare-metal 지원은 두 가지 장치를 함께 다룹니다. 운영체제가 없는 장치와 가벼운 실시간 운영체제를 올린 장치입니다.
같은 분야 안에서도 베어메탈이 덮는 범위가 문서마다 다릅니다. Arm Compiler 쪽은 운영체제 없이 도는 이미지를 말합니다. Streamline 쪽은 가벼운 실시간 운영체제를 올린 장치까지 끌어안습니다.
쿠버네티스
쿠버네티스는 컨테이너를 여러 기계에 나눠 띄우고 관리하는 도구입니다. 로드 밸런서는 들어오는 요청을 여러 서버에 나눠 주는 장치나 소프트웨어입니다.
쿠버네티스에서 서비스는 클러스터 안의 애플리케이션을 네트워크로 드러내는 설정 단위입니다. 바깥 요청을 받는 입구로 네트워크 로드 밸런서를 쓰려면 LoadBalancer 유형 서비스를 만듭니다.
쿠버네티스가 함께 내놓는 네트워크 로드 밸런서 구현은 전부 IaaS(Infrastructure as a Service, 서비스형 인프라) 플랫폼을 부르는 연결 코드입니다. GCP(Google Cloud Platform)·AWS·Azure 가 그런 플랫폼입니다. 지원되는 IaaS 플랫폼 밖에서는 LoadBalancer 서비스를 만들어도 「pending」 상태에 한없이 머뭅니다. 이 맥락의 베어메탈 클러스터가 그런 클러스터입니다.
서비스 종류로 남는 수단은 둘입니다. 이름이 그대로 수단을 말합니다. NodePort 서비스는 노드, 곧 클러스터를 이루는 기계의 포트를 열어 받습니다. externalIPs 서비스는 밖에서 쓰는 IP(Internet Protocol, 인터넷 프로토콜) 주소를 직접 적어 받습니다.
둘 다 운영 환경에 쓰기에는 큰 단점이 있습니다. 무엇이 단점인지는 확인되지 않았습니다. MetalLB 는 이 빈 곳을 표준 라우팅 프로토콜로 채우는 로드 밸런서 구현입니다.
ingress-nginx 는 클러스터 바깥 요청을 받아 안쪽 애플리케이션으로 넘기는 입구 프로그램입니다. 클라우드 환경에서는 네트워크 로드 밸런서를 필요할 때 받아 씁니다. 쿠버네티스 설정 파일인 매니페스트 하나면 바깥 클라이언트가 닿을 입구가 생깁니다.
베어메탈 환경에는 이 기본 제공품이 없습니다. 같은 입구를 열려면 설정이 조금 달라집니다.
이 뜻에서 갈림 기준은 기계가 아니라 클라우드 제공자입니다. MetalLB 는 OpenStack·Proxmox·VMware 같은 가상화 플랫폼 위에서 동작합니다. OpenStack 가상 머신 위에 쿠버네티스 클러스터를 세우고 MetalLB 를 로드 밸런서로 쓸 수 있습니다.
다만 조건이 하나 붙습니다. MetalLB 의 L2(Layer 2, 2계층) 모드를 쓰려면 쿠버네티스를 돌리는 모든 가상 머신에서 OpenStack 의 ARP(Address Resolution Protocol, 주소 결정 프로토콜) 스푸핑 방지를 꺼야 합니다. 스푸핑 방지는 가상 머신이 자기 것이 아닌 주소를 자기 것이라고 알리는 것을 막는 기능입니다.
반대로 AWS·Google Cloud 에서는 동작하지 않습니다. 클라우드 제공자는 네트워크 계층을 다루는 데 표준 프로토콜 대신 자기만의 API(Application Programming Interface, 응용 프로그램 인터페이스)를 내놓습니다. 「전용 서버」를 파는 클라우드 제공자도 MetalLB 가 쓰는 네트워크 프로토콜은 대개 지원하지 않습니다.
한 클러스터가 한 뜻으로는 베어메탈이어도 다른 뜻으로는 아닐 수 있습니다.
| 구성 | 서버 호스팅 뜻 | 쿠버네티스 뜻 |
|---|---|---|
| MetalLB 로 로드 밸런서를 대는 OpenStack 가상 머신 위 클러스터 | ✗ 가상 머신이다 | ✓ MetalLB 가 받치는 베어메탈 클러스터다 |
| EC2 베어메탈 인스턴스 위 클러스터 | ✓ 가상화하지 않은 서버다 | ✗ 지원되는 IaaS 플랫폼 위다 |
백업과 복구
이 맥락의 베어메탈은 돌아가는 방식이 아니라 되살리기를 시작하는 상태입니다. 베어메탈 복구는 치명적인 고장 뒤에 컴퓨터를 다시 세우는 과정입니다. 기계가 시동조차 안 되어 전부 되살려야 할 때를 대비합니다.
볼륨은 운영체제가 하나의 저장 공간으로 다루는 디스크 구역입니다. BMR(bare metal recovery, 베어메탈 복구) 백업은 운영체제 파일과 데이터를 담습니다. 빠지는 것은 핵심 볼륨 밖에 있는 사용자 데이터뿐입니다. 핵심 볼륨은 기계를 되살리는 데 필요한 볼륨을 말합니다.
BMR 백업 안에는 시스템 상태 백업도 들어갑니다. 시스템 상태 백업은 사용자 데이터가 아니라 운영체제 자신을 되살리기 위한 백업입니다. Windows Server Backup 에서도 백업 정책에 베어메탈 복구를 더하면 시스템 상태 복구가 함께 더해집니다.
이 백업은 시스템 볼륨과 마스터 부트 레코드를 볼륨째 복사합니다. 시스템 볼륨은 운영체제가 들어 있는 볼륨입니다. 마스터 부트 레코드는 디스크 맨 앞에서 부팅을 시작하게 하는 기록입니다.
서버를 처음 설치할 때도 같은 뜻으로 씁니다. System Center Virtual Machine Manager 는 아무것도 설치되지 않은 물리 기계를 찾아낼 수 있습니다. 거기에 운영체제를 자동으로 설치합니다. 그 기계를 Microsoft 의 하이퍼바이저인 Hyper-V 의 호스트로 만듭니다. 이 맥락의 bare metal computer 는 아무것도 깔리지 않은 컴퓨터입니다.
배경
같은 낱말이 어떻게 두 번째 뜻을 얻었는지를 짚습니다. 대상은 1973년 로버트 골드버그(Robert P. Goldberg)의 가상 머신 박사 논문이 쓴 bare machine 이라는 말입니다. 그 무렵 운영체제는 기계를 쓰기 편하게 넓힌 「확장된 기계」였습니다. 그런데 기계 자원에 직접 닿아야 하는 사용자는 그 편의를 누리지 못했습니다.
운영체제 자체를 디버깅하는 사람이 그랬습니다. 테이프 드라이브가 제대로 기록하는지, 디스크 드라이브가 제대로 찾아가는지 점검하는 진단 소프트웨어도 그랬습니다. 이런 프로그램은 운영체제 없는 맨 기계, bare machine 위에서 돌도록 쓰였습니다. 가상 머신은 그 맨 호스트 기계를 효율적으로 흉내 낸 사본으로 정의됐습니다.
그러자 가상 머신을 만드는 하이퍼바이저 자신은 어디서 도느냐는 물음이 생겼습니다. 맨 기계 위에서 돌면 타입 1 입니다. 호스트 운영체제 위에서 그 운영체제의 프로그램으로 돌면 타입 2 입니다. 같은 bare 가 이번에는 하이퍼바이저 밑에 운영체제가 있느냐를 가르는 데 쓰였습니다.
bare machine 이 언제 bare metal 이 됐는지, 언제 클라우드 상품 이름이 됐는지는 확인되지 않았습니다.
경계
EC2 전용 호스트(Dedicated Host)도 베어메탈인가. 그것만으로는 아닙니다. 서버 호스팅 뜻의 베어메탈을 가르는 것은 하이퍼바이저가 있느냐입니다. 서버 한 대가 한 고객에게 붙어 있느냐가 아닙니다.
전용 호스트는 물리 서버 한 대를 한 고객의 쓰임에 온전히 붙여 주는 상품입니다. 그 인스턴스 용량을 다른 AWS 계정과 나눠 쓰도록 고를 수도 있습니다.
그 위에 무슨 인스턴스 유형을 올릴지는 따로 고릅니다. m5.large 같은 가상화 유형으로 호스트를 잡으면 가상화한 인스턴스가 뜹니다. m5.metal 같은 .metal 유형으로 잡으면 베어메탈 인스턴스가 뜹니다. 한번 잡은 뒤에는 둘 사이를 바꾸지 못합니다.
가상화 유형을 올린 전용 호스트는 베어메탈이 아닙니다. 서버 한 대를 전용으로 쓴다는 것과 하이퍼바이저가 없다는 것은 다른 조건입니다.
관련 항목
베어메탈이 맥락마다 빼는 계층
하이퍼바이저 · 호스트 운영체제 · 운영체제 · 가상 머신 · 가상화
베어메탈 서버를 빌려 주는 클라우드 상품
클라우드 · IaaS · Amazon EC2 · 인스턴스 · 전용 호스트 · 전용 인스턴스 · Nitro System
베어메탈 인스턴스를 고르는 조건과 치르는 비용
가상화 오버헤드 · Intel VT · CPU · 소프트웨어 라이선스 · 부팅 · 펌웨어
베어메탈 하이퍼바이저가 속하는 분류
타입 1 하이퍼바이저 · 타입 2 하이퍼바이저 · 가상 머신 모니터 · Hyper-V · 스케줄링
베어메탈 이미지를 만들고 돌리는 임베디드 도구
임베디드 · Arm Compiler · 세미호스팅 · Fixed Virtual Platforms · Arm Streamline · 실시간 운영체제
베어메탈 클러스터에서 클라우드 로드 밸런서를 대신하는 수단
쿠버네티스 · 로드 밸런서 · LoadBalancer 서비스 · MetalLB · NodePort · externalIPs · ingress-nginx · BGP · ARP
쿠버네티스 뜻의 베어메탈과 맞세워지는 클라우드 플랫폼
MetalLB 를 올릴 수 있는 가상화 플랫폼
OpenStack · Proxmox · VMware
베어메탈 복구가 되살리는 대상
베어메탈 복구 · 시스템 상태 · 시스템 볼륨 · 마스터 부트 레코드 · 볼륨 섀도 복사본 서비스
빈 기계를 되살리거나 설치하는 도구
Windows Server Backup · System Center Data Protection Manager · System Center Virtual Machine Manager · PXE · 프로비저닝
베어메탈이 속하는 상위 분류
다른 이름: bare metal · bare-metal · 베어 메탈 · 베어메탈 서버