feat(storage): proxmox-csi-plugin + StorageClass на пулы Proxmox (rpool) #2

Closed
hermes wants to merge 3 commits from feat/storage-proxmox-csi into main
Collaborator

Отдельная задача: хранилище. 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 diffjust 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-кластер, берём его текущее имя.
hermes added 1 commit 2026-09-16 23:22:43 +00:00
feat(storage): proxmox-csi-plugin + StorageClass на пулы Proxmox (rpool/local-zfs)
Flate / Flate - Filter (pull_request) Successful in 5s
Flate / Flate (pull_request) Failing after 15s
Flate / Flate - Success (pull_request) Canceled after 0s
20fb353fac
hermes added 1 commit 2026-09-17 14:46:21 +00:00
fix(storage): tag чарта 0.5.10 (0.20.0 — это appVersion), region ru-central1
Flate / Flate - Filter (pull_request) Successful in 8s
Flate / Flate (pull_request) Successful in 43s
Flate / Flate - Success (pull_request) Canceled after 0s
2dff7e052d
hermes added 1 commit 2026-09-17 15:11:52 +00:00
fix(storage): region = home-ops (имя существующего PVE-кластера)
Flate / Flate - Success (pull_request) Blocked by required conditions
Flate / Flate - Filter (pull_request) Successful in 6s
Flate / Flate (pull_request) Successful in 32s
09038b4d49
grachevko closed this pull request 2026-09-17 15:35:20 +00:00
grachevko deleted branch feat/storage-proxmox-csi 2026-09-17 15:35:22 +00:00

Pull request closed

This pull request cannot be reopened because the branch was deleted.
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: grachevko/home-ops#2