infra/nas-storage: 2026-04-14 정확성 보정

- hp2 NAS 연결 상태 갱신 (미연결 → 192.168.205.134로 정상 참여)
- nfs-provisioner nodeAffinity 실제값 반영 (제약 없음)
- iSCSI ScsiTarget on-demand 동작 설명 추가
- 2026-04-14 iSCSI smoke test 결과 기록
- eth2 USB NIC watchdog 섹션 신설 (LPM exit latency 이슈 대응)
This commit is contained in:
kappa
2026-04-14 12:35:20 +09:00
parent da4a674719
commit b6c68186fe

View File

@@ -1,24 +1,32 @@
---
title: NAS StorageClass (NFS + iSCSI)
updated: 2026-04-10
updated: 2026-04-14 문서 정확성 보정 (hp2 연결 상태, nodeAffinity, iSCSI on-demand 동작)
tags: [infra, k3s, storage, nfs, iscsi, synology]
---
## 개요
Synology NAS를 K3s NFS StorageClass로 사용. Longhorn(블록)과 병행하여 파일 저장소, 웹소스 등 대용량/RWX 워크로드에 사용.
Synology NAS(DS916+)를 K3s NFS/iSCSI StorageClass로 사용. Longhorn(로컬 블록)과 병행하여 파일 저장소, 웹소스 등 대용량/RWX 워크로드에 사용.
## NAS 정보
| 항목 | 값 |
|------|-----|
| 장비 | Synology NAS |
| IP (kr1/kr2) | 192.168.205.100 |
| IP (hp2) | 192.168.9.100 (현재 미연결, 해결 예정) |
| 모델 | Synology DS916+ (Braswell, x86_64, Linux 3.10.108) |
| bond0 (eth0+eth1, 1G×2) | **192.168.9.100** — 관리/SMB/DSM 웹 |
| eth2 (USB 2.5G, RTL8157, r8152) | **192.168.205.100** — NFS/iSCSI 데이터 플레인, MTU 9000 |
| 디스크 | 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 노드는 모두 192.168.205.0/24 서브넷에 참여하고 있음 (2026-04-14 검증):
| 노드 | 출구 NIC | src IP |
|------|---------|--------|
| incus-kr1 | enp7s0 (PCIe 2.5G) | 192.168.205.214 |
| incus-kr2 | enx803f5dd34c9f (USB 2.5G) | 192.168.205.135 |
| incus-hp2 | ens2 | 192.168.205.134 |
## K3s 설정
| 항목 | 값 |
@@ -29,7 +37,7 @@ Synology NAS를 K3s NFS StorageClass로 사용. Longhorn(블록)과 병행하여
| NFS 경로 | `/volume1/k3s-nfs` |
| 마운트 옵션 | `soft,timeo=50,retrans=3` |
| archiveOnDelete | true (PVC 삭제 시 데이터 archived- 접두사로 보존) |
| nodeAffinity | incus-kr1, incus-kr2만 (hp2 NAS 연결 해결 전까지) |
| nodeAffinity | **없음 (제약 없이 배포)** — 2026-04-14 기준 Deployment에 nodeSelector/affinity 미설정. 3 노드(kr1/kr2/hp2) 전부 192.168.205.0/24 도달 가능해 스케줄 자유 |
### Helm 설치 명령
@@ -122,6 +130,34 @@ helm install synology-iscsi democratic-csi/democratic-csi \
-f /tmp/democratic-csi-values.yaml
```
### ScsiTarget 서비스의 on-demand 동작 (중요)
DSM의 `ScsiTarget` 패키지는 LIO(kernel configfs) 기반이며, **Target이 0개이면 3260 포트를 LISTEN하지 않는다.** 이건 고장이 아니라 LIO의 정상 동작.
- PVC 없는 상태 → `netstat -lnt | grep 3260` 비어있음
- PVC 생성 → democratic-csi가 Synology API로 Target+LUN 자동 생성 → configfs에 Target 등록 → 3260 자동 LISTEN
- PVC 삭제 → Target/LUN 자동 제거 → Target 0개 되면 3260 닫힘
따라서 "3260 포트가 안 열려있다"만으로 장애 판단 금지. **Target 존재 여부 먼저 확인:**
```bash
# NAS에서
find /sys/kernel/config/target/iscsi -maxdepth 2 -type d
sudo synopkg status ScsiTarget # "running"이어야 함
```
### 2026-04-14 smoke test 결과
| 단계 | 결과 |
|------|------|
| PVC 생성 (1Gi, synology-iscsi) → Bound | 30초 |
| Target + LUN 자동 생성 | OK (democratic-csi → Synology HTTPS API) |
| 3260 LISTEN | OK (Target 등록과 동시에) |
| discovery (kr1/kr2/hp2 전부) | OK (양 포털 192.168.205.100 + 192.168.9.100) |
| PVC 삭제 → PV Released → DeleteVolume → PV gone | OK |
2026-04-14 이전 며칠간 ScsiTarget이 stop 상태로 방치되어 있었음. 원인 미확인(`/var/log/synopkg.log` 로그 기준 3/24 부팅 이후 stop 기록 없지만 실제 상태는 stop). 수동 `sudo synopkg start ScsiTarget`로 복구. 실제 소비자 PVC는 계속 0건이라 서비스 영향 없었음.
### 전체 StorageClass 요약
| StorageClass | 방식 | 용도 | HA |
@@ -139,7 +175,35 @@ helm install synology-iscsi democratic-csi/democratic-csi \
|------|-----------|-----|----------|
| 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 네트워크 설정 |
| hp2 | ens2 | — | (2026-04-14 시점 192.168.205.0/24 참여 확인, MTU 설정 재검증 필요) |
| NAS | eth2 (USB 2.5GbE) | 9000 | Synology DSM 네트워크 설정 |
## NAS eth2 USB NIC watchdog (2026-04-14)
NAS의 eth2(USB 2.5G, RTL8157)가 USB 3.0 LPM exit latency 미보고 이슈로 간헐적 disconnect 발생 (21일 uptime 기준 2회). 드라이버는 자동 reconnect하지만 인터페이스가 DOWN 상태로 남아 네트워크 서비스 중단.
근본 원인: DSM 3.10.108 커널의 xHCI 호스트 컨트롤러가 LPM `U1/U2 exit latency` descriptor를 OS에 노출하지 않음 → 링크 절전 복귀 타이밍 불일치 → `-71 EPROTO` → USB disconnect. DS916+ 하드웨어/커널 조합의 근본적 한계로 드라이버 업데이트·커널 교체로 해결 불가.
### 대응: cron watchdog
| 항목 | 값 |
|------|-----|
| 스크립트 | `/usr/local/bin/eth2-watchdog.sh` (root:755) |
| 주기 | 1분 (root cron, `/etc/crontab`) |
| 로그 | `/var/log/eth2-watchdog.log` |
| 영속성 | `/dev/md0` ext4 root, 재부팅 유지 (DSM 메이저 업그레이드 시 재확인 필요) |
동작:
1. `/sys/class/net/eth2/operstate` 확인
2. `up`이 아니면 `ip link set eth2 up` (IP는 DSM ifcfg-eth2가 자동 할당)
3. UP 후 IP 없으면 `ip addr add 192.168.205.100/24 dev eth2`
4. MTU ≠ 9000 이면 보정
### 검증 기록
- 2026-04-14 강제 down 테스트: 1분 내 watchdog 실행 → `ip link up` → DSM ifcfg 자동 IP 할당 → 정상 복귀 (MTU 9000 유지)
- Outline 상세 기록: `2026-04-14 / NAS eth2 watchdog 구축 / kappa` (id `93baf66b-f003-47a9-9d14-7a66e3dbfde0`)
- RCA 문서: `2026-04-14 / NAS eth2 USB NIC 링크 드롭 원인 조사 / kappa` (id `db923170-8c16-459d-82ce-46fdc1f0f0d0`)
### kr2 USB NIC 드라이버 (r8152 DKMS)