
OpenStack이란?
참고 자료
https://www.redhat.com/ko/topics/openstack
OpenStack을 한 문장으로 표현하면
여러 대의 서버, 스토리지, 네트워크 장비를 하나의 거대한 자원처럼 묶어서
클라우드 환경을 만들고 관리할 수 있게 해주는 오픈소스 플랫폼이라고 할 수 있다.
이 한 문장을 이해하기 쉽게 설명하자면 다음과 같다.
우리가 흔히 사용하는 AWS, Microsoft Azure, Google Cloud 같은 서비스에서는 웹 화면에서
몇 번 클릭하는 것만으로 가상 서버를 만들 수 있다.
이때 사용자는 실제 서버가 어디에 있는지, 어떤 네트워크에 연결되는지,
저장 공간이 어떤 장비에서 제공되는지 크게 신경쓰지 않아도 된다.
OpenStack도 이와 비슷한 기능을 제공한다.
차이점은 AWS 같은 클라우드는 다른 회사가 구축해놓은 환경을 빌려 사용하는 서비스인 반면,
OpenStack은 기업이나 기관이 자신이 보유한 서버와 네트워크 장비를 이용해 직접 클라우드를
만들 수 있도록 해주는 소프트웨어라는 점이다.
예를 들어 회사에 물리 서버가 10대 있다고 가정해보자.
OpenStack을 사용하지 않는다면 관리자가 각각의 서버에 직접 접속해 운영체제를 설치하고,
네트워크를 설정하고, 사용자를 관리해야 한다.
하지만 OpenStack을 구축하면 10대의 서버가 가진
CPU, 메모리, 저장 공간, 네트워크 자원을 하나의 클라우드 자원처럼 관리할 수 있다.
사용자는 OpenStack 대시보드나 명령어를 이용해 필요한 크기의 가상 서버를 생성할 수 있다.
즉 OpenStack은 다음과 같은 요청을 자동으로 처리해준다.
• 가상 서버를 생성한다.
• 가상 서버에 사용할 운영체제 이미지를 선택한다.
• CPU와 메모리를 할당한다.
• 네트워크와 IP 주소를 연결한다.
• 데이터를 저장할 디스크를 생성한다.
• 사용자별 권한과 사용할 수 있는 자원을 관리한다.
풀링된 가상 리소스?
참고 자료에도 나와 있고, OpenStack 설명에서 자주 등장하는 표현이 바로 '풀링된 가상 리소스' 다.
여기서 풀링이란 여러 곳에 흩어져 있는 자원을 하나의 공간으로 모아 관리하는 것을 의미한다.
예를 들어 물리 서버 세 대가 다음과 같은 자원을 가지고 있다고 가정해보자.
첫 번째 서버에는 CPU 16개와 메모리 64GB가 있고,
두 번째 서버에는 CPU 32개와 메모리 128GB가 있으며,
세 번째 서버에는 CPU 16개와 메모리 64GB가 있다고 하자.
OpenStack은 이러한 서버들의 자원을 각각 따로 보는 것이 아니라,
클라우드 전체에서 사용할 수 있는 CPU와 메모리 자원으로 관리한다.
사용자가 CPU 2개와 메모리 4GB가 필요한 가상 서버를 요청하면
OpenStack은 현재 여유 자원이 있는 물리 서버를 찾아 그곳에 가상 서버를 생성한다.
사용자는 실제로 어느 물리 서버에 가상 서버가 만들어졌는지 알 필요가 없다.
OpenStack이 물리 서버들의 상태를 확인하고 적절한 위치를 자동으로 선택하기 때문이다.
이렇게 여러 서버의 자원을 하나로 모아 필요할 때 나누어 사용하는 것을
리소스 풀링(Resource Pooling)이라고 한다.
프라이빗 클라우드와 퍼블릭 클라우드
OpenStack은 프라이빗 클라우드와 퍼블릭 클라우드를 모두 구축하는데 사용할 수 있다.
프라이빗 클라우드는 특정 회사나 기관 내부에서만 사용하는 클라우드 환경이다.
예를 들어 금융회사, 공공기관, 연구소처럼 데이터 보안이 중요한 조직은
외부 클라우드 대신 자체 데이터센터에 서버를 설치하고 OpenStack을 구축할 수 있다.
이렇게 하면 서버와 데이터를 직접 관리하면서도 AWS처럼 가상 서버를 빠르게 생성하고 삭제할 수 있다.
퍼블릭 클라우드는 여러 고객에게 클라우드 자원을 제공하는 형태다.
클라우드 서비스 제공 업체가 OpenStack을 구축한 뒤,
여러 기업이나 사용자에게 가상 서버, 스토리지, 네트워크 등을 빌려줄 수 있다.
따라서 OpenStack은 내부 업무용 클라우드뿐만 아니라 외부 고객에게 제공하는 클라우드 서비스에도 사용할 수 있다.
OpenStack의 프로젝트
OpenStack은 하나의 거대한 프로그램으로 모든 기능을 처리하는 구조가 아니다.
기능별로 여러 개의 서비스가 나누어져 있으며,
각각의 서비스를 OpenStack에서는 프로젝트(Project)라고 부른다.
예를 들어 가상 서버 생성, 네트워크 구성, 스토리지 관리, 사용자 인증을 각각 다른 프로젝트가 담당한다.
대표적인 프로젝트는 다음과 같다.
• Nova: 가상 서버 생성과 관리를 담당한다.
• Neutron: 네트워크, IP 주소, 라우터, 보안 그룹 등을 관리한다.
• Cinder: 가상 서버에 연결하는 블록 스토리지를 관리한다.
• Swift: 파일과 같은 데이터를 객체 형태로 저장한다.
• Glance: 가상 서버를 생성할 때 사용하는 운영체제 이미지를 관리한다.
• Keystone: 사용자 로그인, 인증, 권한 관리를 담당한다.
• Horizon: OpenStack을 웹 화면에서 관리할 수 있게 해주는 대시보드다.
예를 들어 사용자가 Horizon에서 Ubuntu 가상 서버 생성을 요청하면 하나의 서비스만 동작하는 것이 아니다.
Keystone이 사용자의 권한을 확인하고, Glance가 Ubuntu 이미지를 제공한다.
Nova는 적절한 서버를 찾아 가상 머신을 생성하고, Neutron은 네트워크와 IP 주소를 연결한다.
추가 디스크가 필요하다면 Cinder가 저장 공간을 제공한다.
이처럼 OpenStack은 여러 프로젝트가 서로 API를 통해 통신하면서 하나의 클라우드 기능을 완성한다.
가상화와 OpenStack의 관계
OpenStack을 이해하려면 가상화와 클라우드의 차이도 알아두는 것이 좋다.
가상화는 한 대의 물리 서버를 여러 개의 가상 서버처럼 나누어 사용하는 기술이다.
예를 들어 CPU 16개와 메모리 64GB를 가진 물리 서버 한 대가 있다고 하자.
이 서버를 다음과 같이 나눌 수 있다.
• 가상 서버 A: CPU 4개, 메모리 16GB
• 가상 서버 B: CPU 4개, 메모리 16GB
• 가상 서버 C: CPU 8개, 메모리 32GB
이렇게 하나의 물리 서버 위에서 여러 가상 머신을 실행할 수 있도록 관리하는 소프트웨어가 하이퍼바이저(Hypervisor)다.
대표적인 하이퍼바이저에는 KVM, VMware ESXi, Hyper-V 등이 있다.
OpenStack 환경에서는 주로 리눅스 기반의 KVM이 많이 사용된다.
하지만 가상화만 사용하면 관리자가 각 물리 서버와 하이퍼바이저를 개별적으로 관리해야 한다.
서버가 수십 대, 수백 대가 되면 어느 서버에 자원이 남아 있는지,
어떤 서버에 가상 머신을 생성해야 하는지 직접 판단하기 어려워진다.
OpenStack은 이러한 여러 가상화 서버를 하나의 클라우드 환경으로 묶어서 관리한다.
OpenStack 자체가 가상 머신을 직접 실행하는 것은 아니다.
실제 가상 머신 실행은 KVM 같은 하이퍼바이저가 담당하고,
OpenStack은 어떤 서버에 가상 머신을 만들지 결정하고 생성 과정을 자동화하는 역할을 한다.
추상화
자료에는 OpenStack이 가상 리소스를 한 단계 더 추상화한다는 표현이 나온다.
추상화라는 말은 복잡한 내부 구조를 숨기고
사용자가 필요한 기능만 간단하게 사용할 수 있도록 만드는 것을 의미한다.
예를 들면 이런거다.
자동차를 운전할 때 운전자는 가속 페달을 밟으면 자동차가 앞으로 나간다는 것만 알면 된다.
엔진 내부에서 연료가 어떻게 분사되고 어떤 부품이 움직이는지까지 모두 알 필요는 없다.
OpenStack도 비슷하다.
사용자가 가상 서버 생성을 요청할 때 다음과 같은 내부 작업을 모두 직접 처리할 필요가 없다.
• 어떤 물리 서버에 생성할지 결정
• 하이퍼바이저에 가상 머신 생성 요청
• 운영체제 이미지 전달
• 가상 디스크 생성
• 가상 네트워크 구성
• IP 주소 할당
• 보안 규칙 적용
사용자는 단순히 CPU, 메모리, 운영체제 이미지, 네트워크 등을 선택하고 생성 버튼을 누르면 된다.
복잡한 작업은 OpenStack이 내부에서 처리한다.
이처럼 실제 물리 장비와 복잡한 설정을 숨기고,
사용자가 가상 서버나 네트워크처럼 단순한 형태로 자원을 사용할 수 있게 하는 것이 추상화다.
OpenStack API의 역할
앞서 설명한 것처럼 OpenStack의 각 프로젝트는 API를 통해 서로 통신한다.
API는 서로 다른 프로그램이 요청과 응답을 주고받기 위한 약속이라고 이해하면 된다.
예를 들어 사용자가 가상 서버 생성을 요청하면
Horizon 대시보드는 Nova API에 가상 서버를 만들어 달라는 요청을 보낸다.
Nova는 Glance API를 통해 운영체제 이미지를 가져오고,
Neutron API를 통해 네트워크 생성을 요청한다.
사용자는 웹 대시보드뿐만 아니라 명령어나 프로그램을 통해서도 OpenStack API를 사용할 수 있다.
예를 들어 다음과 같은 명령어로 가상 서버를 생성할 수 있다.
openstack server create \
--image ubuntu \
--flavor m1.small \
--network private-network \
my-server
이 명령을 실행하면 OpenStack CLI가 Nova API에 가상 서버 생성 요청을 전달한다.
API가 있기 때문에 OpenStack은 반복 작업을 자동화하기 쉽다.
가상 서버 한 대를 직접 생성하는 것뿐만 아니라,
스크립트나 자동화 도구를 이용해 여러 대의 서버와 네트워크를 한꺼번에 생성할 수도 있다.
'공부 기록 > 클라우드 공부' 카테고리의 다른 글
| [OpenStack] 2. OpenStack 시작하기 – DevStack 실습 환경 구축 ① (0) | 2026.07.05 |
|---|---|
| [Kubernetes] Vagrant + Ansible 기반 Kubernetes Cluster 자동 구축 (Virtual Box 환경) (0) | 2025.10.23 |