---
title: "OpenStack 수동 설치 1 — 기본 환경과 기반 서비스 구성"
description: "OpenStack을 Ubuntu 24.04에 Gazpacho 버전으로 수동 설치하기 위해 먼저 호스트 이름, 네트워크, 시간 동기화와 MariaDB, RabbitMQ, Memcached, Etcd 등 기본 인프라 서비스를 준비하고 검증하는 과정을 단계별로 안내한다."
date: "2026-07-30"
last_modified: "2026-09-04T22:47:00.000Z"
type: "Post"
tags:
  - "openstack"
  - "install"
  - "ubuntu"
  - "mysql"
categories:
  - "📗 Docs"
series:
  - "오픈스택 설치"
canonical_url: "https://blog.pieroot.xyz/openstack-manual-1"
markdown_url: "https://blog.pieroot.xyz/openstack-manual-1.md"
---

# OpenStack 수동 설치 1 — 기본 환경과 기반 서비스 구성

OpenStack을 Ubuntu 24.04에 Gazpacho 버전으로 수동 설치하기 위해 먼저 호스트 이름, 네트워크, 시간 동기화와 MariaDB, RabbitMQ, Memcached, Etcd 등 기본 인프라 서비스를 준비하고 검증하는 과정을 단계별로 안내한다.

OpenStack을 수동 설치할 때 가장 먼저 할 일은 Keystone 설치가 아니다. 호스트 이름, 네트워크, 시간, 패키지 저장소와 공통 기반 서비스가 안정적으로 준비돼야 이후 서비스가 정상적으로 연결된다.

이번 글에서는 Ubuntu 24.04에 OpenStack 2026.1(Gazpacho)를 설치하기 위한 **기본 환경과 기반 서비스 구성**을 순서대로 정리한다.

### 이 글에서 다루는 내용

- controller와 compute1 노드 설계

- Management NIC과 Provider NIC 분리

- 호스트 이름, 이름 해석, 시간 동기화

- Ubuntu Cloud Archive 등록

- MariaDB, RabbitMQ, Memcached, Etcd 설치

- 단계별 검증과 자주 발생하는 오류

> **기준 환경**
> 
> - Ubuntu 24.04 LTS (Noble)
> 
> - OpenStack 2026.1 (Gazpacho)
> 
> - controller: `192.168.56.101`
> 
> - compute1: `192.168.56.111`
> 
> - 패키지 기반 수동 설치

### 1. 노드와 네트워크 설계

controller에는 API, DB, 메시지 큐와 제어 서비스를 설치한다. compute1에는 실제 인스턴스를 실행하는 `nova-compute`와 Neutron 에이전트를 설치한다.

각 노드에는 NIC 두 개를 준비한다.

![Management와 Provider 네트워크 구성](https://blog.pieroot.xyz/api/image-proxy?id=c1e0b25c-3d84-4c2c-9661-32adc5cf9e11&kind=s3&pageId=2b030786-b04b-44a2-8dc3-669308ef2ce0&source=block&blockId=ec562e68-d51a-4a61-9c4a-b4e495c51802)

Provider NIC에 DHCP를 켜두면 default route가 두 개 생기고 API 통신이 간헐적으로 끊길 수 있다.

VirtualBox에서는 위 구성이 보이도록 NAT/관리 네트워크를 먼저 만든 뒤 VM 어댑터에 연결한다.

![image](https://blog.pieroot.xyz/api/image-proxy?id=85f23ccb-661a-40ab-8a2f-80fd53dc4218&kind=s3&pageId=2b030786-b04b-44a2-8dc3-669308ef2ce0&source=block&blockId=c0d825e4-8497-4efd-8c0d-1c8534c997a3)

### 2. 호스트 기본 설정

#### 호스트 이름

```bash
# controller
sudo hostnamectl set-hostname controller

# compute1
sudo hostnamectl set-hostname compute1
```

#### 이름 해석

두 노드의 `/etc/hosts`에 동일하게 추가한다.

```bash
sudo tee -a /etc/hosts <<'EOF'
192.168.56.101  controller
192.168.56.111  compute1
EOF
```

`127.0.1.1 controller`처럼 서비스 호스트 이름이 loopback을 가리키는 항목은 제거한다.

#### 네트워크 인터페이스 확인

```bash
ip -br link
ip -br addr
ip route
```

정상 상태는 Management NIC에만 IP가 있고, Provider NIC은 IP 없이 `UP`인 상태다. default route도 Management NIC에 하나만 있어야 한다.

### 3. 시간 동기화

토큰과 서비스 상태는 시간에 민감하다. 노드 시간이 어긋나면 정상 토큰이 만료된 것으로 처리되거나 compute 서비스가 `down`으로 보일 수 있다.

```bash
sudo apt update
sudo apt install -y chrony
```

compute1에서 controller를 시간 원본으로 사용한다.

```bash
echo "server controller iburst" | \
  sudo tee /etc/chrony/sources.d/openstack.sources
sudo systemctl restart chrony
```

```bash
chronyc sources
chronyc tracking
```

### 4. OpenStack 저장소와 CLI 설치

Ubuntu 24.04 기본 저장소의 OpenStack 버전과 설치 대상 버전이 다를 수 있다. 모든 노드에 같은 UCA 저장소를 등록한다.

```bash
sudo apt install -y software-properties-common
sudo add-apt-repository -y cloud-archive:gazpacho
sudo apt update && sudo apt -y dist-upgrade
sudo apt install -y python3-openstackclient
```

```bash
apt policy | grep -i gazpacho
openstack --version
```

controller와 compute1의 저장소 버전이 다르면 이후 RPC 호환성 오류를 추적하기 어렵다.

### 5. MariaDB 설치

OpenStack 서비스는 상태를 서비스별 데이터베이스에 저장한다.

```bash
sudo apt install -y mariadb-server python3-pymysql
```

`/etc/mysql/mariadb.conf.d/99-openstack.cnf`를 만든다.

```
[mysqld]
bind-address = 192.168.56.101
default-storage-engine = innodb
innodb_file_per_table = on
max_connections = 4096
collation-server = utf8mb4_general_ci
character-set-server = utf8mb4
```

```bash
sudo systemctl restart mysql
sudo mysql_secure_installation
sudo mysql -e "SELECT VERSION();"
ss -lntp | grep 3306
```

### 6. RabbitMQ 설치

RabbitMQ는 API 서비스가 받은 작업을 워커 데몬에 전달하는 메시지 버스다.

```bash
sudo apt install -y rabbitmq-server
sudo rabbitmqctl add_user openstack RABBIT_PASS
sudo rabbitmqctl set_permissions openstack ".*" ".*" ".*"
```

`RABBIT_PASS`는 실제 비밀번호로 교체한다. 운영 환경에서는 다른 서비스 비밀번호와 분리한다.

```bash
sudo rabbitmqctl status
sudo rabbitmqctl list_users
```

### 7. Memcached 설치

Memcached는 Keystone 토큰 검증 결과를 캐시한다.

```bash
sudo apt install -y memcached python3-memcache
sudo sed -i 's/^-l .*/-l 192.168.56.101/' /etc/memcached.conf
sudo systemctl restart memcached
ss -lntp | grep 11211
```

### 8. Etcd 설치

Ubuntu 24.04에서는 패키지 이름이 `etcd`가 아니라 `etcd-server`다.

```bash
sudo apt install -y etcd-server
```

`/etc/default/etcd`에 controller 주소를 설정한다.

```bash
sudo tee -a /etc/default/etcd <<'EOF'
ETCD_NAME="controller"
ETCD_DATA_DIR="/var/lib/etcd"
ETCD_INITIAL_CLUSTER_STATE="new"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01"
ETCD_INITIAL_CLUSTER="controller=http://192.168.56.101:2380"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.56.101:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.56.101:2379"
ETCD_LISTEN_PEER_URLS="http://0.0.0.0:2380"
ETCD_LISTEN_CLIENT_URLS="http://192.168.56.101:2379"
EOF
sudo systemctl enable --now etcd
```

```bash
etcdctl put tutorial-test "hello"
etcdctl get tutorial-test
```

### 전체 검증

```bash
systemctl status mysql rabbitmq-server memcached etcd --no-pager
ss -lntp | grep -E '3306|5672|11211|2379'
```

### 주의사항

- Provider NIC에는 IP, DHCP, 게이트웨이를 설정하지 않는다.

- `/etc/hosts`의 loopback 호스트 이름 충돌을 먼저 제거한다.

- 모든 노드의 OpenStack 저장소 버전을 동일하게 맞춘다.

- 비밀번호 placeholder를 그대로 실행하지 않는다.

- 운영 환경에서는 DB, RabbitMQ, 서비스 계정 비밀번호를 각각 다르게 발급한다.

### 핵심 정리

1. 수동 설치의 첫 단계는 서비스가 아니라 **호스트와 공통 인프라 준비**다.

1. 네트워크와 시간 설정이 틀리면 이후 모든 서비스에서 연쇄 오류가 발생한다.

1. 각 설치 단계 뒤에는 서비스 상태와 LISTEN 포트를 즉시 확인한다.

### 재발 방지 체크리스트

- [ ] Management NIC에만 IP와 default route가 있다.

- [ ] Provider NIC은 IP 없이 `UP`이다.

- [ ] 두 노드에서 `controller`, `compute1` 이름 해석이 된다.

- [ ] Chrony 동기화가 정상이다.

- [ ] UCA Gazpacho와 OpenStack CLI가 설치됐다.

- [ ] MariaDB, RabbitMQ, Memcached, Etcd가 정상 기동한다.

### 다음 단계

다음 글에서는 OpenStack의 인증과 서비스 카탈로그를 담당하는 **Keystone을 설치**한다.

### 참고 자료

- [OpenStack Installation Guide](https://docs.openstack.org/install-guide/)

- [Ubuntu Cloud Archive](https://wiki.ubuntu.com/OpenStack/CloudArchive)

- [OpenStack 2026.1 Documentation](https://docs.openstack.org/2026.1/)
