diff --git a/seagate/csi-exos-x-csidriver.yaml b/seagate/csidriver/csi-exos-x-csidriver.yaml similarity index 100% rename from seagate/csi-exos-x-csidriver.yaml rename to seagate/csidriver/csi-exos-x-csidriver.yaml diff --git a/seagate/csidriver/kustomization.yaml b/seagate/csidriver/kustomization.yaml new file mode 100644 index 0000000..ee2bf83 --- /dev/null +++ b/seagate/csidriver/kustomization.yaml @@ -0,0 +1,4 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: + - csi-exos-x-csidriver.yaml diff --git a/seagate/kustomization.yaml b/seagate/kustomization.yaml new file mode 100644 index 0000000..74c7356 --- /dev/null +++ b/seagate/kustomization.yaml @@ -0,0 +1,8 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +resources: + - namespace.yaml + - csidriver/ + - secrets/ + - storageclass/ diff --git a/seagate/readme.md b/seagate/readme.md index 94619d2..3c0e093 100644 --- a/seagate/readme.md +++ b/seagate/readme.md @@ -175,20 +175,7 @@ kubectl label nodes topology.kubernetes.io/zone=site-b --overw ## 3) Despliegue del Driver con Helm -### 3.1. Namespace y valores - -```bash -kubectl apply -f namespace.yaml # namespace: seagate -``` - -**values.yaml** (resumen de lo usado): - -* Imagen del driver: `ghcr.io/seagate/seagate-exos-x-csi:v1.10.0` -* Sidecars: provisioner, attacher, resizer, snapshotter, registrar -* `controller.extraArgs: ["-v=2"]` -* `node.extraArgs: ["-v=2"]` - -### 3.2. Instalación +### 3.1. Instalación ```bash helm upgrade --install exos-x-csi \ @@ -199,36 +186,37 @@ helm upgrade --install exos-x-csi \ *(Si hay residuos RBAC, eliminarlos antes de reintentar)* ---- -## 4) Secret por cabina (A y B) - -Crear un `Secret` por sitio con `apiAddress`, `username`, `password` en Base64. +### 3.2. Namespace y valores ```bash -kubectl apply -f secret-me5-site-a.yaml -kubectl apply -f secret-me5-site-b.yaml +kubectl apply -k . ``` +Esto asegura que se creen en el orden correcto: + +1. `namespace.yaml` → crea el namespace seagate. +2. `csidriver/` → instala el recurso CSIDriver (cluster-scoped). +3. `secrets/` → instala los secrets de conexión en el namespace seagate. +4. `storageclass/` → instala los dos StorageClass (sc-me5-site-a y sc-me5-site-b). + +>Notas sobre recursos cluster-scoped: +En Kubernetes hay recursos que pertenecen a un namespace (ej: Pod, Secret, ConfigMap) y otros que son globales para todo el clúster (ej: CSIDriver, StorageClass, Node, Namespace). Los resources namespaced se pueden repetir en distintos namespaces. Los cluster-scoped solo existen una vez en todo el clúster y no tienen campo namespace. +En este repositorio: + +* CSIDriver y StorageClass son cluster-scoped → no tienen namespace. +* Los Secret sí son namespaced → se instalan en seagate. + +Por eso el kustomization.yaml está separado en subcarpetas: + +* secrets/kustomization.yaml tiene namespace: seagate porque aplica solo a objetos namespaced. +* csidriver/ y storageclass/ no tienen namespace porque son cluster-scoped. + +Esto evita errores y mantiene la instalación GitOps-friendly. + --- -## 5) StorageClass por zona - -Definir **dos** `StorageClass` con: - -* Secret (A o B) -* `pool` y `volPrefix` -* `allowedTopologies` por zona -* `volumeBindingMode: WaitForFirstConsumer` - -```bash -kubectl apply -f sc-me5-site-a.yaml -kubectl apply -f sc-me5-site-b.yaml -``` - ---- - -## 6) Prueba de extremo a extremo +## 4) Prueba de extremo a extremo PVC + Pod en site-a: @@ -242,7 +230,7 @@ Verificar `iscsiadm`, `multipath`, eventos del PVC y logs del controller. --- -## 7) Medición de tiempos de *NodePublish* +## 5) Medición de tiempos de *NodePublish* ```bash kubectl -n seagate logs -l name=seagate-exos-x-csi-node-server \ @@ -252,7 +240,7 @@ kubectl -n seagate logs -l name=seagate-exos-x-csi-node-server \ --- -## 8) Solución de problemas +## 6) Solución de problemas * `missing API credentials` → revisar claves CSI en el StorageClass. * `DeadlineExceeded` → revisar multipath, etiquetas de zona y topología. @@ -260,7 +248,7 @@ kubectl -n seagate logs -l name=seagate-exos-x-csi-node-server \ --- -## 9) Limpieza +## 7) Limpieza ```bash kubectl delete -f pod-a.yaml @@ -275,17 +263,7 @@ helm uninstall exos-x-csi -n seagate --- -## 10) Resumen en repo (`seagate/`) - -* `namespace.yaml` -* `secret-me5-site-a.yaml`, `secret-me5-site-b.yaml` -* `values.yaml` -* `sc-me5-site-a.yaml`, `sc-me5-site-b.yaml` -* `pvc-pod-a.yaml`, `pod-a.yaml` - ---- - -## 11) Anexos — Comandos útiles +## 8) Anexos — Comandos útiles * Reinicio multipath/kubelet * Limpieza iSCSI/multipath: diff --git a/seagate/secrets/kustomization.yaml b/seagate/secrets/kustomization.yaml new file mode 100644 index 0000000..1d9c0f2 --- /dev/null +++ b/seagate/secrets/kustomization.yaml @@ -0,0 +1,5 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: + - secret-me5-site-a.yaml + - secret-me5-site-b.yaml diff --git a/seagate/secret-me5-site-a.yaml b/seagate/secrets/secret-me5-site-a.yaml similarity index 100% rename from seagate/secret-me5-site-a.yaml rename to seagate/secrets/secret-me5-site-a.yaml diff --git a/seagate/secret-me5-site-b.yaml b/seagate/secrets/secret-me5-site-b.yaml similarity index 100% rename from seagate/secret-me5-site-b.yaml rename to seagate/secrets/secret-me5-site-b.yaml diff --git a/seagate/storageclass/kustomization.yaml b/seagate/storageclass/kustomization.yaml new file mode 100644 index 0000000..7acec00 --- /dev/null +++ b/seagate/storageclass/kustomization.yaml @@ -0,0 +1,5 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: + - sc-me5-site-a.yaml + - sc-me5-site-b.yaml diff --git a/seagate/storageclass/nano b/seagate/storageclass/nano new file mode 100644 index 0000000..e69de29 diff --git a/seagate/sc-me5-site-a.yaml b/seagate/storageclass/sc-me5-site-a.yaml similarity index 70% rename from seagate/sc-me5-site-a.yaml rename to seagate/storageclass/sc-me5-site-a.yaml index ae3d078..abd1ba2 100644 --- a/seagate/sc-me5-site-a.yaml +++ b/seagate/storageclass/sc-me5-site-a.yaml @@ -3,7 +3,8 @@ kind: StorageClass metadata: name: sc-me5-site-a provisioner: csi-exos-x.seagate.com -volumeBindingMode: WaitForFirstConsumer +reclaimPolicy: Delete +volumeBindingMode: Immediate allowVolumeExpansion: true parameters: csi.storage.k8s.io/provisioner-secret-name: seagate-me5-site-a @@ -13,10 +14,7 @@ parameters: csi.storage.k8s.io/controller-expand-secret-name: seagate-me5-site-a csi.storage.k8s.io/controller-expand-secret-namespace: seagate csi.storage.k8s.io/fstype: ext4 - pool: dg01 # pool de la ME5 del Site A - volPrefix: sza # prefijo corto para identificar Site A + pool: pool + volPrefix: sza storageProtocol: iscsi -allowedTopologies: -- matchLabelExpressions: - - key: topology.kubernetes.io/zone - values: ["site-a"] + diff --git a/seagate/sc-me5-site-b.yaml b/seagate/storageclass/sc-me5-site-b.yaml similarity index 80% rename from seagate/sc-me5-site-b.yaml rename to seagate/storageclass/sc-me5-site-b.yaml index a34d340..dac989a 100644 --- a/seagate/sc-me5-site-b.yaml +++ b/seagate/storageclass/sc-me5-site-b.yaml @@ -3,7 +3,8 @@ kind: StorageClass metadata: name: sc-me5-site-b provisioner: csi-exos-x.seagate.com -volumeBindingMode: WaitForFirstConsumer +reclaimPolicy: Delete +volumeBindingMode: Immediate allowVolumeExpansion: true parameters: csi.storage.k8s.io/provisioner-secret-name: seagate-me5-site-b @@ -13,10 +14,6 @@ parameters: csi.storage.k8s.io/controller-expand-secret-name: seagate-me5-site-b csi.storage.k8s.io/controller-expand-secret-namespace: seagate csi.storage.k8s.io/fstype: ext4 - pool: dg02 + pool: pool volPrefix: szb storageProtocol: iscsi -allowedTopologies: -- matchLabelExpressions: - - key: topology.kubernetes.io/zone - values: ["site-b"]