feat: proxmox-csi

This commit is contained in:
2026-09-17 18:34:01 +03:00
parent 6b1fc54c0d
commit b145ec2547
8 changed files with 183 additions and 0 deletions
@@ -0,0 +1,11 @@
---
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: storage
components:
- ../../components/sops
resources:
- ./namespace.yaml
- ./proxmox-csi/ks.yaml
+10
View File
@@ -0,0 +1,10 @@
---
apiVersion: v1
kind: Namespace
metadata:
name: storage
annotations:
kustomize.toolkit.fluxcd.io/prune: disabled
# proxmox-csi-plugin ставит привилегированный node-DaemonSet (работа с
# /dev и монтированием дисков), поэтому PSA для этого ns ослаблен.
pod-security.kubernetes.io/enforce: privileged
@@ -0,0 +1,62 @@
---
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: proxmox-csi-plugin
spec:
chartRef:
kind: OCIRepository
name: proxmox-csi-plugin
interval: 1h
maxHistory: 3
install:
crds: CreateReplace
remediation:
retries: 3
upgrade:
crds: CreateReplace
cleanupOnFail: true
remediation:
retries: 3
values:
# Подключение к Proxmox (url/токен/region) и StorageClass'ы: сам конфиг лежит
# в Secret'е proxmox-csi-config (файл secret.sops.yaml рядом, шифруется sops).
existingConfigSecret: proxmox-csi-config
existingConfigSecretKey: config.yaml
storageClass:
# local-zfs = пул rpool (зеркало 2x NVMe) — дефолтный класс: сюда идут
# Vault, базы и всё, что требует избыточности на уровне дисков.
- name: proxmox-local-zfs
storage: local-zfs
fstype: ext4
ssd: true
reclaimPolicy: Delete
annotations:
storageclass.kubernetes.io/is-default-class: "true"
# ssd = большой пул (2 TB, одиночный NVMe) — под bulk-данные.
- name: proxmox-ssd
storage: ssd
fstype: ext4
ssd: true
reclaimPolicy: Delete
controller:
# Все три ноды — control-plane, поэтому контроллер цепляем туда же
# (и терпим taint control-plane).
nodeSelector:
node-role.kubernetes.io/control-plane: ""
tolerations:
- key: node-role.kubernetes.io/control-plane
effect: NoSchedule
node:
tolerations:
- key: node-role.kubernetes.io/control-plane
effect: NoSchedule
- key: karpenter.sh/disrupted
operator: Exists
effect: NoSchedule
- key: node.kubernetes.io/unschedulable
operator: Exists
effect: NoSchedule
- key: node.kubernetes.io/disk-pressure
operator: Exists
effect: NoSchedule
@@ -0,0 +1,7 @@
---
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ./ocirepository.yaml
- ./helmrelease.yaml
- ./secret.sops.yaml
@@ -0,0 +1,13 @@
---
apiVersion: source.toolkit.fluxcd.io/v1
kind: OCIRepository
metadata:
name: proxmox-csi-plugin
spec:
interval: 12h
layerSelector:
mediaType: application/vnd.cncf.helm.chart.content.v1.tar+gzip
operation: copy
ref:
tag: 0.5.10
url: oci://ghcr.io/sergelogvinov/charts/proxmox-csi-plugin
@@ -0,0 +1,53 @@
apiVersion: v1
kind: Secret
metadata:
name: proxmox-csi-config
stringData:
config.yaml: ENC[AES256_GCM,data:PA0fLwDJAxsCKSe5szky6wTK001YcXHMGfDJNG1H8kSycTLybPDVRfbmDI9D0JYPMcBaOb63QWCflF+wlvQZ2dTO9ZT1qsrLKmHpPA4SULM+3dHrKxAakzfzQv0BDIypvneAcn5VZs/vG1UCEfqz6UnnwMU1F59Nsbc5SSuh10zBBea812rV9D5+q76EviwYUTrNUjYve5Wx4zSLEpPMXq2CBAcKhq/w31pAsysKvMIVb2HPPmKudkO+GdN+mA==,iv:TRznl4Fg2C75hhNcoiKoOzO4G7f5sElXlQ9ri2xZk2A=,tag:zELD8rJi4KXQxyIcNtjAWA==,type:str]
sops:
age:
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IG1sa2VtNzY4eDI1NTE5IEU0cWdlQ1Q5
VVoyeUNpdjR3NjRpVzdTZlNoQkdjT3VYOEovZ045cDZmK2pNVUVSMm9sa2tMT1d3
a05OOHc3ZTJ2SFIzcHgzbDhvdEVxNTJ2U2ZXN0tvOFYrZlM2OXlpbTNEODh0aWd5
ZUZhSkttWktMcEE1WSt0WHR4bGoza1d1QVBTRC9OSkRWK0pZN2dQK3NIRUNHSlFM
MVpWemJBaFpnejZnTTBhSmxsRU9iN2dvQ29iaXBjYmMyT0xrS2hnYjYrUno2S2JH
Z3pOUm8vK0lTSVRPYVMvSnRaenZOTHFGNTZsY0VrSWVMVG9mUjRaU0hJNDlsSCtF
WWdpYnFyRTl4RmUyU1JOeWVsWWRpLzFLSEJVdTlTZDJ2UFdpYnh2eENrOTJFVjFS
c1Y0UWMxS3Y1OTJhRkNwL1NlUzZQdmk2VXRqbFpqVnFpT09XemN6ZC9hRlRKVjR3
THpHRUprTGhGMnpiTWtNY0xBVCtHMkY1NUdDTDRhVnpXd3FSRlhNMjZ3OUlabmJt
N1hKRHlvbGhxSmFNQjQ4UmY0akdFNEl1NytWNzhIMWw4V2pCM3ZDZldBWTdMMmRz
MUtQQTM3Sld3TGRod0VPU29GVkhIdzZWejRvTnhvOUdyQk14YWZ4WGMyV1pPaGhT
c3NMaFhGaFlOQVc1VzBDRnk1YUZ3ejNjek9SdnBiY1ZkRkNISHdXVXJTcEhRQkVn
ZTNnNzFQVnRFd05ZaGdacUlWbDVzN2lFaHZiMFB5c3lGSDhBUWQyaTAvd3F0bWtj
eEJMaHpsdDNJVG12TzdDM1hWNDhsNm1yL0hLZ3VaTmdKanlyWGd4aHl0ZlcyclRO
RWdjV0p0S2VUV2s2c3RCd09xWWVGcjBYbkVWbG5qY0dhUUxmOWxIRTRLZTZ2NDQy
MEJCL1FTUXpLZVBSbmhBSzJ4ZUY3bStjOWpEbENib2h1aTFxMHFWdlQ5eEJ5NjZi
OENuRkZ4Q3ptWHI0RVc4Ryt2T3ZDQlQ5K3o0RURhME4wNDRQenJzcnJqNDNTdjA5
ZW5IQnJ1ekZINitsQStZRm4vdVhqckFqWVFNZFpKRWx1WG5yZnFydE5UTEJxc0lL
UVhQZlBRekhlWW95eElvWkVyS1lyVUJYRXhGeWp5eXZNUkNKQUNld3VTSmpJM0Z0
QWZQd0p1UlFPbjQzazVmNzV2YWdaWkpJK2pEUzNWUzZJdlpKUnZyQXhYbFFMdnJG
M2lNTWp0a1V6ODZteXBzcGdWMlFBNE5DdTJuRGpwOExQLzFZVTNzb3NKOTVjbFBF
bTVLc0NIMzVFZUtPVzIvRHNNcFNiTTl0TXI3WXk4MG9LMkVHSTkvTHRjV254WW5M
ZHVoV0xsbEcwaElpaytMMmR3RWQrNnMxZUdCa24rUndDQkJDeDkzc3ZWRmF5czZw
WWtZMTlpZGpNSm9lc21ocE4vcHpxaW1TWjlrUmFncWtIVWo2Mzc2QS9MV0JYTGhU
K05wTW9ydmJUYUludmVlSHpOY2NFVXFKbVQ4dC9tM3g4d0t1ZWw4Z2Q5OTdFcnFi
T2ZVS2ZNWTNHWmFNcko1ZnhkdE40bitESFMreGpKRTZlSGRLVnk3WEFnNk9MTTNi
NkVpK21HNENLSDdvSHV2SDhYeGVGTythYmMxUUoxbzFxOE56SHY5dlNUcjNMRDJv
YUtybVk2MHRJY2tvQXJoT1IxSFhNTXpoZWQyQzNGby9IZnVNT2dVSXVvWmt2Z3pJ
b0RFZzZ1QW0vYUM3d3lNOXhkdjhQL010QjRxRkJTMEdhS2NJMkFRRGROdEhDN1N2
eE44NUMwZk9GbkNQT09xWCtuN1VIVDJZSGVWUUdYUDNVUmUrUWNqeTBBWjRSTEx3
TEFnWnMzVkQ2ZUxlYjRWWjE1dHdRM3RBakprYzQ1Q0tVNVVoNkMya00yL29MSjBy
aEt4eDV2dC9lR1Y4a2FRM3YyOFZNai9wRHJONmY4OWViSHVPZFJnZTZydVhWUQpD
cE5uMHJVT2YrcjFqakVqTytNSE5oRHBWRFhwTHNrZUVGQlpJMVl6S3VvCi0tLSBE
ZEVGcHphK3djWTBybU90NUVQQi9hU2hSTWNSbVMrSm5WYXpnYXV6ZnprChbbmrjR
B+lczEcigg+5l38Pyv8lY1Ez/XygX/eE8V801fukdahZn7kXRXSv23Lvdi5EUq/6
pmGSN0RLoC36CCM=
-----END AGE ENCRYPTED FILE-----
recipient: age1pq1kujt4l0f4ef0f2duw2txmcf87js23qxxq376erctqq6l8kc25duvszyk0kphpf4rfw54v9flae2zz86s3agchwux83ae8y5g38kgpehpv468gfdyqvks2hqd3s9r2zt6jd40vrjh5gzlhaex2v4hfya5wx7fykt89ty3ve9lsh2kemwytfuskruytq9kxwvys5w9uwa99a3ts2x68pex52j87qtkgjs4wnsmzeta0qsekz4jtrfqnhthge52nppe57fndaxzqsr3y64z5yyczh89mw97lur68uauk83z0c7c5j0ejj0azxmtt9fmm94rje9zefkf2dep0pgl84rcq64vk50neg5dye0rk3wxfeehvrqv5gnav6wmg5665kdmgxsvwje32kerj8zppvla6v92ul7gn4htw698yl5nqzx8lga4lxtj2kw5sdp9vamvsfmjwuqer5s9tpa2skhj3r4n0jjspy39uat4yk5fre6cr0xg6rqrdp3w0ktgzq4gx89r8252xklxxc4scxf4eaqphqgrcz8kcemjz0zlsq6knud6enq3z3spqjrdr3uagrk93j0rshc2zvy7tqqudzajqmre7l29qae6800pzpt6tf5emqj50lqp2xdey3df5uj06232ntfu2djzk6c8juh6h9tchk4vapn4g4jf8chlv5fqlfx4jnrsy8jv6szvwq6nx0nr0fn48ajae8fspnep8e9q5c9eukku86zejcq907292wypzcj4uurqs7ffranj73qsqsx3jtug75zkzyrf39ztqhkhxlcehddhav0vl4gpuexrs0qytdwfk9asc95kls7dx7g8xk96nwxphxd4za06ne4pmpcq9l88qc5wnjsdtxhtvdv0hmat24khs4dfw8ejpnyftqgkkjk80r23e03c08vs7vcj4d28qcmxg6g59sjz0zgkfj3g42nq7re4ysrz55qqhqxsrgxnmczw5wd8ufw3qcc8gsj87qm6h54h8tzj6e4jfcxwjhwmx2g0yanrczvrgw62yna9hy0wytrxjjcawejhfnj6jdsz588yu6epgs3uuuvnhdscxthpnduy2a8k7egzm7r8yyjp3ev29dve6ksr5rrk0v5xce55s3h9wn8dld0edj6ha9yfyvzgqhghv55fxfvmpn9vxyvs0w96hrzmngzjw9dv9k7wqmtcwh8qyzqrkfmm0xxw942wnlatfqssw9c8qpesgajh8v2aa6jpv2x4se3ck55y2apelskfs26yt5r5kjw5su5qptrnsentvy6exy92q5jzny4dvmx3y5s2uhfehnjcvtwrxhwldfjen7w9x43vdm96p7dv3fzvwhzmjvzr05nvjugrvky04fqehzhhmsfkw09v50uyht8yst5sd8ze6aahrlaymkhmzlaux5hh9p23qk9j44ck7pnurlz5z3ahfvhmkv4x5mgz0aundmhchg9zazdw9v7y0ue2pvhgqfnkj4vxs9s7dem8w69pzzqngt47y2a8qvkkgctq33jxmff8y2ag3pqyc5d2lqak7m2slas50h73vtk42q9j65jt634n9e5f8w7l0qy00xg9l3pg80qtfsctf06lx3p3p20kczwdvy6edf5yp0t2rtffwfgld7zun2my9ys9w0wh9glaxqwf85ay4fm2sjyhjkt4r2ruyl80ke4rrlpyue5f8zm4z4p8xy6447rggmpnfnem5kdar2lpapu9dua40r4rd7dzn0zprpqmc239q4jeg6e5uag59zdzysjzc89r5xt9m8fufjmtsau64fx2ef8gpas58ccn57esrxavcg6x596zdnv963d94a65ft6vkjpdky45tn9ulcf6xdms9c06m4dm4fgzw3rxtzezz2770wva4avw654r24d9hdh7are0rn69c9sdwd5mx45fruaze6l6
encrypted_regex: ^(data|stringData)$
lastmodified: "2026-09-17T15:29:19Z"
mac: ENC[AES256_GCM,data:OJohLIGwg5ULgiqtnk9KBIB1WhcVd9MslmaRtA2ZM5YrftbZ9g/FbzAgm4UzR+aga6DCtfQTIFpK0M/kxYh5vPAIBZ5T58bDbheV35jRQvIDVz/LAajewWcxOF1zqID07eix41PPP+QKk6rQ3zP1JUBwC6nNdEmEG2YBxA2z14M=,iv:gn2+TzRVeTYBLUSSFzuTDS2LE0wDWdA8spoVRM0lbfM=,tag:4rAQljRM3aDWpsE9GXyqyg==,type:str]
mac_only_encrypted: true
version: 3.13.3
@@ -0,0 +1,20 @@
---
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: proxmox-csi
spec:
interval: 1h
path: ./kubernetes/apps/storage/proxmox-csi/app
prune: true
sourceRef:
kind: GitRepository
name: flux-system
namespace: flux-system
targetNamespace: storage
wait: true
healthChecks:
- apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
name: proxmox-csi-plugin
namespace: storage