fstype в StorageClass — это ФС внутри тома: Proxmox отдаёт zvol (блочное устройство на ZFS), CSI форматирует его и монтирует в под. Сам том живёт на ZFS-пуле (local-zfs = rpool), поэтому checksums/compression/снапшоты работают на стороне PVE. ZFS-поверх-ZFS не делаем — внутри zvol обычная ФС, ext4 = дефолт external-attacher'а (--default-fstype=ext4). Захотим xfs — одна строка fstype: xfs. Файловые ZFS-снапшоты «как в датасете» даёт только NFS-экспорт датасета + csi-driver-nfs (отдельный этап, для bulk-данных).
Что нужно до мёржа
Роль/юзер/токен CSI на pve уже созданы — остаётся token_secret в secret.sops.yaml + sops -e -i по нему;
just talos diff → just talos apply (метки region/zone) — после мёржа.
После мёржа
just kube reconcile
KUBECONFIG=./kubeconfig kubectl -n storage get pods,helmrelease
KUBECONFIG=./kubeconfig kubectl get sc,csidriver
KUBECONFIG=./kubeconfig kubectl get csistoragecapacities -ocustom-columns=CLASS:.storageClassName,AVAIL:.capacity,ZONE:.nodeTopology.matchLabels
История правок
fix(storage): tag чарта 0.5.10 — несуществующий tag ломал резолв OCIRepository (отсюда падение Flate);
fix(storage): region = home-ops — не пересоздаём PVE-кластер, берём его текущее имя.
Отдельная задача: **хранилище**. Vault идёт следующим PR.
## Что в PR
- `kubernetes/apps/storage/` (ns `storage`, PSA `privileged` — node-плагину нужны `/dev` и монтирование): chart `oci://ghcr.io/sergelogvinov/charts/proxmox-csi-plugin` (**tag 0.5.10** — это версия чарта; `0.20.0` это appVersion релиза), конфиг Proxmox берётся из существующего Secret'а (`existingConfigSecret`), controller/node с toleration на taint control-plane (все ноды CP).
- StorageClass'ы: `proxmox-local-zfs` (пул `local-zfs` = **rpool**, зеркало 2×NVMe, **дефолтный**) и `proxmox-ssd` (bulk, 2 TB), оба `ssd: true` (SSD-эмуляция + discard).
- `proxmox-csi/app/secret.sops.yaml` — подключение к PVE: `region: home-ops` (имя существующего Proxmox-кластера), `insecure: true`, `token_id: kubernetes-csi@pve!csi`; **token_secret требует заполнения + `sops -e -i`**.
- `talos/all/32-node-labels.yaml` — метки `topology.kubernetes.io/region=home-ops`, `zone=pve`.
## Про `fstype: ext4`
`fstype` в StorageClass — это ФС **внутри** тома: Proxmox отдаёт zvol (блочное устройство на ZFS), CSI форматирует его и монтирует в под. Сам том живёт на ZFS-пуле (`local-zfs` = rpool), поэтому checksums/compression/снапшоты работают на стороне PVE. ZFS-поверх-ZFS не делаем — внутри zvol обычная ФС, ext4 = дефолт external-attacher'а (`--default-fstype=ext4`). Захотим xfs — одна строка `fstype: xfs`. Файловые ZFS-снапшоты «как в датасете» даёт только NFS-экспорт датасета + `csi-driver-nfs` (отдельный этап, для bulk-данных).
## Что нужно до мёржа
1. Роль/юзер/токен CSI на pve уже созданы — остаётся `token_secret` в `secret.sops.yaml` + `sops -e -i` по нему;
2. `just talos diff` → `just talos apply` (метки region/zone) — после мёржа.
## После мёржа
```sh
just kube reconcile
KUBECONFIG=./kubeconfig kubectl -n storage get pods,helmrelease
KUBECONFIG=./kubeconfig kubectl get sc,csidriver
KUBECONFIG=./kubeconfig kubectl get csistoragecapacities -ocustom-columns=CLASS:.storageClassName,AVAIL:.capacity,ZONE:.nodeTopology.matchLabels
```
## История правок
- `fix(storage): tag чарта 0.5.10` — несуществующий tag ломал резолв `OCIRepository` (отсюда падение Flate);
- `fix(storage): region = home-ops` — не пересоздаём PVE-кластер, берём его текущее имя.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Отдельная задача: хранилище. Vault идёт следующим PR.
Что в PR
kubernetes/apps/storage/(nsstorage, PSAprivileged— node-плагину нужны/devи монтирование): chartoci://ghcr.io/sergelogvinov/charts/proxmox-csi-plugin(tag 0.5.10 — это версия чарта;0.20.0это appVersion релиза), конфиг Proxmox берётся из существующего Secret'а (existingConfigSecret), controller/node с toleration на taint control-plane (все ноды CP).proxmox-local-zfs(пулlocal-zfs= rpool, зеркало 2×NVMe, дефолтный) иproxmox-ssd(bulk, 2 TB), обаssd: true(SSD-эмуляция + discard).proxmox-csi/app/secret.sops.yaml— подключение к PVE:region: home-ops(имя существующего Proxmox-кластера),insecure: true,token_id: kubernetes-csi@pve!csi; token_secret требует заполнения +sops -e -i.talos/all/32-node-labels.yaml— меткиtopology.kubernetes.io/region=home-ops,zone=pve.Про
fstype: ext4fstypeв StorageClass — это ФС внутри тома: Proxmox отдаёт zvol (блочное устройство на ZFS), CSI форматирует его и монтирует в под. Сам том живёт на ZFS-пуле (local-zfs= rpool), поэтому checksums/compression/снапшоты работают на стороне PVE. ZFS-поверх-ZFS не делаем — внутри zvol обычная ФС, ext4 = дефолт external-attacher'а (--default-fstype=ext4). Захотим xfs — одна строкаfstype: xfs. Файловые ZFS-снапшоты «как в датасете» даёт только NFS-экспорт датасета +csi-driver-nfs(отдельный этап, для bulk-данных).Что нужно до мёржа
token_secretвsecret.sops.yaml+sops -e -iпо нему;just talos diff→just talos apply(метки region/zone) — после мёржа.После мёржа
История правок
fix(storage): tag чарта 0.5.10— несуществующий tag ломал резолвOCIRepository(отсюда падение Flate);fix(storage): region = home-ops— не пересоздаём PVE-кластер, берём его текущее имя.Pull request closed