4주차 과제 - 강민철 (작성중)

분량이 조금 되서 1차로 CLI 사용법을 등록해놓고 테스트케이스 추가는 수정으로 붙이겠습니다.


1) CLI 사용법 – openstack volume attachment

volume attachment 개요

Manila, Ironic, Magnum.. < (볼륨 제공)
           ^
           |
        Cinder <----------> [단일 볼륨] <--(생성)-- 스토리지 백엔드
                    |
	            (연결 관리)
  • volume attachment는 Cinder가 관리하는 볼륨을 특정 소비자(인스턴스, 베어메탈, 컨테이너 노드 등)에 연결하기 위한 절차를 제어합니다.
  • Nova에는 인스턴스-볼륨 attach/detach 명령이 있지만, Nova를 거치지 않는 환경(Ironic, Manila, Magnum 등)에서는 직접 Cinder의 attachment API/CLI를 호출해야 합니다.
  • volume attachment는 Cinder 볼륨 리소스의 생성/삭제와는 별개로, 연결 수명주기만 다룹니다.
  • 그래서 실제로 사용하기 위해서는 다음과 같은 절차가 필요합니다.

volume attachment를 사용하여 외부 볼륨(LUN)을 Cinder를 통해 사용하는 과정

  1. (Storage) 교체/사용할 LUN을 생성하고 ACL/zoning 등 연결 정보를 준비합니다.
  2. (Cinder) cinder manageable-list 로 조회된 외부 볼륨을 cinder manage 명령어를 통해 import 합니다. 이때 volumeId가 부여됩니다.
  3. (Cinder) volume attachment create 명령어를 통해 연결 정보를 수동으로 생성합니다.
  4. (사용처) 블록 디바이스 조회 API 또는 인터페이스를 통해 사용합니다.

volume attachment에는 아래 하위 명령어가 있습니다.

- `volume attachment create`
- `volume attachment complete`
- `volume attachment show`
- `volume attachment set`
- `volume attachment delete`
- `volume attachment list`

volume attachment create

Cinder에 attachment 레코드를 생성합니다.
이는 Cinder ↔ 스토리지 백엔드 간 상호작용입니다.

지원되는 프로토콜은 다음과 같습니다.

  • RBD (Ceph)
  • iSCSI
  • SAN
  • NFS
  • FCoE, NVMe-oF

여기서는 가장 많이 사용하는 RBD, iSCSI, SAN, NFS 4가지에 대해서 알아보겠습니다.

RBD 백엔드 연결에 필요한 정보

volume attachment create --connect <VOL> <SERVER>
  • 이 연결은 Ceph에서 생성한 볼륨을 Cinder의 attachment로 등록하는 명령어 입니다.
  • Ceph 설정, keyring, rbd map (Ceph 블록 디바이스 매핑), multipath 준비가 미리 필요합니다.

iSCSI 백엔드 연결에 필요한 정보

volume attachment create --connect \
       --initiator <IQN> \
       --ip <HOST_IP> \
       --host <HOSTNAME> \
       [--multipath] \
       <VOL> <SERVER>
  • 이 연결은 iSCSI Target에서 생성한 LUN export를 Cinder의 attachment로 등록하는 명령어 입니다.
  • 실제 연결 시점에는 WWPN 정보 등이 필요합니다.
  • iSCSI Target에서 IQN, LUN Export 등의 설정 준비가 미리 필요합니다.

SAN (FC) 백엔드 연결에 필요한 정보

volume attachment create --connect <VOL> <SERVER>
  • 이 연결은 SAN 스토리지의 LUN을 Cinder의 attachment로 등록하는 명령어 입니다.
  • SAN 스토리지에서 LUN 생성, LUN mapping(host affinity, presentation …), SAN S/W zonning 등 준비가 미리 필요합니다.

NFS 백엔드 연결에 필요한 정보

openstack volume attachment create \
  --connect \
  --host <HOSTNAME> \
  --os-type <OS_TYPE> \
  VOL_ID SERVER_ID
  • 이 연결은 NFS 공유볼륨을 Cinder의 attachment로 등록하는 명령어 입니다.
  • 다른 연결과 다르게 세션 수립이 아니라 자동으로 연결 처리가 됩니다. 다만 Cinder는 export 정보만 반환하고 이후 Nova가 NFS 마운트 후 루프백 디바이스에 연결하는 과정을 자동 처리합니다.

volume attachment complete

이미 생성된 attachmet에 대해 완료(complete) 상태로 전환하는 역할을 합니다.

  • 완료란 attachment 레코드의 상태를 attaching 에서 in-use로 전환하는 역할을 합니다.
  • Nova는 이를 자동으로 수행하지만, Nova가 아닌 리소스에서 상태 전환이 필요할때 사용합니다.
volume attachment complete <ATTACHMENT_ID>
  • 볼륨 상태: attachingin-use
  • attachment 상태: reserved/attachingattached

volume attachment show

특정 attachment 레코드의 상세 정보를 조회하는 명령입니다.

  • volume show와 달리, 이 명령은 연결(attachment) 관점의 세부 정보, 특히 connection_info, initiator, protocol, 상태를 제공합니다.
openstack volume attachment show <ATTACHMENT_ID>
필드 설명
id attachment 레코드 ID
volume_id 연결 대상 Cinder 볼륨의 UUID
instance Nova 인스턴스 ID (Nova attach일 경우에만)
status attachment 상태 (reserved / attaching / attached)
attach_mode rw(읽기/쓰기) 또는 ro(읽기 전용)
mountpoint Nova 인스턴스 안에서 디바이스가 마운트된 경로 (/dev/vdb 등)
connection_info 드라이버에서 반환한 연결 정보(JSON) → driver_volume_type(iSCSI, RBD, NFS, FC 등)와 연결 매개변수(portal, target IQN, export path 등) 포함
os_type 소비자 OS 타입(수동 attach 시 옵션으로 지정 가능)
platform CPU 아키텍처(필요시 옵션으로 지정)
attachment_metadata 드라이버/운영자가 지정한 부가 메타데이터 (initiator IQN, 호스트명, IP 등)
created_at / updated_at 레코드 생성/갱신 시간

volume attachment set

이미 존재하는 attachment 레코드의 속성을 수정하는 명령입니다.

  • 이 명령은 Cinder DB 레코드만 업데이트합니다. 프로토콜 세션이나 스토리지 백엔드 설정을 실시간으로 변경하지 않습니다.
  • 따라서 연결 정보에 대한 속성을 수정한 경우에는 미리 ACL, SAN Zoning 등이 준비되어 있어야 합니다.
openstack volume attachment set \
  [--instance INSTANCE] \
  [--mode {rw,ro}] \
  [--os-type OS_TYPE] \
  [--platform PLATFORM] \
  [--initiator IQN] \
  [--ip IP_ADDRESS] \
  [--host HOST_NAME] \
  [--mountpoint MOUNTPOINT] \
  ATTACHMENT_ID
옵션 설명 비고
–instance attachment를 연결할 Nova 인스턴스 ID Nova 환경에서만 의미 있음
–mode rw(읽기/쓰기) 또는 ro(읽기 전용) 멀티 attach 환경에서 읽기 전용 권장
–os-type 연결 대상 호스트 OS 타입 (linux, windows, aix 등) 일부 드라이버는 OS 타입별로 connection_info를 다르게 반환
–platform CPU 아키텍처 (x86_64, ppc64, arm64 등) 드라이버 종속적
–initiator iSCSI Initiator IQN iSCSI 프로토콜 사용 시 필수일 수 있음
–ip 호스트 IP 주소 (스토리지와 연결되는 인터페이스) SAN zoning/NVMe-oF ACL 구성 시 중요
–host 호스트 이름 스토리지에서 LUN masking 할 때 사용 가능
–mountpoint 인스턴스 내부에서의 디바이스 경로 Nova attach 시 자동 지정, 수동 환경에서 메타데이터 용도

volume attachment delete

특정 attachment 레코드를 삭제하는 명령입니다.

  • Nova 환경에서는 openstack server remove volume을 사용하면 Nova가 내부적으로 Cinder의 attachment_delete API를 호출합니다.
  • CLI에서 직접 실행하는 경우는 비-Nova 환경, 수동 연결 해제, 상태 꼬임 복구에 주로 사용됩니다.
openstack volume attachment delete <ATTACHMENT_ID> [<ATTACHMENT_ID> ...]

주로 다음의 절차과정에서 사용됩니다.

  1. 호스트(사용처) 에서 세션 해제 및 연결 제거
  2. 오픈스택에서 attachment delete 명령어 수행
  3. 스토리지 백엔드에서 리소스 할당 제거 수행
  4. 더이상 사용하지 않을 경우 오픈스택에서 volume delete수행

volume attachment list

Cinder에 등록된 모든 attachment 레코드 목록을 출력합니다.
특히 Nova환경이 아닌 볼륨 연결 목록을 파악할때 사용합니다.

openstack volume attachment list
    [--all-projects]
    [--long]
    [--status STATUS]
    [--volume VOLUME]
    [--instance INSTANCE]
옵션 설명 비고
–all-projects 모든 프로젝트의 attachment 표시 (admin만 가능) 멀티테넌트 환경에서 유용
–long connection_info 등 추가 필드 표시 민감 정보 포함 가능, 주의
–status STATUS 특정 상태(reserved, attaching, attached)만 필터링 상태별 작업 대기열 확인 가능
–volume VOLUME 특정 볼륨 ID/이름에 대한 attachment만 표시 특정 리소스 추적
–instance INSTANCE 특정 인스턴스 ID에 연결된 attachment만 표시 Nova 환경에서 사용

윤수님의 과제 피드백 입니다 (글 수정이 되지 않아 댓글로 작성합니다)

  • volume attachment 명령어군은 실제 스토리지 백엔드와 상호작용하는 명령어로 Functional test를 작성하기 위해서는 FC SAN, NFS, Ceph 등의 환경이 실제로 필요합니다.
  • 그렇기 때문에 명령어를 소개하는 수준에서 종료하고 다른 명령어를 찾아서 진행하는 방향으로 이 명령어는 마무리 하겠습니다.