mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2026-09-20 15:04:37 +00:00
docs(g15d): add dynamic PVC QA instruction
This commit is contained in:
@@ -0,0 +1,127 @@
|
||||
# V3 Phase 15 G15d QA Test Instruction
|
||||
|
||||
Date: 2026-05-03
|
||||
Status: QA-ready on `p15-g15d/blockvolume-launcher@0265b60`
|
||||
Scope: Kubernetes dynamic PVC smoke through launcher-generated blockvolume workload
|
||||
|
||||
## Headline
|
||||
|
||||
At `p15-g15d/blockvolume-launcher@0265b60`, G15d should prove a dynamic
|
||||
PVC can create a V3 lifecycle volume intent, trigger blockmaster's launcher to
|
||||
generate a blockvolume Deployment, apply that generated workload, and complete
|
||||
a pod filesystem checksum write/read through CSI + iSCSI.
|
||||
|
||||
This is the first no-precreated-PV / no-hand-started-blockvolume Kubernetes
|
||||
path. It is still a single-node lab smoke, not a production operator.
|
||||
|
||||
## Preconditions
|
||||
|
||||
- M02 or equivalent k3s node is available.
|
||||
- Images are built and loaded as `sw-block:local` and `sw-block-csi:local`.
|
||||
- `kubectl` points at the test cluster.
|
||||
- iSCSI TCP module is loadable on the host. The CSI node init container runs
|
||||
`modprobe iscsi_tcp || true`.
|
||||
|
||||
## Command
|
||||
|
||||
From the seaweed_block checkout at `0265b60`:
|
||||
|
||||
```bash
|
||||
bash scripts/run-g15d-k8s-dynamic.sh "$PWD"
|
||||
```
|
||||
|
||||
Optional artifact directory override:
|
||||
|
||||
```bash
|
||||
G15D_ARTIFACT_DIR=/mnt/smb/work/share/g15d-k8s/runs/<run-id> \
|
||||
bash scripts/run-g15d-k8s-dynamic.sh "$PWD"
|
||||
```
|
||||
|
||||
## Expected PASS
|
||||
|
||||
The script should print:
|
||||
|
||||
```text
|
||||
[g15d] PASS: dynamic PVC pod completed checksum write/read
|
||||
```
|
||||
|
||||
The pod log should contain:
|
||||
|
||||
```text
|
||||
/data/payload.bin: OK
|
||||
```
|
||||
|
||||
The generated manifest artifact should exist:
|
||||
|
||||
```text
|
||||
generated-blockvolume.yaml
|
||||
```
|
||||
|
||||
It must contain a Deployment named like:
|
||||
|
||||
```text
|
||||
sw-blockvolume-<dynamic-volume-id>-r1
|
||||
```
|
||||
|
||||
## Scenarios
|
||||
|
||||
1. Dynamic PVC has no pre-created PV.
|
||||
|
||||
Backing files:
|
||||
`deploy/k8s/g15d/dynamic-pvc-pod.yaml`,
|
||||
`cmd/blockcsi/g15d_manifest_test.go::TestG15d_K8sDynamicPVC_UsesStorageClassNoPrecreatedPV`
|
||||
|
||||
2. External provisioner is present.
|
||||
|
||||
Backing files:
|
||||
`deploy/k8s/g15d/csi-controller.yaml`,
|
||||
`cmd/blockcsi/g15d_manifest_test.go::TestG15d_K8sCSIController_IncludesExternalProvisioner`
|
||||
|
||||
3. Product stack does not pre-create blockvolume workloads.
|
||||
|
||||
Backing files:
|
||||
`deploy/k8s/g15d/block-stack.yaml`,
|
||||
`cmd/blockcsi/g15d_manifest_test.go::TestG15d_K8sBlockStack_HasLauncherButNoPrecreatedBlockvolume`
|
||||
|
||||
4. Launcher-generated manifest is applied by harness after CreateVolume.
|
||||
|
||||
Backing files:
|
||||
`scripts/run-g15d-k8s-dynamic.sh`,
|
||||
`cmd/blockcsi/g15d_manifest_test.go::TestG15d_K8sRunner_AppliesLauncherGeneratedManifest`
|
||||
|
||||
5. Pod writes 4 KiB, syncs, and verifies checksum through mounted PVC.
|
||||
|
||||
Backing file:
|
||||
`deploy/k8s/g15d/dynamic-pvc-pod.yaml`
|
||||
|
||||
## Artifacts
|
||||
|
||||
The script preserves:
|
||||
|
||||
- `run.log`
|
||||
- `block-stack.rendered.yaml`
|
||||
- `generated-blockvolume.yaml`
|
||||
- `blockmaster.log`
|
||||
- `blockcsi-controller.log`
|
||||
- `csi-provisioner.log`
|
||||
- `csi-attacher.log`
|
||||
- `blockvolume-generated.log`
|
||||
- `pod.log`
|
||||
- `pod.describe.txt`
|
||||
- `app-storage.txt`
|
||||
- `kube-system-pods-deploys.txt`
|
||||
- `cleanup.log`
|
||||
|
||||
## Non-Claims
|
||||
|
||||
- No multi-node Kubernetes claim.
|
||||
- No operator/controller reconciliation claim.
|
||||
- No automatic deletion of dynamically-created blockvolume workloads beyond
|
||||
this harness cleanup path.
|
||||
- No failover during mounted dynamic PVC.
|
||||
- No snapshot, resize, block-mode, or topology-aware scheduling claim.
|
||||
- No performance claim.
|
||||
|
||||
## QA Sign
|
||||
|
||||
Pending QA M02 run.
|
||||
@@ -1,7 +1,7 @@
|
||||
# V3 Phase 15 G15d Mini-Plan — BlockVolume Launcher MVP
|
||||
|
||||
Date: 2026-05-03
|
||||
Status: planner + renderer + node inventory + replica-id materialization + manifest writer loop landed on `p15-g15d/blockvolume-launcher`
|
||||
Status: dynamic PVC K8s harness ready for QA on `p15-g15d/blockvolume-launcher`
|
||||
Depends on: G15c `CreateVolume -> lifecycle desired intent`
|
||||
|
||||
## 0. Product Sentence
|
||||
@@ -49,6 +49,7 @@ Commits:
|
||||
- `ae2cd1a G15d: import cluster spec node inventory`
|
||||
- `1848099 G15d: materialize launcher replica identities`
|
||||
- `109edd8 G15d: write launcher blockvolume manifests`
|
||||
- `0265b60 G15d: add dynamic PVC K8s harness`
|
||||
|
||||
Implemented:
|
||||
- `core/lifecycle.BlockVolumeWorkloadPlan`
|
||||
@@ -64,6 +65,7 @@ Implemented:
|
||||
- master-side workload planning tick converts blank-pool placements into concrete replica workload identities and writes those replica IDs back as existing-replica placement intent
|
||||
- dynamic-volume assignment subscriptions can fall back to lifecycle placement slots when static accepted topology does not yet contain the volume
|
||||
- `blockmaster` can run an optional launcher loop that writes rendered blockvolume Deployment YAMLs to `--launcher-manifest-dir`; it does not call `kubectl apply`
|
||||
- G15d K8s dynamic harness exists: dynamic StorageClass/PVC/pod -> CSI CreateVolume -> master lifecycle -> launcher manifest -> script applies generated blockvolume -> pod checksum
|
||||
|
||||
Verification:
|
||||
|
||||
@@ -71,6 +73,7 @@ Verification:
|
||||
go test ./core/lifecycle -count=1
|
||||
go test ./core/lifecycle ./core/launcher -count=1
|
||||
go test ./cmd/blockmaster ./core/lifecycle ./core/host/master ./core/launcher -count=1
|
||||
go test ./cmd/blockcsi ./core/launcher ./cmd/blockmaster ./core/host/master ./core/lifecycle -count=1
|
||||
```
|
||||
|
||||
## 4. Next Slices
|
||||
@@ -90,6 +93,11 @@ G15d-D — M02 dynamic PVC:
|
||||
- external-provisioner calls CSI CreateVolume.
|
||||
- launcher starts blockvolume workload.
|
||||
- pod writes 4 KiB + sync + checksum read-back OK.
|
||||
- QA command:
|
||||
|
||||
```bash
|
||||
bash scripts/run-g15d-k8s-dynamic.sh "$PWD"
|
||||
```
|
||||
|
||||
## 5. Close Criteria
|
||||
|
||||
|
||||
Reference in New Issue
Block a user