From b6c68186fe3b67ea25eeda7a51799be710376de8 Mon Sep 17 00:00:00 2001 From: kappa Date: Tue, 14 Apr 2026 12:35:20 +0900 Subject: [PATCH] =?UTF-8?q?infra/nas-storage:=202026-04-14=20=EC=A0=95?= =?UTF-8?q?=ED=99=95=EC=84=B1=20=EB=B3=B4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 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 이슈 대응) --- infra/nas-storage.md | 78 ++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 71 insertions(+), 7 deletions(-) diff --git a/infra/nas-storage.md b/infra/nas-storage.md index 849287a..3695cf2 100644 --- a/infra/nas-storage.md +++ b/infra/nas-storage.md @@ -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)