티스토리 뷰
1. 문제
- OpenStack Nova에서 인스턴스 빌드 시 DB에 instance_system_metadata 값 저장 단계에서 오류 발생
- 원인 : boot_roles 값이 컬럼 최대 길이(255자)를 초과하여 DB 저장 실패
- 이로 인해 인스턴스 빌드가 중단되어 인스턴스 생성에 실패함
2. 원인 분석
- instance_system_metadata : 인스턴스의 부팅/운영에 직접 사용되는 값은 아니며, Nova가 내부적으로 인스턴스 상태를 보존하기 위해 사용하는 key-value 저장소
- boot_roles : 인스턴스를 생성한 유저의 Keystone roles이 저장됨
- CloudKitty 서비스가 추가로 rating role을 부여하면서, role 문자열이 길어져 VARCHAR(255) 제한을 초과하게 됨
- 커뮤니티에서도 boot_roles 저장 필요성에 대해 논의가 있었음 → Keystone 토큰 정보가 시간이 지나면 변경되므로 굳이 저장하지 않아도 된다는 의견도 존재
3. 해결 방법
(1) DB 컬럼 타입 확장 (권장)
- instance_system_metadata.value 컬럼을 VARCHAR(1024) 혹은 TEXT로 변경
- Nova 내부 로직 수정 불필요, 즉시 적용 가능
ALTER TABLE instance_system_metadata MODIFY COLUMN value VARCHAR(1024) NOT NULL;
- 장점
- 기존 동작 그대로 유지
- Nova 코드 변경 불필요
- 단점
- DB 마이그레이션 필요
(2) Role 수 줄이기 / 특정 role 제외
- Nova가 system_metadata['boot_roles']에 값을 넣는 과정에서 rating role 제거 또는 255자 이내로 잘라서 저장
- 장점
- 간단한 회피 방법
- 단점
- 실제 role 정보가 필요한 기능에서 문제 발생 가능
(3) 코드 단에서 직접 DB 수정
- 애플리케이션에서 DB 접근해 ALTER TABLE 실행하는 방식도 가능
- 하지만 이는 alembic 기반의 schema history 관리에서 벗어나므로 비추천
4. Alembic 이란?
- DB 마이그레이션 도구
- 데이터베이스 스키마 변경 내역을 버전 단위로 관리
- OpenStack 컴포넌트들은 alembic을 통해 DB 스키마를 관리
- 예시 (migration 파일)
revision = '새_revision_id'
down_revision = '이전_revision_id'
def upgrade():
op.alter_column(
'instance_system_metadata',
'value',
existing_type=sa.String(length=255),
type_=sa.String(length=1024),
existing_nullable=True
)
- revision / down_revision 으로 체인 구조 형성
- 현재 DB의 revision은 alembic_version 테이블에 저장됨
- nova-manage db sync 실행 시 자동으로 최신 revision까지 적용
5. Kolla-Ansible에서의 DB 마이그레이션 과정
- Kolla-Ansible은 서비스 배포 시 각 서비스의 -manage db sync 명령을 실행
- Nova의 경우 nova-manage db sync 이 과정에서 alembic migration이 적용되어 alembic_version 업데이트
- 즉, 마이그레이션 파일만 Nova 코드에 추가하면 kolla-ansible deploy 과정에서 자동으로 적용됨
6. 결론
- 가장 안전한 방법: Alembic migration 파일을 추가해 instance_system_metadata.value 컬럼을 확장
- Kolla-Ansible 환경에서는 deploy 실행 시 자동 반영
- 단기 회피책으로는 rating role 제거/축약 가능하나, 장기적으론 DB 스키마 확장이 적합
요약
- 문제: boot_roles 값이 255자 제한 초과 → 인스턴스 빌드 실패
- 원인: CloudKitty가 rating role 추가 → system_metadata.value overflow
- 해결: Alembic migration으로 value 컬럼 확장 (권장)
- Kolla-Ansible: nova-manage db sync 자동 실행하므로 migration 파일만 배포 이미지에 반영하면 됨
'인프라' 카테고리의 다른 글
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Grafana
- ALB
- 인프라
- redux
- html
- Hook
- ecr
- Service
- EC2
- VPC
- AWS
- react
- ci/cd
- js
- Docker
- 로깅
- springboot
- Grafana Alert
- LOKI
- RDS
- ECS
- github action
- CSS
- 리액트
- 서버
- subnet
- Workflow
- 모니터링
- javascript
- SG
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
글 보관함