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

**URL:** <https://forum.openinfra-kr.org/t/topic/196>\
**Category:** 컨트리뷰션\
**Tags:** 2025컨트리뷰션, 컨트리뷰션\
**Created:** [8월 9, 2025, 7:44오전 UTC](https://forum.openinfra-kr.org/t/topic/196 "2025-08-09T07:44:14Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![platanus](https://forum.openinfra-kr.org/letter_avatar_proxy/v4/letter/p/ecb155/32.png) [@platanus](https://forum.openinfra-kr.org/u/platanus)\
**Post date:** [8월 9, 2025, 7:44오전 UTC](https://forum.openinfra-kr.org/t/topic/196/1 "2025-08-09T07:44:14Z")

</div>

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

* * *

# 1) CLI 사용법 – `openstack volume attachment`

## volume attachment 개요

```auto
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에는 아래 하위 명령어가 있습니다.**

```auto
- `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 백엔드 연결에 필요한 정보**

```bash
volume attachment create --connect <VOL> <SERVER>

```

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

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

```bash
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) 백엔드 연결에 필요한 정보**

```bash
volume attachment create --connect <VOL> <SERVER>

```

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

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

```bash
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가 아닌 리소스에서 상태 전환이 필요할때 사용합니다.

```bash
volume attachment complete <ATTACHMENT_ID>

```

- 볼륨 상태: `attaching` → `in-use`
- attachment 상태: `reserved`/`attaching` → `attached`

## volume attachment show

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

- volume show와 달리, 이 명령은 연결(attachment) 관점의 세부 정보, 특히 connection\_info, initiator, protocol, 상태를 제공합니다.

```bash
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 등이 준비되어 있어야 합니다.

```bash
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 환경, 수동 연결 해제, 상태 꼬임 복구에 주로 사용됩니다.

```bash
openstack volume attachment delete <ATTACHMENT_ID> [<ATTACHMENT_ID> ...]

```

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

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

## volume attachment list

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

```bash
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 환경에서 사용 |

---

<div class="post-metadata">

**Author:** ![platanus](https://forum.openinfra-kr.org/letter_avatar_proxy/v4/letter/p/ecb155/32.png) [@platanus](https://forum.openinfra-kr.org/u/platanus)\
**Post date:** [8월 12, 2025, 10:24오전 UTC](https://forum.openinfra-kr.org/t/topic/196/2 "2025-08-12T10:24:22Z")

</div>

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

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