---
title: "OpenStack 수동 설치 3 — Glance 이미지 서비스 설치"
description: "OpenStack Glance 이미지 서비스를 설치하고 DB, 서비스 사용자, 엔드포인트를 구성한 뒤 패키지를 설치·설정·동기화하고 CirrOS 이미지를 등록·검증하는 단계별 가이드입니다."
date: "2026-08-03"
last_modified: "2026-08-28T01:04:00.000Z"
type: "Post"
tags:
  - "openstack"
  - "install"
  - "ubuntu"
  - "mysql"
categories:
  - "📗 Docs"
series:
  - "오픈스택 설치"
canonical_url: "https://blog.pieroot.xyz/openstack-glance"
markdown_url: "https://blog.pieroot.xyz/openstack-glance.md"
---

# OpenStack 수동 설치 3 — Glance 이미지 서비스 설치

OpenStack Glance 이미지 서비스를 설치하고 DB, 서비스 사용자, 엔드포인트를 구성한 뒤 패키지를 설치·설정·동기화하고 CirrOS 이미지를 등록·검증하는 단계별 가이드입니다.

Keystone 설치가 끝났다면 다음 단계는 이미지 서비스 Glance다. Glance는 가상 머신이 부팅할 OS 이미지를 등록하고 저장하며, Nova가 인스턴스를 만들 때 해당 이미지를 제공한다.

이 단계부터 OpenStack 서비스 설치의 공통 패턴이 반복된다.

```mermaid
flowchart LR
    A["DB 생성"] --> B["서비스 사용자"]
    B --> C["서비스와 엔드포인트"]
    C --> D["패키지와 설정"]
    D --> E["DB 동기화"]
    E --> F["재시작과 검증"]
```

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

- Glance DB 생성

- Keystone 서비스 사용자와 image 엔드포인트 등록

- 로컬 파일 저장 백엔드 설정

- DB 스키마 반영과 API 확인

- CirrOS 이미지 업로드 및 검증

> **전제 환경**
> 
> - OpenStack 2026.1 (Gazpacho)
> 
> - Keystone과 `service` 프로젝트 구성 완료
> 
> - `~/admin-openrc` 사용 가능
> 
> - `GLANCE_DBPASS`, `GLANCE_PASS`는 실제 비밀번호로 교체

### 1. Glance 데이터베이스 생성

```bash
sudo mysql
```

```sql
CREATE DATABASE glance;
CREATE USER 'glance'@'localhost' IDENTIFIED BY 'GLANCE_DBPASS';
GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost';
CREATE USER 'glance'@'%' IDENTIFIED BY 'GLANCE_DBPASS';
GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%';
FLUSH PRIVILEGES;
EXIT;
```

```bash
mysql -u glance -p -e "SHOW DATABASES;"
```

### 2. 서비스 사용자 생성

```bash
source ~/admin-openrc
openstack user create --domain default --password-prompt glance
openstack role add --project service --user glance admin
```

![image](https://blog.pieroot.xyz/api/image-proxy?id=9d7c578c-a257-46d4-bd7f-df4fcc3f24a4&kind=s3&pageId=18c92db1-abb9-4464-a4e4-eacbc152575d&source=block&blockId=f2fc3e0e-975d-40ea-a8bf-d4e4dfc9334c)

```bash
openstack role assignment list --user glance --names
```

### 3. 서비스와 엔드포인트 등록

```bash
openstack service create --name glance \
  --description "OpenStack Image" image

openstack endpoint create --region RegionOne image public \
  http://192.168.56.101:9292
openstack endpoint create --region RegionOne image internal \
  http://controller:9292
openstack endpoint create --region RegionOne image admin \
  http://controller:9292
```

![image](https://blog.pieroot.xyz/api/image-proxy?id=fc076f4c-41aa-4e76-8607-f055db2689d8&kind=s3&pageId=18c92db1-abb9-4464-a4e4-eacbc152575d&source=block&blockId=b77e4366-35cd-4ff6-9efe-a80372d8bb03)

![image](https://blog.pieroot.xyz/api/image-proxy?id=f8a8a6bd-767b-4e92-aa6f-122779124a45&kind=s3&pageId=18c92db1-abb9-4464-a4e4-eacbc152575d&source=block&blockId=62d01326-b9d7-4863-8ba6-cf6c93816eb3)

```bash
openstack endpoint list --service glance
```

![image](https://blog.pieroot.xyz/api/image-proxy?id=2b70288b-d713-4631-9a3f-4a873500521f&kind=s3&pageId=18c92db1-abb9-4464-a4e4-eacbc152575d&source=block&blockId=be7c2d00-526a-4089-82b1-ff0b429f4114)

public, internal, admin 세 개가 모두 보여야 한다.

### 4. 패키지 설치

```bash
sudo apt install -y glance
```

### 5. `glance-api.conf` 설정

`/etc/glance/glance-api.conf`의 주요 섹션을 아래처럼 설정한다.

```
[DEFAULT]
enabled_backends = fs:file

[database]
connection = mysql+pymysql://glance:GLANCE_DBPASS@controller/glance

[keystone_authtoken]
www_authenticate_uri = http://controller:5000
auth_url = http://controller:5000
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = glance
password = GLANCE_PASS

[paste_deploy]
flavor = keystone

[glance_store]
default_backend = fs

[fs]
filesystem_store_datadir = /var/lib/glance/images/
```

> `enabled_backends`는 `[DEFAULT]`, `default_backend`는 `[glance_store]`에 있어야 한다. `[database]`의 기본 SQLite 연결도 제거해야 한다.

`[keystone_authtoken]`의 비밀번호는 DB 비밀번호가 아니라 Keystone에 만든 `glance` 사용자의 비밀번호다.

### 6. DB 동기화와 서비스 재시작

```bash
sudo su -s /bin/sh -c "glance-manage db_sync" glance
sudo systemctl restart glance-api
```

```bash
systemctl status glance-api
ss -lntp | grep 9292
sudo mysql -e "USE glance; SHOW TABLES;" | head
```

### 7. CirrOS 이미지 등록

```bash
source ~/admin-openrc
wget http://download.cirros-cloud.net/0.6.3/cirros-0.6.3-x86_64-disk.img
```

```bash
openstack image create "cirros" \
  --file cirros-0.6.3-x86_64-disk.img \
  --disk-format qcow2 \
  --container-format bare \
  --public --progress
```

![image](https://blog.pieroot.xyz/api/image-proxy?id=d654188b-722d-45e9-8b5f-a682a4530ea1&kind=s3&pageId=18c92db1-abb9-4464-a4e4-eacbc152575d&source=block&blockId=ea6daad3-7095-456c-93b7-b4b7ae4c53d5)

```bash
openstack image list
```

![image](https://blog.pieroot.xyz/api/image-proxy?id=241a07b3-d0af-4832-a0f9-5b7075040638&kind=s3&pageId=18c92db1-abb9-4464-a4e4-eacbc152575d&source=block&blockId=9e2a7b79-2898-47c0-8f01-51686c19c5b9)

```bash
sudo ls -lh /var/lib/glance/images/
```

![image](https://blog.pieroot.xyz/api/image-proxy?id=3a987258-69df-4286-abc0-bee3ba26c95f&kind=s3&pageId=18c92db1-abb9-4464-a4e4-eacbc152575d&source=block&blockId=92f4f2ef-60cf-4ffe-88fc-9029f1416e2e)

이미지 상태가 `active`이고 백엔드 디렉터리에 이미지 ID 이름의 파일이 있으면 정상이다.

### 오류를 확인하는 순서

```bash
journalctl -u glance-api -n 100
sudo tail -100 /var/log/glance/glance-api.log
```

### 핵심 정리

1. Glance는 이미지 메타데이터를 DB에, 실제 이미지 파일을 저장 백엔드에 보관한다.

1. 서비스 사용자와 endpoint를 Keystone에 먼저 등록해야 한다.

1. 설치 완료 기준은 API 기동이 아니라 **실제 이미지가 active 상태로 등록되는 것**이다.

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

- [ ] Glance DB와 계정이 생성됐다.

- [ ] `glance` 서비스 사용자에 admin 역할을 부여했다.

- [ ] image 엔드포인트 3종이 등록됐다.

- [ ] glance-api가 포트 9292에서 응답한다.

- [ ] CirrOS 이미지가 `active` 상태다.

- [ ] 실제 이미지 파일이 저장 디렉터리에 존재한다.

### 다음 단계

다음 글에서는 Nova가 compute 자원 재고를 조회할 때 사용하는 **Placement 서비스를 설치**한다.

### 참고 자료

- [Glance Installation Guide — 2026.1 Gazpacho](https://docs.openstack.org/glance/2026.1/install/)

- [CirrOS Downloads](http://download.cirros-cloud.net/)
