title, updated, tags
| title |
updated |
tags |
| NAS StorageClass (NFS + iSCSI) |
2026-04-06 |
| infra |
| k3s |
| storage |
| nfs |
| iscsi |
| synology |
|
개요
Synology NAS를 K3s NFS StorageClass로 사용. Longhorn(블록)과 병행하여 파일 저장소, 웹소스 등 대용량/RWX 워크로드에 사용.
NAS 정보
| 항목 |
값 |
| 장비 |
Synology NAS |
| IP (kr1/kr2) |
192.168.205.100 |
| IP (hp2) |
192.168.9.100 (현재 미연결, 해결 예정) |
| 디스크 |
11TB (사용 2%) |
| NFS export |
/volume1/k3s-nfs |
| NFS 옵션 |
rw,async,no_wdelay,crossmnt,no_root_squash,insecure_locks,sec=sys,anonuid=1025,anongid=100 |
K3s 설정
| 항목 |
값 |
| StorageClass |
nfs (default 아님, 명시 지정 필요) |
| Provisioner |
nfs-subdir-external-provisioner (Helm) |
| Namespace |
nfs-provisioner |
| NFS 경로 |
/volume1/k3s-nfs |
| 마운트 옵션 |
soft,timeo=50,retrans=3 |
| archiveOnDelete |
true (PVC 삭제 시 데이터 archived- 접두사로 보존) |
| nodeAffinity |
incus-kr1, incus-kr2만 (hp2 NAS 연결 해결 전까지) |
Helm 설치 명령
PVC 사용 예시
성능 (fio 벤치마크, 2026-04-05)
| 테스트 |
IOPS |
대역폭 |
레이턴시 |
| Random Read 4K |
20.6K |
84 MB/s |
1.5 ms |
| Random Write 4K |
18.1K |
74 MB/s |
1.8 ms |
| Seq Read 1M |
263 |
276 MB/s |
30 ms |
| Seq Write 1M |
275 |
288 MB/s |
29 ms |
용도별 StorageClass 선택
| 용도 |
StorageClass |
이유 |
| DB (PostgreSQL, etcd, Redis) |
longhorn |
저레이턴시 블록 필요 |
| 파일 업로드, 사용자 데이터 |
nfs |
대용량, RWX 지원 |
| 웹소스, 정적 파일 |
nfs |
대용량, 여러 Pod 공유 |
| 로그, 임시 데이터 |
longhorn/local-path |
빠른 쓰기 |
파일 소유권
no_root_squash 설정으로 root 컨테이너는 소유권 문제 없음
- 비-root 컨테이너는 Pod
securityContext.fsGroup으로 제어
NFS hard vs soft 교훈 (2026-04-04)
kr2에서 NAS NFS가 hard 마운트 + NAS 연결 끊김으로 load 1959까지 폭주한 사건 발생. D-state 프로세스(mountpoint, NFS manager)가 커널 전체를 잠식.
- hard: NAS 끊기면 무한 대기 → 서버 먹통
- soft: 타임아웃 후 에러 반환 → 서버 생존
모든 NFS 마운트는 soft,timeo=50,retrans=3 필수.
iSCSI StorageClass (democratic-csi)
Synology NAS의 iSCSI를 K3s 블록 스토리지로 사용. democratic-csi가 PVC 생성/삭제 시 자동으로 iSCSI Target + LUN을 관리.
| 항목 |
값 |
| StorageClass |
synology-iscsi |
| CSI Driver |
democratic-csi (Helm) |
| Namespace |
democratic-csi |
| iSCSI Portal |
192.168.205.100:3260 |
| Base IQN |
iqn.2000-01.com.synology:NAS.k3s. |
| LUN 타입 |
BLUN (Btrfs thin provisioning) |
| Volume |
/volume1 |
| 인증 |
kaffa 계정 (HTTPS API) |
| 자동 관리 |
PVC 생성 → Target+LUN 생성, PVC 삭제 → Target+LUN 삭제 |
Helm 설치
values 파일: /tmp/democratic-csi-values.yaml (kr1)
전체 StorageClass 요약
| StorageClass |
방식 |
용도 |
HA |
| longhorn |
로컬 NVMe 블록 |
DB, 고성능 블록 |
노드 간 레플리카 |
| synology-iscsi |
NAS iSCSI 블록 |
블록 스토리지 (NAS) |
RAID5 |
| nfs |
NAS NFS 파일 |
파일, 웹소스, RWX |
RAID5 |
| local-path |
로컬 디스크 |
캐시, 임시 |
없음 |
Jumbo Frame (MTU 9000) 설정 (2026-04-05)
모든 NAS 전용 경로에 MTU 9000 적용. 스위치 포함 전체 경로가 JF 지원.
| 장비 |
인터페이스 |
MTU |
설정 위치 |
| kr1 |
enp7s0 (PCIe 2.5GbE) |
9000 |
/etc/systemd/network/20-enp7s0.network |
| kr2 |
enx803f5dd34c9f (USB 2.5GbE) |
9000 |
/etc/systemd/network/30-usb-2g5.network |
| NAS |
eth2 (2.5GbE) |
9000 |
Synology DSM 네트워크 설정 |
kr2 USB NIC 드라이버 (r8152 DKMS)
kr2의 USB 2.5GbE 어댑터(Realtek RTL8157, 0bda:8157)는 커널 기본 cdc_ncm 드라이버로 잡히면 Half Duplex + MTU 1500 제한. DKMS r8152 드라이버(v2.21.4)를 설치하여 Full Duplex + Jumbo Frame 지원.
- DKMS 패키지:
linux-headers-$(uname -r) 설치 시 자동 빌드
- udev 규칙:
/etc/udev/rules.d/50-usb-realtek-net.rules — USB config를 1로 설정하여 r8152가 바인딩
- 커널 업데이트 시 DKMS가 자동으로 재빌드
주의사항
- Jumbo Frame은 경로 전체(NIC → 스위치 → NIC)가 지원해야 함. 미지원 스위치가 중간에 있으면 프레임 드롭
ping -M do -s 8972 로 end-to-end JF 동작 확인 가능
관련 문서