Proxmox에서 TrueNAS로 ZFS over iSCSI 연결하기

개요

Proxmox의 ZFS over iSCSI 스토리지는 ZFS 파일시스템과 iSCSI기능을 갖춘 시스템과 연동하여 스토리지를 구성하는 방식입니다. 평범한 iSCSI 스토리지와 비교할 때, ZFS를 이용하기 때문에 스냅샷 기능 등 ZFS 파일시스템의 기능을 적극적으로 활용할 수 있다는 장점이 있습니다.

또한, 단순한 iSCSI스토리지 위에 zvol을 사용할 시, 데이터를 쓸 때 ZFS 파일시스템과 LUN호스트가 각각 체크섬을 검증하며 성능이 많이 떨어지며, 재부팅 등의 이벤트 발생 시 재연결이 늦어지거나 LUN과의 연결이 끊어지는 경우도 있는데에 반해, ZFS over iSCSI 스토리지를 사용하면 LUN호스트는 체크섬 검증을 생략하고 원격 스토리지가 사용가능할때까지 대기하는 기능을 사용할 수 있게 됩니다.

그런데, Proxmox에서 기본적으로 제공하는 ZFS over iSCSI를 위한 API는 Comstar, istgt, IET, LIO 총 4가지이며, TrueNAS와는 호환되지 않습니다. 그래서 Github의 서드 파티 플러그인을 이용하여 구성해야 합니다.

플러그인 설치

먼저 기본적으로 Proxmox 호스트에서 최신 업데이트를 모두 진행합니다.

이후, SSH로 접속해 아래 명령어를 순차적으로 입력해 Proxmox-TrueNAS용 ZFS over iSCSI 플러그인을 설치합니다.

  • repo 추가
keyring_location=/usr/share/keyrings/ksatechnologies-truenas-proxmox-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/ksatechnologies/truenas-proxmox/gpg.284C106104A8CE6D.key' |  gpg --dearmor >> ${keyring_location}
cat << EOF > /etc/apt/sources.list.d/ksatechnologies-repo.list
# Source: KSATechnologies
# Site: https://cloudsmith.io
# Repository: KSATechnologies / truenas-proxmox
# Description: TrueNAS plugin for Proxmox VE - Production
deb [signed-by=${keyring_location}] https://dl.cloudsmith.io/public/ksatechnologies/truenas-proxmox/deb/debian any-version main

EOF
  • 플러그인 설치
apt update
apt install freenas-proxmox

y를 입력하여 설치를 마무리 합니다. 이후 플러그인의 업데이트는 WEB GUI를 통해 업데이트할 때 함께 업데이트 됩니다.

TrueNAS 설정

ZFS over iSCSI 기능을 사용하기 위해 iSCSI Share를 설정해주어야 합니다.

Dataset 생성

보통 iSCSI설정 시에는 디스크 이미지를 생성하고 Target과 LUN을 모두 매핑한 후 게스트OS에서 생성된 디스크 이미지에 직접적으로 연결합니다.

그러나, ZFS over iSCSI는 ‘스토리지’이기 때문에, 디스크 이미지는 동적으로 생성되도록 내버려두고 데이터셋과 Target등만 설정해주면 됩니다.

먼저, Proxmox에서 스토리지로 사용할 Dataset을 생성해 줍니다.

예시에서는 test 풀 하위에 proxmox데이터셋을 생성했습니다.

iSCSI 설정

TrueNAS의 WEB UI에서 Shares탭으로 이동합니다.

상단의 Portals 탭 클릭 → Add 클릭하여 iSCSI연결에 사용될 네트워크 인터페이스(IP주소 형식)을 선택하고 추가합니다.

Portals 옆의 Initiators Groups탭을 클릭, Add를 클릭한 후 Allow all initiators를 체크하고 Save해 줍니다.

이 과정은, 일단 접속정보를 가지고 있는 클라이언트가 모두 접속할 수 있게 해주는 것으로, 추후 Proxmox에서 접속하면 Proxmox의 initiator 주소가 노출되게 되는데, 해당 주소만 allow하도록 수정할 수도 있습니다.

Targets 탭을 클릭하여 아래처럼 설정합니다.

Target name은 꼭 truenas일 필요는 없고, 자유롭게 정하시면 됩니다.

기타 그 외에 Extents와 Associated Targets는 동적으로 이미지가 생성될 때 자동으로 구성됩니다.

iSCSI 서비스 시작

Target Global Configuarition 탭에서 Base Name을 복사해 둡니다.

여기까지 진행했다면, iSCSI Shares 서비스를 시작해 줍니다.

root계정 Password Login설정하기

Proxmox에서 SSH Key를 등록할 때 비밀번호를 입력하는 과정을 거쳐야 하며, 추후 스토리지 연동시마다 root계정의 password가 필요합니다.

해당 과정을 위해 root계정의 비밀번호를 설정해주고 password login을 enabled해줍니다. 되도록 어려운 비밀번호를 추천합니다.

Proxmox 설정

SSH 키 복사

이 스토리지의 기본 작동방식은 SSH로 접속해 ZFS커맨드를 실행하는 것입니다. 따라서 원활한 실행을 위해 ssh key를 생성하고 truenas에 등록해줄 필요가 있습니다.

Proxmox 쉘에 접속해 아래와 같이 입력합니다(IP주소는 TrueNAS의 IP를 입력합니다).

mkdir /etc/pve/priv/zfs
ssh-keygen -f /etc/pve/priv/zfs/10.81.20.35_id_rsa

키 생성 시 암호화키를 묻는데, 반드시 그냥 Enter를 눌러 이 과정을 생략합니다. 키에 암호를 걸어버리면 Proxmox가 SSH를 수행할 때, 키 입력과정에 튕겨나옵니다.

생성 완료된 키를 이용해 TrueNAS에 복사합니다.

ssh-copy-id -i /etc/pve/priv/zfs/10.81.20.35_id_rsa.pub [email protected]

입력 시 최초 1회에 한해 TrueNAS의 root계정 비밀번호를 묻습니다. 위에서 설정해준 비밀번호를 입력하면 아래처럼 key등록을 마칠 수 있습니다.

이제 해당 SSH키를 이용해 TrueNAS에 접속해 봅니다.

ssh -i /etc/pve/priv/zfs/10.81.20.35_id_rsa [email protected]

문제 없이 TrueNAS Shell로 넘어가는 것을 볼 수 있습니다.

여기까지 진행했다면, 거의 성공한 겁니다. exit로 proxmox쉘로 빠져나옵니다.

ZFS over iSCSI 스토리지 추가하기

WEB GUI로 돌아온 뒤 새로고침을 1회 수행합니다.

이후 Storage → Add → iSCSI Provider를 클릭해보면 FreeNAS-API가 새로 생긴 것을 확인할 수 있습니다.

각각의 항목을 아래와 같이 채워줍니다.

  • ID : Proxmox 호스트에서 스토리지명으로 사용할 이름(자유)
  • Portal : TrueNAS IP
  • Enable : 체크
  • Pool : TrueNAS에서 생성했던 dataset경로 (이 글에서는 test/proxmox)
  • Thin provision : 체크(권장, 해제해도 상관없음)
  • Target : 위에서 복사했던 {Base Name}:{Targets}
    (이 글에서는 iqn.2005-10.org.freenas.ctl:truenas)
  • Write Cache : 체크
  • API use SSL : 체크 해제
  • API IPv4 Host : Portal과 동일하게 TrueNAS IP
  • API Username : root
  • API Password : root계정 비밀번호

추가된 스토리지를 클릭해보면 아래처럼 전체 용량이 표시되어야 합니다.

그리고 VM Disks를 클릭했을 때 에러 메세지가 없어야 합니다.

디스크 이미지 생성하기

이제 위에서 설정한 ZFS over iSCSI 스토리지를 Proxmox에서 디스크 이미지 저장소로 사용할 수 있습니다.

아래는 테스트를 위해 임시로 생성한 디스크 이미지입니다.

이후 TrueNAS dataset을 확인해보면 Proxmox 디스크 이미지 형식으로 zvol이 생성된 것을 확인할 수 있고, iSCSI의 Extents와 Associated Targets가 자동으로 구성된 것을 확인할 수 있습니다.

이제 자유롭게 스토리지를 사용하면 됩니다.

추후 스토리지 연결 정보를 수정해야 할 때는 굳이 스토리지를 해제/재연결하지말고 /etc/pve/storage.cfg에서 수정하면 됩니다.

nano /etc/pve/storage.cfg

디스크 이미지 이동하기

TrueNAS의 다른 dataset으로 디스크 이미지를 옮겨야 할 경우 /etc/pve/storage.cfg에서 해당 정보를 복사해 아래에 하나 더 구성해두고 pool만 변경한 후 Proxmox에서 Move Storage를 수행하면 됩니다.

아래의 디스크를 proxmox2 dataset으로 옮겨야 할 경우를 예로 들겠습니다.

/etc/pve/storage.cfg에서 기존 ZFS over iSCSI스토리지 정보를 복붙한 뒤,

이름(zfsiscsi → zfsiscsi2)과 pool(test/proxmox → test/proxmox2)정도로 수정하겠습니다.

이후 WEB UI를 새로고침하면 새로운 스토리지가 생깁니다.

VM에서 Move Storage를 수행해 봅니다.

사용되지 않은 블럭에 대한 메세지가 출력되지만 무시해도 됩니다.

작업이 완료되면, 아래처럼 proxmox2데이터셋으로 이동된 zvol을 확인할 수 있습니다(용량의 변동은 Thin provisioning때문입니다).

문제 해결(Trouble-Shooting)

VM Disks 클릭 시 에러(exit code 255)

Vm Disks 클릭 시 아래와 같이 zfs명령 실행 에러가 발생할 수 있습니다.

command '/usr/bin/ssh -o 'BatchMode=yes' -i /etc/pve/priv/zfs/10.81.20.35_id_rsa [email protected] zfs list -o name,volsize,origin,type,refquota -t volume,filesystem -d1 -Hp test/proxmox' failed: exit code 255 (500)

먼저, 생성한 SSH키로 Proxmox → TrueNAS쉘로 접속이 잘 되는지 확인하고, 생성한 키에 passphrase가 설정되었는지 확인합니다. 설정되어있다면 해당 키를 삭제하고 passphrase없는 키를 재생성하여 과정을 재진행합니다.

그럼에도 발생한다면, TrueNAS IP, root계정의 비밀번호, Target 등을 순차적으로 점검합니다.


출처

https://github.com/TheGrandWazoo/freenas-proxmox

https://pve.proxmox.com/wiki/Legacy:_ZFS_over_iSCSI

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

위로 스크롤