All checks were successful
GitOps Automatic Deployment / GitOps Automatic Deployment (push) Successful in 6s
153 lines
3.4 KiB
Markdown
153 lines
3.4 KiB
Markdown
## Purpose
|
||
This document describes the **end-to-end procedure** for creating a **thick-provisioned iSCSI-backed shared storage target** on **TrueNAS CORE**, and consuming it from a **Proxmox VE cluster** using **shared LVM**.
|
||
|
||
This approach is intended to:
|
||
- Replace NFS-backed VM storage
|
||
- Provide SAN-style block semantics
|
||
- Enable Proxmox-native snapshot functionality (LVM volume chains)
|
||
- Avoid third-party plugins or middleware
|
||
- Be fully reproducible via CLI
|
||
|
||
## Assumptions
|
||
- TrueNAS **CORE** (not SCALE)
|
||
- ZFS pool already exists and is healthy
|
||
- SSH service is enabled on TrueNAS
|
||
- Proxmox VE nodes have network connectivity to TrueNAS
|
||
- iSCSI traffic is on a reliable, low-latency network (10GbE recommended)
|
||
- All VM workloads are drained from at least one Proxmox node for maintenance
|
||
|
||
!!! warning "Important"
|
||
`volblocksize` **cannot be changed after zvol creation**. Choose carefully.
|
||
|
||
## Target Architecture
|
||
|
||
```
|
||
ZFS Pool
|
||
└─ Zvol (Thick / Reserved)
|
||
└─ iSCSI Extent
|
||
└─ Proxmox LVM PV
|
||
└─ Shared VG
|
||
└─ VM Disks
|
||
```
|
||
|
||
## Step 1 – Create a Dedicated Zvol for Proxmox
|
||
|
||
### Variables
|
||
Adjust as needed before execution.
|
||
|
||
```sh
|
||
POOL_NAME="CLUSTER-STORAGE"
|
||
ZVOL_NAME="iscsi-proxmox"
|
||
ZVOL_SIZE="14T"
|
||
VOLBLOCKSIZE="16K"
|
||
```
|
||
|
||
### Create the Zvol (Thick-Provisioned)
|
||
```sh
|
||
zfs create -V ${ZVOL_SIZE} \
|
||
-o volblocksize=${VOLBLOCKSIZE} \
|
||
-o compression=lz4 \
|
||
-o refreservation=${ZVOL_SIZE} \
|
||
${POOL_NAME}/${ZVOL_NAME}
|
||
```
|
||
|
||
!!! note
|
||
The `refreservation` enforces **true thick provisioning** and prevents overcommit.
|
||
|
||
---
|
||
|
||
## Step 2 – Configure iSCSI Target (TrueNAS CLI)
|
||
```sh
|
||
# Enable iSCSI Service
|
||
service iscsitarget start
|
||
sysrc iscsitarget_enable=YES
|
||
|
||
# Create iSCSI Portal
|
||
ctladm create -p 0.0.0.0
|
||
|
||
# Create Target
|
||
ctladm create -t proxmox-target
|
||
|
||
# Create Extent
|
||
ctladm create -b block -l /dev/zvol/${POOL_NAME}/${ZVOL_NAME} proxmox-extent
|
||
|
||
### Associate Target + Extent
|
||
ctladm add -t proxmox-target -l proxmox-extent
|
||
```
|
||
|
||
!!! tip
|
||
At this point, the LUN is live and can be discovered by initiators.
|
||
|
||
## Step 3 – Connect from Proxmox VE Nodes
|
||
|
||
Perform the following **on each Proxmox node**.
|
||
```sh
|
||
# Install iSCSI Utilities
|
||
apt update
|
||
apt install -y open-iscsi lvm2
|
||
|
||
# Discover Target
|
||
iscsiadm -m discovery -t sendtargets -p <TRUENAS_IP>
|
||
|
||
# Log In
|
||
iscsiadm -m node --login
|
||
|
||
### Verify Device
|
||
lsblk
|
||
```
|
||
|
||
## Step 4 – Create Shared LVM (One Node Only)
|
||
|
||
!!! warning "Important"
|
||
**Only run LVM creation on ONE node**. All other nodes will only scan.
|
||
|
||
```sh
|
||
# Initialize Physical Volume
|
||
pvcreate /dev/sdX
|
||
|
||
# Create Volume Group
|
||
vgcreate vg_proxmox_iscsi /dev/sdX
|
||
```
|
||
|
||
## Step 5 – Register Storage in Proxmox
|
||
|
||
### Rescan LVM (Other Nodes)
|
||
```sh
|
||
pvscan
|
||
vgscan
|
||
```
|
||
|
||
### Add Storage (GUI or CLI)
|
||
|
||
**Datacenter → Storage → Add → LVM**
|
||
|
||
- ID: `iscsi-lvm`
|
||
- Volume Group: `vg_proxmox_iscsi`
|
||
- Content: `Disk image`
|
||
- Shared: ✔️
|
||
|
||
## Step 6 – Validation
|
||
|
||
- Snapshot create / revert / delete
|
||
- Live migration between nodes
|
||
- PBS backup and restore test
|
||
|
||
!!! success
|
||
If all validation tests pass, the storage is production-ready.
|
||
|
||
## Step 7 – Decommission NFS (After Cutover)
|
||
|
||
```sh
|
||
zfs destroy CLUSTER-STORAGE/NFS-STORAGE
|
||
```
|
||
|
||
## Step 8 – Expand iSCSI Storage (No Downtime)
|
||
|
||
```sh
|
||
# Expand Zvol (TrueNAS)
|
||
zfs set volsize=16T CLUSTER-STORAGE/iscsi-proxmox
|
||
zfs set refreservation=16T CLUSTER-STORAGE/iscsi-proxmox
|
||
|
||
# Rescan on Proxmox Nodes
|
||
pvresize /dev/sdX
|
||
``` |