From 4a7a9416e3a2d064fb56c2114eb383a60a10cd91 Mon Sep 17 00:00:00 2001 From: Ravi Kumar Date: Sat, 26 Jul 2025 12:06:26 +0530 Subject: [PATCH 1/6] v1.2.7 Heml chart addition V1.2.7 added node bind mount to reduce api calls. V1.2.7 added helm chart to deploy V1.2.7 added heml package V1.2.7 added heml package V1.2.7 added repo tz file, added readme file --- deploy/helm/README.md | 48 +++++++ deploy/helm/hammerspace-helm-chart/Chart.yaml | 6 + .../templates/configmap.yaml | 9 ++ .../templates/controller/rbac.yaml | 94 +++++++++++++ .../templates/controller/service.yaml | 24 ++++ .../templates/controller/statefulset.yaml | 113 ++++++++++++++++ .../templates/csidriver.yaml | 10 ++ .../templates/node/daemonset.yaml | 125 ++++++++++++++++++ .../templates/node/rbac.yaml | 43 ++++++ .../helm/hammerspace-helm-chart/values.yaml | 21 +++ deploy/helm/repo/artifacthub-repo.yaml | 5 + deploy/helm/repo/hammerspace-csi-1.2.7.tgz | Bin 0 -> 3091 bytes deploy/helm/repo/index.yaml | 14 ++ 13 files changed, 512 insertions(+) create mode 100644 deploy/helm/README.md create mode 100644 deploy/helm/hammerspace-helm-chart/Chart.yaml create mode 100644 deploy/helm/hammerspace-helm-chart/templates/configmap.yaml create mode 100644 deploy/helm/hammerspace-helm-chart/templates/controller/rbac.yaml create mode 100644 deploy/helm/hammerspace-helm-chart/templates/controller/service.yaml create mode 100644 deploy/helm/hammerspace-helm-chart/templates/controller/statefulset.yaml create mode 100644 deploy/helm/hammerspace-helm-chart/templates/csidriver.yaml create mode 100644 deploy/helm/hammerspace-helm-chart/templates/node/daemonset.yaml create mode 100644 deploy/helm/hammerspace-helm-chart/templates/node/rbac.yaml create mode 100644 deploy/helm/hammerspace-helm-chart/values.yaml create mode 100644 deploy/helm/repo/artifacthub-repo.yaml create mode 100644 deploy/helm/repo/hammerspace-csi-1.2.7.tgz create mode 100644 deploy/helm/repo/index.yaml diff --git a/deploy/helm/README.md b/deploy/helm/README.md new file mode 100644 index 0000000..a84f576 --- /dev/null +++ b/deploy/helm/README.md @@ -0,0 +1,48 @@ +# Hammerspace CSI Helm Charts + +This repository provides Helm charts to deploy the Hammerspace CSI driver components in a Kubernetes cluster. It supports deploying both **Controller** and **Node** plugins, along with configurable options such as timeouts and retry intervals. + +--- +## 🚀 How to Deploy the Chart + +1. **Add the Helm repository** (Published to GitHub Pages): + ```bash + helm repo add hscsi https://github.com/hammer-space/csi-plugin/deploy/helm/repo + helm repo update + ``` + +2. **Install the chart into your cluster:** + ``` + helm install hscsi hscsi/ --namespace kube-system --create-namespace + ``` +--- + +## 📦 How to Package a New Version + +#### Navigate to the chart directory: +``` +cd deploy/helm/hammerspace-helm-chart +``` +#### Create new package +``` +helm package . +``` + +#### Move the .tgz to your repo directory (e.g., deploy/helm/repo/) and regenerate the index.yaml: +``` +mv hammerspace-csi-.tgz ../../repo/ +cd ../../repo +helm repo index . +``` + +#### If hosted on GitHub Pages: + +Ensure index.yaml and .tgz files are committed to the branch (typically gh-pages) + +Add or update artifacthub-repo.yml next to index.yaml for Artifact Hub metadata + +#### How to Create a New Helm Chart +If you need to add a new chart: +``` +helm create new-chart +``` diff --git a/deploy/helm/hammerspace-helm-chart/Chart.yaml b/deploy/helm/hammerspace-helm-chart/Chart.yaml new file mode 100644 index 0000000..1d96391 --- /dev/null +++ b/deploy/helm/hammerspace-helm-chart/Chart.yaml @@ -0,0 +1,6 @@ +apiVersion: v2 +name: hammerspace-csi +description: A Helm chart for the Hammerspace CSI driver +version: 1.2.7 +appVersion: "v1.2.7" +icon: https://www.hammerspace.com/favicon.ico diff --git a/deploy/helm/hammerspace-helm-chart/templates/configmap.yaml b/deploy/helm/hammerspace-helm-chart/templates/configmap.yaml new file mode 100644 index 0000000..218ddd5 --- /dev/null +++ b/deploy/helm/hammerspace-helm-chart/templates/configmap.yaml @@ -0,0 +1,9 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: csi-env-config + namespace: {{ .Values.namespace | default "kube-system" }} +data: + MOUNT_CHECK_TIMEOUT: "{{ .Values.env.MOUNT_CHECK_TIMEOUT }}" + UNMOUNT_RETRY_COUNT: "{{ .Values.env.UNMOUNT_RETRY_COUNT }}" + UNMOUNT_RETRY_INTERVAL: "{{ .Values.env.UNMOUNT_RETRY_INTERVAL }}" \ No newline at end of file diff --git a/deploy/helm/hammerspace-helm-chart/templates/controller/rbac.yaml b/deploy/helm/hammerspace-helm-chart/templates/controller/rbac.yaml new file mode 100644 index 0000000..d953e9a --- /dev/null +++ b/deploy/helm/hammerspace-helm-chart/templates/controller/rbac.yaml @@ -0,0 +1,94 @@ +# This file is part of the Hammerspace CSI Driver project. +# It defines the RBAC roles and bindings for the CSI provisioner component. +# The provisioner is responsible for creating and managing PersistentVolumes +# based on PersistentVolumeClaims in Kubernetes. +apiVersion: v1 +kind: ServiceAccount +metadata: + name: csi-provisioner + namespace: {{ .Values.namespace }} +--- +# This ClusterRole defines the permissions required by the CSI provisioner. +# It allows the provisioner to manage PersistentVolumes, PersistentVolumeClaims, +# and other related resources in the Kubernetes cluster. +# It also allows the provisioner to interact with storage classes and volume snapshots. +# The ClusterRole is bound to the csi-provisioner ServiceAccount. +# This ClusterRoleBinding binds the csi-provisioner ServiceAccount to the csi-provisioner ClusterRole. +# This allows the provisioner to perform the actions defined in the ClusterRole. +# The ClusterRoleBinding is created in the same namespace as the provisioner ServiceAccount. +# The ClusterRoleBinding is necessary for the provisioner to have the required permissions +# to manage storage resources in the cluster. +# The ClusterRoleBinding is created in the same namespace as the provisioner ServiceAccount. +# This ClusterRoleBinding is specifically for the provisioner to manage volume attachments. +# It allows the provisioner to update the status of volume attachments. +# This is necessary for the provisioner to properly manage the lifecycle of volumes +# and ensure that they are correctly attached to nodes. +# The ClusterRoleBinding is created in the same namespace as the provisioner ServiceAccount. +# This ClusterRoleBinding is specifically for the provisioner to manage volume attachment status. +# It allows the provisioner to update the status of volume attachments. +# This is necessary for the provisioner to properly manage the lifecycle of volumes +# and ensure that they are correctly attached to nodes. +# The ClusterRoleBinding is created in the same namespace as the provisioner ServiceAccount. +# The ClusterRoleBinding is necessary for the provisioner to have the required permissions +# to manage storage resources in the cluster. + +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: csi-provisioner +rules: + - apiGroups: [""] + resources: ["pods", "persistentvolumes", "persistentvolumeclaims", "nodes", "events", "endpoints", "secrets"] + verbs: ["list", "watch", "get", "create", "delete", "update", "patch"] + - apiGroups: ["storage.k8s.io", "snapshot.storage.k8s.io", "apiextensions.k8s.io"] + resources: ["storageclasses", "volumeattachments", "volumeattachments/status", "volumesnapshotcontents/status", "volumesnapshots", "volumesnapshotcontents", "volumesnapshotclasses", "customresourcedefinitions"] + verbs: ["get", "list", "watch", "create", "update", "patch", "delete"] +--- +# This ClusterRoleBinding binds the csi-provisioner ServiceAccount to the csi-provisioner ClusterRole. +# It allows the provisioner to perform the actions defined in the ClusterRole. +# The ClusterRoleBinding is created in the same namespace as the provisioner ServiceAccount. +# This ClusterRoleBinding is necessary for the provisioner to have the required permissions +# to manage storage resources in the cluster. +# The ClusterRoleBinding is created in the same namespace as the provisioner ServiceAccount. +# This ClusterRoleBinding is specifically for the provisioner to manage volume attachments. +# It allows the provisioner to update the status of volume attachments. +# This is necessary for the provisioner to properly manage the lifecycle of volumes +# and ensure that they are correctly attached to nodes. +# The ClusterRoleBinding is created in the same namespace as the provisioner ServiceAccount. +# This ClusterRoleBinding is specifically for the provisioner to manage volume attachment status. +# It allows the provisioner to update the status of volume attachments. +# This is necessary for the provisioner to properly manage the lifecycle of volumes +# and ensure that they are correctly attached to nodes. +# The ClusterRoleBinding is created in the same namespace as the provisioner ServiceAccount. +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: csi-provisioner-binding +subjects: + - kind: ServiceAccount + name: csi-provisioner + namespace: {{ .Values.namespace }} +roleRef: + kind: ClusterRole + name: csi-provisioner + apiGroup: rbac.authorization.k8s.io +--- +# This ClusterRoleBinding is specifically for the provisioner to manage volume attachment status. +# It allows the provisioner to update the status of volume attachments. +# This is necessary for the provisioner to properly manage the lifecycle of volumes +# and ensure that they are correctly attached to nodes. +# The ClusterRoleBinding is created in the same namespace as the provisioner ServiceAccount. +# This ClusterRoleBinding is necessary for the provisioner to have the required permissions +# to manage storage resources in the cluster. +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: csi-provisioner +subjects: + - kind: ServiceAccount + name: csi-provisioner + namespace: {{ .Values.namespace }} +roleRef: + kind: ClusterRole + name: csi-provisioner + apiGroup: rbac.authorization.k8s.io diff --git a/deploy/helm/hammerspace-helm-chart/templates/controller/service.yaml b/deploy/helm/hammerspace-helm-chart/templates/controller/service.yaml new file mode 100644 index 0000000..4ecc4f5 --- /dev/null +++ b/deploy/helm/hammerspace-helm-chart/templates/controller/service.yaml @@ -0,0 +1,24 @@ +# This file is part of the Hammerspace CSI Driver Helm Chart. +# It defines the service for the CSI provisioner component. +# The service is a headless service that allows the StatefulSet to manage the pods. +kind: Service +apiVersion: v1 +metadata: + name: csi-provisioner + namespace: {{ .Values.namespace }} + labels: + app: csi-provisioner +spec: + type: ClusterIP + clusterIP: None + # This is needed for the StatefulSet to work properly + # as it uses a headless service to manage the pods. + # The StatefulSet will create a DNS entry for the pods + # in the format ...svc.cluster.local + # where is the name of the pod, is the name of the service, + # and is the namespace of the service. + # This allows the pods to communicate with each other using DNS. + # The StatefulSet will also create a DNS entry for the service in the format ..svc.cluster.local + # which allows the pods to communicate with the service + selector: + app: csi-provisioner \ No newline at end of file diff --git a/deploy/helm/hammerspace-helm-chart/templates/controller/statefulset.yaml b/deploy/helm/hammerspace-helm-chart/templates/controller/statefulset.yaml new file mode 100644 index 0000000..56e8618 --- /dev/null +++ b/deploy/helm/hammerspace-helm-chart/templates/controller/statefulset.yaml @@ -0,0 +1,113 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: csi-provisioner + namespace: {{ .Values.namespace }} +spec: + serviceName: "csi-provisioner" + replicas: {{ .Values.controller.replicas }} + selector: + matchLabels: + app: csi-provisioner + template: + metadata: + labels: + app: csi-provisioner + spec: + serviceAccountName: csi-provisioner + hostNetwork: true + containers: + - name: csi-provisioner + imagePullPolicy: Always + image: {{ .Values.image.provisioner }} + args: + - "--csi-address=$(CSI_ENDPOINT)" + - "--timeout=60s" # Recommended as shares may take some time to create + - "--v=5" + env: + - name: CSI_ENDPOINT + value: /var/lib/csi/hs-csi.sock + volumeMounts: + - name: socket-dir + mountPath: /var/lib/csi/ + - name: csi-attacher + imagePullPolicy: Always + image: {{ .Values.image.attacher }} + args: + - "--csi-address=$(CSI_ENDPOINT)" + - "--v=5" + env: + - name: CSI_ENDPOINT + value: /var/lib/csi/hs-csi.sock + volumeMounts: + - name: socket-dir + mountPath: /var/lib/csi/ + - name: csi-snapshotter + imagePullPolicy: Always + image: {{ .Values.image.snapshotter }} + args: + - "--csi-address=$(CSI_ENDPOINT)" + - "--v=5" + env: + - name: CSI_ENDPOINT + value: /var/lib/csi/hs-csi.sock + volumeMounts: + - name: socket-dir + mountPath: /var/lib/csi/ + - name: csi-resizer + imagePullPolicy: Always + image: {{ .Values.image.resizer }} + args: + - "--csi-address=$(CSI_ENDPOINT)" + - "--v=5" + env: + - name: CSI_ENDPOINT + value: /var/lib/csi/hs-csi.sock + volumeMounts: + - name: socket-dir + mountPath: /var/lib/csi/ + - name: hs-csi-plugin-controller + securityContext: + privileged: true + capabilities: + add: ["SYS_ADMIN"] + allowPrivilegeEscalation: true + imagePullPolicy: Always + image: {{ .Values.image.csiPlugin }} + envFrom: + - configMapRef: + name: csi-env-config + env: + - name: CSI_ENDPOINT + value: /var/lib/csi/hs-csi.sock + - name: HS_USERNAME + valueFrom: + secretKeyRef: + name: com.hammerspace.csi.credentials + key: username + - name: HS_PASSWORD + valueFrom: + secretKeyRef: + name: com.hammerspace.csi.credentials + key: password + - name: HS_ENDPOINT + valueFrom: + secretKeyRef: + name: com.hammerspace.csi.credentials + key: endpoint + - name: HS_TLS_VERIFY + value: "false" + - name: CSI_MAJOR_VERSION + value: "1" + volumeMounts: + - name: socket-dir + mountPath: /var/lib/csi/ + - name: staging-dir + mountPath: /tmp + mountPropagation: Bidirectional + volumes: + - name: socket-dir + emptyDir: {} + - name: staging-dir + hostPath: + path: /tmp \ No newline at end of file diff --git a/deploy/helm/hammerspace-helm-chart/templates/csidriver.yaml b/deploy/helm/hammerspace-helm-chart/templates/csidriver.yaml new file mode 100644 index 0000000..65229a0 --- /dev/null +++ b/deploy/helm/hammerspace-helm-chart/templates/csidriver.yaml @@ -0,0 +1,10 @@ +apiVersion: storage.k8s.io/v1 +kind: CSIDriver +metadata: + name: com.hammerspace.csi +spec: + podInfoOnMount: true + requiresRepublish: true + volumeLifecycleModes: + - Persistent + storageCapacity: true \ No newline at end of file diff --git a/deploy/helm/hammerspace-helm-chart/templates/node/daemonset.yaml b/deploy/helm/hammerspace-helm-chart/templates/node/daemonset.yaml new file mode 100644 index 0000000..904159b --- /dev/null +++ b/deploy/helm/hammerspace-helm-chart/templates/node/daemonset.yaml @@ -0,0 +1,125 @@ +apiVersion: apps/v1 +kind: DaemonSet +metadata: + name: csi-node + namespace: {{ .Values.namespace }} +spec: + selector: + matchLabels: + app: csi-node + template: + metadata: + labels: + app: csi-node + spec: + serviceAccount: csi-node + hostNetwork: true + containers: + - name: csi-resizer + imagePullPolicy: Always + image: {{ .Values.image.resizer }} + args: + - "--csi-address=$(CSI_ENDPOINT)" + - "--v=5" + env: + - name: CSI_ENDPOINT + value: /csi/csi.sock + volumeMounts: + - name: socket-dir + mountPath: /csi + - name: driver-registrar + imagePullPolicy: Always + image: {{ .Values.image.registrar }} + lifecycle: + preStop: + exec: + command: ["/bin/sh", "-c", '[ -n "$REG_SOCKET" ] && rm -rf "$REG_SOCKET" || echo "REG_SOCKET not set, skipping delete"'] + args: + - "--v=5" + - "--csi-address=$(CSI_ENDPOINT)" + - "--kubelet-registration-path=$(REG_SOCKET)" + securityContext: + privileged: true + env: + - name: CSI_ENDPOINT + value: /csi/csi.sock + - name: REG_SOCKET + value: /var/lib/kubelet/plugins_registry/com.hammerspace.csi/csi.sock + - name: KUBE_NODE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: spec.nodeName + volumeMounts: + - name: socket-dir + mountPath: /csi + - name: registration-dir + mountPath: /registration + - name: hs-csi-plugin-node + securityContext: + privileged: true + capabilities: + add: ["SYS_ADMIN"] + allowPrivilegeEscalation: true + imagePullPolicy: Always + image: {{ .Values.image.csiPlugin }} + envFrom: + - configMapRef: + name: csi-env-config + env: + - name: CSI_ENDPOINT + value: /csi/csi.sock + - name: HS_USERNAME + valueFrom: + secretKeyRef: + name: com.hammerspace.csi.credentials + key: username + - name: HS_PASSWORD + valueFrom: + secretKeyRef: + name: com.hammerspace.csi.credentials + key: password + - name: HS_ENDPOINT + valueFrom: + secretKeyRef: + name: com.hammerspace.csi.credentials + key: endpoint + - name: CSI_NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + - name: HS_TLS_VERIFY + value: "false" + - name: CSI_MAJOR_VERSION + value: "1" + volumeMounts: + - name: socket-dir + mountPath: /csi + - name: registration-dir + mountPath: /registration + mountPropagation: Bidirectional + - name: mountpoint-dir + mountPath: /var/lib/kubelet/ + mountPropagation: Bidirectional + - name: dev-dir + mountPath: /dev + - name: staging-dir + mountPath: /tmp + mountPropagation: Bidirectional + volumes: + - name: socket-dir + hostPath: + path: /var/lib/kubelet/plugins_registry/com.hammerspace.csi + type: DirectoryOrCreate + - name: mountpoint-dir + hostPath: + path: /var/lib/kubelet/ + - name: registration-dir + hostPath: + path: /var/lib/kubelet/plugins_registry/ + - name: dev-dir + hostPath: + path: /dev + - name: staging-dir + hostPath: + path: /tmp \ No newline at end of file diff --git a/deploy/helm/hammerspace-helm-chart/templates/node/rbac.yaml b/deploy/helm/hammerspace-helm-chart/templates/node/rbac.yaml new file mode 100644 index 0000000..bad30fe --- /dev/null +++ b/deploy/helm/hammerspace-helm-chart/templates/node/rbac.yaml @@ -0,0 +1,43 @@ +apiVersion: v1 +kind: ServiceAccount +metadata: + name: csi-node + namespace: {{ .Values.namespace }} +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: csi-node +rules: + - apiGroups: [""] + resources: ["pods", "secrets", "nodes", "namespaces", "events", "persistentvolumes", "persistentvolumeclaims", "persistentvolumeclaims/status"] + verbs: ["get", "list", "create", "watch", "update", "patch"] + - apiGroups: ["storage.k8s.io"] + resources: ["volumeattachments", "volumeattachments/status"] + verbs: ["get", "list", "watch", "create", "update", "patch"] +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: csi-node +subjects: + - kind: ServiceAccount + name: csi-node + namespace: {{ .Values.namespace }} +roleRef: + kind: ClusterRole + name: csi-node + apiGroup: rbac.authorization.k8s.io +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: csi-provisioner-volumeattachment-status-binding +subjects: + - kind: ServiceAccount + name: csi-provisioner + namespace: {{ .Values.namespace }} +roleRef: + kind: ClusterRole + name: csi-provisioner + apiGroup: rbac.authorization.k8s.io diff --git a/deploy/helm/hammerspace-helm-chart/values.yaml b/deploy/helm/hammerspace-helm-chart/values.yaml new file mode 100644 index 0000000..454ca68 --- /dev/null +++ b/deploy/helm/hammerspace-helm-chart/values.yaml @@ -0,0 +1,21 @@ +namespace: kube-system + +credentialsSecretName: com.hammerspace.csi.credentials +# +env: + MOUNT_CHECK_TIMEOUT: "30s" + UNMOUNT_RETRY_COUNT: "5" + UNMOUNT_RETRY_INTERVAL: "1s" +# +image: + csiPlugin: hammerspaceinc/csi-plugin:v1.2.7 + provisioner: registry.k8s.io/sig-storage/csi-provisioner:v3.6.0 + attacher: registry.k8s.io/sig-storage/csi-attacher:v4.4.0 + snapshotter: registry.k8s.io/sig-storage/csi-snapshotter:v8.1.0 + resizer: registry.k8s.io/sig-storage/csi-resizer:v1.10.1 + registrar: registry.k8s.io/sig-storage/csi-node-driver-registrar:v2.9.0 +# +controller: + replicas: 1 + + diff --git a/deploy/helm/repo/artifacthub-repo.yaml b/deploy/helm/repo/artifacthub-repo.yaml new file mode 100644 index 0000000..9c8a793 --- /dev/null +++ b/deploy/helm/repo/artifacthub-repo.yaml @@ -0,0 +1,5 @@ +repositoryID: ba19dd93-de8e-41da-b66c-4f5c557ee0f3 # use `uuidgen` to generate +name: hammerspace-csi-chart +displayName: Hammerspace CSI Helm Chart +description: Helm chart for deploying the Hammerspace CSI plugin +url: https://github.com/hammer-space/csi-plugin/deploy/helm/repo \ No newline at end of file diff --git a/deploy/helm/repo/hammerspace-csi-1.2.7.tgz b/deploy/helm/repo/hammerspace-csi-1.2.7.tgz new file mode 100644 index 0000000000000000000000000000000000000000..1c43e8eb051d7b5178cbc51b74fc525a2e629b99 GIT binary patch literal 3091 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 literal 0 HcmV?d00001 diff --git a/deploy/helm/repo/index.yaml b/deploy/helm/repo/index.yaml new file mode 100644 index 0000000..d3885f2 --- /dev/null +++ b/deploy/helm/repo/index.yaml @@ -0,0 +1,14 @@ +apiVersion: v1 +entries: + hammerspace-csi: + - apiVersion: v2 + appVersion: v1.2.7 + created: "2025-07-26T13:17:36.286403765+05:30" + description: A Helm chart for the Hammerspace CSI driver + digest: 342c39ef85e06e4ed13fdb2d392bcafbb73e64525e0036f15644d0af35f6412f + icon: https://www.hammerspace.com/favicon.ico + name: hammerspace-csi + urls: + - hammerspace-csi-1.2.7.tgz + version: 1.2.7 +generated: "2025-07-26T13:17:36.276227188+05:30" From 8c8e8161eb75707397cb97abbc877a222b129fb1 Mon Sep 17 00:00:00 2001 From: Ravi Kumar Date: Fri, 1 Aug 2025 17:09:04 +0530 Subject: [PATCH 2/6] V1.2.7-Helm chart 1. Reverted some non usefull changes. Will add up in v1.2.8. --- pkg/common/host_utils.go | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/pkg/common/host_utils.go b/pkg/common/host_utils.go index a519af3..3bd2feb 100644 --- a/pkg/common/host_utils.go +++ b/pkg/common/host_utils.go @@ -40,24 +40,6 @@ import ( const LOOP_CTL_GET_FREE = 0x4C82 -var ( - defaultMountCheckTimeout time.Duration = 50 * time.Second // Default timeout for checking mount status -) - -func init() { - // Read environment variables for mount check timeout - mountCheckTimeoutStr := os.Getenv("MOUNT_CHECK_TIMEOUT") - if mountCheckTimeoutStr != "" { - if timeout, err := time.ParseDuration(mountCheckTimeoutStr); err == nil && timeout > 0 { - defaultMountCheckTimeout = timeout - } else { - log.Warnf("Invalid MOUNT_CHECK_TIMEOUT=%s; using default %s", mountCheckTimeoutStr, defaultMountCheckTimeout) - } - } - - log.Infof("mountCheckTimeout=%s", defaultMountCheckTimeout) -} - func execCommandHelper(command string, args ...string) ([]byte, error) { cmd := exec.Command(command, args...) log.Debugf("Executing command: %v", cmd) From b6815281ac8f9255087bfc603cf5c79fc81368df Mon Sep 17 00:00:00 2001 From: Ravi Kumar Date: Wed, 20 Aug 2025 21:39:06 +0530 Subject: [PATCH 3/6] Added v1.2.8 helm chart with new update of container version. --- deploy/helm/README.md | 9 +- deploy/helm/repo/index.yaml | 16 ++- .../{ => v1.2.7}/hammerspace-csi-1.2.7.tgz | Bin .../v1.2.7}/hammerspace-helm-chart/Chart.yaml | 0 .../templates/configmap.yaml | 0 .../templates/controller/rbac.yaml | 0 .../templates/controller/service.yaml | 0 .../templates/controller/statefulset.yaml | 0 .../templates/csidriver.yaml | 0 .../templates/node/daemonset.yaml | 0 .../templates/node/rbac.yaml | 0 .../hammerspace-helm-chart/values.yaml | 0 .../repo/v1.2.8/hammerspace-csi-1.2.8.tgz | Bin 0 -> 3137 bytes .../v1.2.8/hammerspace-helm-chart/Chart.yaml | 6 + .../templates/configmap.yaml | 9 ++ .../templates/controller/rbac.yaml | 94 ++++++++++++++ .../templates/controller/service.yaml | 24 ++++ .../templates/controller/statefulset.yaml | 113 +++++++++++++++++ .../templates/csidriver.yaml | 10 ++ .../templates/node/daemonset.yaml | 120 ++++++++++++++++++ .../templates/node/rbac.yaml | 43 +++++++ .../v1.2.8/hammerspace-helm-chart/values.yaml | 21 +++ 22 files changed, 457 insertions(+), 8 deletions(-) rename deploy/helm/repo/{ => v1.2.7}/hammerspace-csi-1.2.7.tgz (100%) rename deploy/helm/{ => repo/v1.2.7}/hammerspace-helm-chart/Chart.yaml (100%) rename deploy/helm/{ => repo/v1.2.7}/hammerspace-helm-chart/templates/configmap.yaml (100%) rename deploy/helm/{ => repo/v1.2.7}/hammerspace-helm-chart/templates/controller/rbac.yaml (100%) rename deploy/helm/{ => repo/v1.2.7}/hammerspace-helm-chart/templates/controller/service.yaml (100%) rename deploy/helm/{ => repo/v1.2.7}/hammerspace-helm-chart/templates/controller/statefulset.yaml (100%) rename deploy/helm/{ => repo/v1.2.7}/hammerspace-helm-chart/templates/csidriver.yaml (100%) rename deploy/helm/{ => repo/v1.2.7}/hammerspace-helm-chart/templates/node/daemonset.yaml (100%) rename deploy/helm/{ => repo/v1.2.7}/hammerspace-helm-chart/templates/node/rbac.yaml (100%) rename deploy/helm/{ => repo/v1.2.7}/hammerspace-helm-chart/values.yaml (100%) create mode 100644 deploy/helm/repo/v1.2.8/hammerspace-csi-1.2.8.tgz create mode 100644 deploy/helm/repo/v1.2.8/hammerspace-helm-chart/Chart.yaml create mode 100644 deploy/helm/repo/v1.2.8/hammerspace-helm-chart/templates/configmap.yaml create mode 100644 deploy/helm/repo/v1.2.8/hammerspace-helm-chart/templates/controller/rbac.yaml create mode 100644 deploy/helm/repo/v1.2.8/hammerspace-helm-chart/templates/controller/service.yaml create mode 100644 deploy/helm/repo/v1.2.8/hammerspace-helm-chart/templates/controller/statefulset.yaml create mode 100644 deploy/helm/repo/v1.2.8/hammerspace-helm-chart/templates/csidriver.yaml create mode 100644 deploy/helm/repo/v1.2.8/hammerspace-helm-chart/templates/node/daemonset.yaml create mode 100644 deploy/helm/repo/v1.2.8/hammerspace-helm-chart/templates/node/rbac.yaml create mode 100644 deploy/helm/repo/v1.2.8/hammerspace-helm-chart/values.yaml diff --git a/deploy/helm/README.md b/deploy/helm/README.md index a84f576..edc5421 100644 --- a/deploy/helm/README.md +++ b/deploy/helm/README.md @@ -21,17 +21,16 @@ This repository provides Helm charts to deploy the Hammerspace CSI driver compon #### Navigate to the chart directory: ``` -cd deploy/helm/hammerspace-helm-chart +cd deploy/helm/repo/v1.2.8 ``` #### Create new package ``` -helm package . +helm package ./hammerspace-helm-chart/ ``` -#### Move the .tgz to your repo directory (e.g., deploy/helm/repo/) and regenerate the index.yaml: +#### Update the index.yaml ``` -mv hammerspace-csi-.tgz ../../repo/ -cd ../../repo +cd ../repo helm repo index . ``` diff --git a/deploy/helm/repo/index.yaml b/deploy/helm/repo/index.yaml index d3885f2..0db0c87 100644 --- a/deploy/helm/repo/index.yaml +++ b/deploy/helm/repo/index.yaml @@ -1,14 +1,24 @@ apiVersion: v1 entries: hammerspace-csi: + - apiVersion: v2 + appVersion: v1.2.8 + created: "2025-08-20T21:34:38.923368821+05:30" + description: A Helm chart for the Hammerspace CSI driver + digest: 72a409136455142bbd25bb12e47282c4251077de7465849bb09274a47beee921 + icon: https://www.hammerspace.com/favicon.ico + name: hammerspace-csi + urls: + - v1.2.8/hammerspace-csi-1.2.8.tgz + version: 1.2.8 - apiVersion: v2 appVersion: v1.2.7 - created: "2025-07-26T13:17:36.286403765+05:30" + created: "2025-08-20T21:34:38.900138837+05:30" description: A Helm chart for the Hammerspace CSI driver digest: 342c39ef85e06e4ed13fdb2d392bcafbb73e64525e0036f15644d0af35f6412f icon: https://www.hammerspace.com/favicon.ico name: hammerspace-csi urls: - - hammerspace-csi-1.2.7.tgz + - v1.2.7/hammerspace-csi-1.2.7.tgz version: 1.2.7 -generated: "2025-07-26T13:17:36.276227188+05:30" +generated: "2025-08-20T21:34:38.875046754+05:30" diff --git a/deploy/helm/repo/hammerspace-csi-1.2.7.tgz b/deploy/helm/repo/v1.2.7/hammerspace-csi-1.2.7.tgz similarity index 100% rename from deploy/helm/repo/hammerspace-csi-1.2.7.tgz rename to deploy/helm/repo/v1.2.7/hammerspace-csi-1.2.7.tgz diff --git a/deploy/helm/hammerspace-helm-chart/Chart.yaml b/deploy/helm/repo/v1.2.7/hammerspace-helm-chart/Chart.yaml similarity index 100% rename from deploy/helm/hammerspace-helm-chart/Chart.yaml rename to deploy/helm/repo/v1.2.7/hammerspace-helm-chart/Chart.yaml diff --git a/deploy/helm/hammerspace-helm-chart/templates/configmap.yaml b/deploy/helm/repo/v1.2.7/hammerspace-helm-chart/templates/configmap.yaml similarity index 100% rename from deploy/helm/hammerspace-helm-chart/templates/configmap.yaml rename to deploy/helm/repo/v1.2.7/hammerspace-helm-chart/templates/configmap.yaml diff --git a/deploy/helm/hammerspace-helm-chart/templates/controller/rbac.yaml b/deploy/helm/repo/v1.2.7/hammerspace-helm-chart/templates/controller/rbac.yaml similarity index 100% rename from deploy/helm/hammerspace-helm-chart/templates/controller/rbac.yaml rename to deploy/helm/repo/v1.2.7/hammerspace-helm-chart/templates/controller/rbac.yaml diff --git a/deploy/helm/hammerspace-helm-chart/templates/controller/service.yaml b/deploy/helm/repo/v1.2.7/hammerspace-helm-chart/templates/controller/service.yaml similarity index 100% rename from deploy/helm/hammerspace-helm-chart/templates/controller/service.yaml rename to deploy/helm/repo/v1.2.7/hammerspace-helm-chart/templates/controller/service.yaml diff --git a/deploy/helm/hammerspace-helm-chart/templates/controller/statefulset.yaml b/deploy/helm/repo/v1.2.7/hammerspace-helm-chart/templates/controller/statefulset.yaml similarity index 100% rename from deploy/helm/hammerspace-helm-chart/templates/controller/statefulset.yaml rename to deploy/helm/repo/v1.2.7/hammerspace-helm-chart/templates/controller/statefulset.yaml diff --git a/deploy/helm/hammerspace-helm-chart/templates/csidriver.yaml b/deploy/helm/repo/v1.2.7/hammerspace-helm-chart/templates/csidriver.yaml similarity index 100% rename from deploy/helm/hammerspace-helm-chart/templates/csidriver.yaml rename to deploy/helm/repo/v1.2.7/hammerspace-helm-chart/templates/csidriver.yaml diff --git a/deploy/helm/hammerspace-helm-chart/templates/node/daemonset.yaml b/deploy/helm/repo/v1.2.7/hammerspace-helm-chart/templates/node/daemonset.yaml similarity index 100% rename from deploy/helm/hammerspace-helm-chart/templates/node/daemonset.yaml rename to deploy/helm/repo/v1.2.7/hammerspace-helm-chart/templates/node/daemonset.yaml diff --git a/deploy/helm/hammerspace-helm-chart/templates/node/rbac.yaml b/deploy/helm/repo/v1.2.7/hammerspace-helm-chart/templates/node/rbac.yaml similarity index 100% rename from deploy/helm/hammerspace-helm-chart/templates/node/rbac.yaml rename to deploy/helm/repo/v1.2.7/hammerspace-helm-chart/templates/node/rbac.yaml diff --git a/deploy/helm/hammerspace-helm-chart/values.yaml b/deploy/helm/repo/v1.2.7/hammerspace-helm-chart/values.yaml similarity index 100% rename from deploy/helm/hammerspace-helm-chart/values.yaml rename to deploy/helm/repo/v1.2.7/hammerspace-helm-chart/values.yaml diff --git a/deploy/helm/repo/v1.2.8/hammerspace-csi-1.2.8.tgz b/deploy/helm/repo/v1.2.8/hammerspace-csi-1.2.8.tgz new file mode 100644 index 0000000000000000000000000000000000000000..d62889da0e1136a0ad9ca356a1ee27ddd0c99a74 GIT binary patch literal 3137 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 literal 0 HcmV?d00001 diff --git a/deploy/helm/repo/v1.2.8/hammerspace-helm-chart/Chart.yaml b/deploy/helm/repo/v1.2.8/hammerspace-helm-chart/Chart.yaml new file mode 100644 index 0000000..f4c4770 --- /dev/null +++ b/deploy/helm/repo/v1.2.8/hammerspace-helm-chart/Chart.yaml @@ -0,0 +1,6 @@ +apiVersion: v2 +name: hammerspace-csi +description: A Helm chart for the Hammerspace CSI driver +version: 1.2.8 +appVersion: "v1.2.8" +icon: https://www.hammerspace.com/favicon.ico diff --git a/deploy/helm/repo/v1.2.8/hammerspace-helm-chart/templates/configmap.yaml b/deploy/helm/repo/v1.2.8/hammerspace-helm-chart/templates/configmap.yaml new file mode 100644 index 0000000..218ddd5 --- /dev/null +++ b/deploy/helm/repo/v1.2.8/hammerspace-helm-chart/templates/configmap.yaml @@ -0,0 +1,9 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: csi-env-config + namespace: {{ .Values.namespace | default "kube-system" }} +data: + MOUNT_CHECK_TIMEOUT: "{{ .Values.env.MOUNT_CHECK_TIMEOUT }}" + UNMOUNT_RETRY_COUNT: "{{ .Values.env.UNMOUNT_RETRY_COUNT }}" + UNMOUNT_RETRY_INTERVAL: "{{ .Values.env.UNMOUNT_RETRY_INTERVAL }}" \ No newline at end of file diff --git a/deploy/helm/repo/v1.2.8/hammerspace-helm-chart/templates/controller/rbac.yaml b/deploy/helm/repo/v1.2.8/hammerspace-helm-chart/templates/controller/rbac.yaml new file mode 100644 index 0000000..d953e9a --- /dev/null +++ b/deploy/helm/repo/v1.2.8/hammerspace-helm-chart/templates/controller/rbac.yaml @@ -0,0 +1,94 @@ +# This file is part of the Hammerspace CSI Driver project. +# It defines the RBAC roles and bindings for the CSI provisioner component. +# The provisioner is responsible for creating and managing PersistentVolumes +# based on PersistentVolumeClaims in Kubernetes. +apiVersion: v1 +kind: ServiceAccount +metadata: + name: csi-provisioner + namespace: {{ .Values.namespace }} +--- +# This ClusterRole defines the permissions required by the CSI provisioner. +# It allows the provisioner to manage PersistentVolumes, PersistentVolumeClaims, +# and other related resources in the Kubernetes cluster. +# It also allows the provisioner to interact with storage classes and volume snapshots. +# The ClusterRole is bound to the csi-provisioner ServiceAccount. +# This ClusterRoleBinding binds the csi-provisioner ServiceAccount to the csi-provisioner ClusterRole. +# This allows the provisioner to perform the actions defined in the ClusterRole. +# The ClusterRoleBinding is created in the same namespace as the provisioner ServiceAccount. +# The ClusterRoleBinding is necessary for the provisioner to have the required permissions +# to manage storage resources in the cluster. +# The ClusterRoleBinding is created in the same namespace as the provisioner ServiceAccount. +# This ClusterRoleBinding is specifically for the provisioner to manage volume attachments. +# It allows the provisioner to update the status of volume attachments. +# This is necessary for the provisioner to properly manage the lifecycle of volumes +# and ensure that they are correctly attached to nodes. +# The ClusterRoleBinding is created in the same namespace as the provisioner ServiceAccount. +# This ClusterRoleBinding is specifically for the provisioner to manage volume attachment status. +# It allows the provisioner to update the status of volume attachments. +# This is necessary for the provisioner to properly manage the lifecycle of volumes +# and ensure that they are correctly attached to nodes. +# The ClusterRoleBinding is created in the same namespace as the provisioner ServiceAccount. +# The ClusterRoleBinding is necessary for the provisioner to have the required permissions +# to manage storage resources in the cluster. + +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: csi-provisioner +rules: + - apiGroups: [""] + resources: ["pods", "persistentvolumes", "persistentvolumeclaims", "nodes", "events", "endpoints", "secrets"] + verbs: ["list", "watch", "get", "create", "delete", "update", "patch"] + - apiGroups: ["storage.k8s.io", "snapshot.storage.k8s.io", "apiextensions.k8s.io"] + resources: ["storageclasses", "volumeattachments", "volumeattachments/status", "volumesnapshotcontents/status", "volumesnapshots", "volumesnapshotcontents", "volumesnapshotclasses", "customresourcedefinitions"] + verbs: ["get", "list", "watch", "create", "update", "patch", "delete"] +--- +# This ClusterRoleBinding binds the csi-provisioner ServiceAccount to the csi-provisioner ClusterRole. +# It allows the provisioner to perform the actions defined in the ClusterRole. +# The ClusterRoleBinding is created in the same namespace as the provisioner ServiceAccount. +# This ClusterRoleBinding is necessary for the provisioner to have the required permissions +# to manage storage resources in the cluster. +# The ClusterRoleBinding is created in the same namespace as the provisioner ServiceAccount. +# This ClusterRoleBinding is specifically for the provisioner to manage volume attachments. +# It allows the provisioner to update the status of volume attachments. +# This is necessary for the provisioner to properly manage the lifecycle of volumes +# and ensure that they are correctly attached to nodes. +# The ClusterRoleBinding is created in the same namespace as the provisioner ServiceAccount. +# This ClusterRoleBinding is specifically for the provisioner to manage volume attachment status. +# It allows the provisioner to update the status of volume attachments. +# This is necessary for the provisioner to properly manage the lifecycle of volumes +# and ensure that they are correctly attached to nodes. +# The ClusterRoleBinding is created in the same namespace as the provisioner ServiceAccount. +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: csi-provisioner-binding +subjects: + - kind: ServiceAccount + name: csi-provisioner + namespace: {{ .Values.namespace }} +roleRef: + kind: ClusterRole + name: csi-provisioner + apiGroup: rbac.authorization.k8s.io +--- +# This ClusterRoleBinding is specifically for the provisioner to manage volume attachment status. +# It allows the provisioner to update the status of volume attachments. +# This is necessary for the provisioner to properly manage the lifecycle of volumes +# and ensure that they are correctly attached to nodes. +# The ClusterRoleBinding is created in the same namespace as the provisioner ServiceAccount. +# This ClusterRoleBinding is necessary for the provisioner to have the required permissions +# to manage storage resources in the cluster. +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: csi-provisioner +subjects: + - kind: ServiceAccount + name: csi-provisioner + namespace: {{ .Values.namespace }} +roleRef: + kind: ClusterRole + name: csi-provisioner + apiGroup: rbac.authorization.k8s.io diff --git a/deploy/helm/repo/v1.2.8/hammerspace-helm-chart/templates/controller/service.yaml b/deploy/helm/repo/v1.2.8/hammerspace-helm-chart/templates/controller/service.yaml new file mode 100644 index 0000000..4ecc4f5 --- /dev/null +++ b/deploy/helm/repo/v1.2.8/hammerspace-helm-chart/templates/controller/service.yaml @@ -0,0 +1,24 @@ +# This file is part of the Hammerspace CSI Driver Helm Chart. +# It defines the service for the CSI provisioner component. +# The service is a headless service that allows the StatefulSet to manage the pods. +kind: Service +apiVersion: v1 +metadata: + name: csi-provisioner + namespace: {{ .Values.namespace }} + labels: + app: csi-provisioner +spec: + type: ClusterIP + clusterIP: None + # This is needed for the StatefulSet to work properly + # as it uses a headless service to manage the pods. + # The StatefulSet will create a DNS entry for the pods + # in the format ...svc.cluster.local + # where is the name of the pod, is the name of the service, + # and is the namespace of the service. + # This allows the pods to communicate with each other using DNS. + # The StatefulSet will also create a DNS entry for the service in the format ..svc.cluster.local + # which allows the pods to communicate with the service + selector: + app: csi-provisioner \ No newline at end of file diff --git a/deploy/helm/repo/v1.2.8/hammerspace-helm-chart/templates/controller/statefulset.yaml b/deploy/helm/repo/v1.2.8/hammerspace-helm-chart/templates/controller/statefulset.yaml new file mode 100644 index 0000000..56e8618 --- /dev/null +++ b/deploy/helm/repo/v1.2.8/hammerspace-helm-chart/templates/controller/statefulset.yaml @@ -0,0 +1,113 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: csi-provisioner + namespace: {{ .Values.namespace }} +spec: + serviceName: "csi-provisioner" + replicas: {{ .Values.controller.replicas }} + selector: + matchLabels: + app: csi-provisioner + template: + metadata: + labels: + app: csi-provisioner + spec: + serviceAccountName: csi-provisioner + hostNetwork: true + containers: + - name: csi-provisioner + imagePullPolicy: Always + image: {{ .Values.image.provisioner }} + args: + - "--csi-address=$(CSI_ENDPOINT)" + - "--timeout=60s" # Recommended as shares may take some time to create + - "--v=5" + env: + - name: CSI_ENDPOINT + value: /var/lib/csi/hs-csi.sock + volumeMounts: + - name: socket-dir + mountPath: /var/lib/csi/ + - name: csi-attacher + imagePullPolicy: Always + image: {{ .Values.image.attacher }} + args: + - "--csi-address=$(CSI_ENDPOINT)" + - "--v=5" + env: + - name: CSI_ENDPOINT + value: /var/lib/csi/hs-csi.sock + volumeMounts: + - name: socket-dir + mountPath: /var/lib/csi/ + - name: csi-snapshotter + imagePullPolicy: Always + image: {{ .Values.image.snapshotter }} + args: + - "--csi-address=$(CSI_ENDPOINT)" + - "--v=5" + env: + - name: CSI_ENDPOINT + value: /var/lib/csi/hs-csi.sock + volumeMounts: + - name: socket-dir + mountPath: /var/lib/csi/ + - name: csi-resizer + imagePullPolicy: Always + image: {{ .Values.image.resizer }} + args: + - "--csi-address=$(CSI_ENDPOINT)" + - "--v=5" + env: + - name: CSI_ENDPOINT + value: /var/lib/csi/hs-csi.sock + volumeMounts: + - name: socket-dir + mountPath: /var/lib/csi/ + - name: hs-csi-plugin-controller + securityContext: + privileged: true + capabilities: + add: ["SYS_ADMIN"] + allowPrivilegeEscalation: true + imagePullPolicy: Always + image: {{ .Values.image.csiPlugin }} + envFrom: + - configMapRef: + name: csi-env-config + env: + - name: CSI_ENDPOINT + value: /var/lib/csi/hs-csi.sock + - name: HS_USERNAME + valueFrom: + secretKeyRef: + name: com.hammerspace.csi.credentials + key: username + - name: HS_PASSWORD + valueFrom: + secretKeyRef: + name: com.hammerspace.csi.credentials + key: password + - name: HS_ENDPOINT + valueFrom: + secretKeyRef: + name: com.hammerspace.csi.credentials + key: endpoint + - name: HS_TLS_VERIFY + value: "false" + - name: CSI_MAJOR_VERSION + value: "1" + volumeMounts: + - name: socket-dir + mountPath: /var/lib/csi/ + - name: staging-dir + mountPath: /tmp + mountPropagation: Bidirectional + volumes: + - name: socket-dir + emptyDir: {} + - name: staging-dir + hostPath: + path: /tmp \ No newline at end of file diff --git a/deploy/helm/repo/v1.2.8/hammerspace-helm-chart/templates/csidriver.yaml b/deploy/helm/repo/v1.2.8/hammerspace-helm-chart/templates/csidriver.yaml new file mode 100644 index 0000000..65229a0 --- /dev/null +++ b/deploy/helm/repo/v1.2.8/hammerspace-helm-chart/templates/csidriver.yaml @@ -0,0 +1,10 @@ +apiVersion: storage.k8s.io/v1 +kind: CSIDriver +metadata: + name: com.hammerspace.csi +spec: + podInfoOnMount: true + requiresRepublish: true + volumeLifecycleModes: + - Persistent + storageCapacity: true \ No newline at end of file diff --git a/deploy/helm/repo/v1.2.8/hammerspace-helm-chart/templates/node/daemonset.yaml b/deploy/helm/repo/v1.2.8/hammerspace-helm-chart/templates/node/daemonset.yaml new file mode 100644 index 0000000..72a1831 --- /dev/null +++ b/deploy/helm/repo/v1.2.8/hammerspace-helm-chart/templates/node/daemonset.yaml @@ -0,0 +1,120 @@ +apiVersion: apps/v1 +kind: DaemonSet +metadata: + name: csi-node + namespace: {{ .Values.namespace }} +spec: + selector: + matchLabels: + app: csi-node + template: + metadata: + labels: + app: csi-node + spec: + serviceAccount: csi-node + hostNetwork: true + containers: + - name: driver-registrar + imagePullPolicy: Always + image: {{ .Values.image.registrar }} + lifecycle: + preStop: + exec: + command: ["/bin/sh", "-c", '[ -n "$REG_SOCKET" ] && rm -rf "$REG_SOCKET" || echo "REG_SOCKET not set, skipping delete"'] + args: + - "--v=5" + - "--csi-address=$(CSI_ENDPOINT)" + - "--kubelet-registration-path=$(REG_SOCKET)" + securityContext: + privileged: true + env: + - name: CSI_ENDPOINT + value: /csi/csi.sock + - name: REG_SOCKET + value: /var/lib/kubelet/plugins_registry/com.hammerspace.csi/csi.sock + - name: KUBE_NODE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: spec.nodeName + volumeMounts: + - name: socket-dir + mountPath: /csi + - name: registration-dir + mountPath: /registration + - name: hs-csi-plugin-node + securityContext: + privileged: true + capabilities: + add: ["SYS_ADMIN"] + allowPrivilegeEscalation: true + imagePullPolicy: Always + image: {{ .Values.image.csiPlugin }} + envFrom: + - configMapRef: + name: csi-env-config + env: + - name: CSI_ENDPOINT + value: /csi/csi.sock + - name: HS_USERNAME + valueFrom: + secretKeyRef: + name: com.hammerspace.csi.credentials + key: username + - name: HS_PASSWORD + valueFrom: + secretKeyRef: + name: com.hammerspace.csi.credentials + key: password + - name: HS_ENDPOINT + valueFrom: + secretKeyRef: + name: com.hammerspace.csi.credentials + key: endpoint + - name: CSI_NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + - name: HS_TLS_VERIFY + value: "false" + - name: CSI_MAJOR_VERSION + value: "1" + volumeMounts: + - name: socket-dir + mountPath: /csi + - name: registration-dir + mountPath: /registration + mountPropagation: Bidirectional + - name: mountpoint-dir + mountPath: /var/lib/kubelet/ + mountPropagation: Bidirectional + - name: dev-dir + mountPath: /dev + - name: staging-dir + mountPath: /tmp + mountPropagation: Bidirectional + - name: rootshare-dir # <-new with 1.2.8 + mountPath: /var/lib/hammerspace/ + mountPropagation: Bidirectional + + volumes: + - name: socket-dir + hostPath: + path: /var/lib/kubelet/plugins_registry/com.hammerspace.csi + type: DirectoryOrCreate + - name: mountpoint-dir + hostPath: + path: /var/lib/kubelet/ + - name: registration-dir + hostPath: + path: /var/lib/kubelet/plugins_registry/ + - name: dev-dir + hostPath: + path: /dev + - name: staging-dir + hostPath: + path: /tmp + - name: rootshare-dir # <-new with 1.2.8 + hostPath: + path: /var/lib/hammerspace/ \ No newline at end of file diff --git a/deploy/helm/repo/v1.2.8/hammerspace-helm-chart/templates/node/rbac.yaml b/deploy/helm/repo/v1.2.8/hammerspace-helm-chart/templates/node/rbac.yaml new file mode 100644 index 0000000..bad30fe --- /dev/null +++ b/deploy/helm/repo/v1.2.8/hammerspace-helm-chart/templates/node/rbac.yaml @@ -0,0 +1,43 @@ +apiVersion: v1 +kind: ServiceAccount +metadata: + name: csi-node + namespace: {{ .Values.namespace }} +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: csi-node +rules: + - apiGroups: [""] + resources: ["pods", "secrets", "nodes", "namespaces", "events", "persistentvolumes", "persistentvolumeclaims", "persistentvolumeclaims/status"] + verbs: ["get", "list", "create", "watch", "update", "patch"] + - apiGroups: ["storage.k8s.io"] + resources: ["volumeattachments", "volumeattachments/status"] + verbs: ["get", "list", "watch", "create", "update", "patch"] +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: csi-node +subjects: + - kind: ServiceAccount + name: csi-node + namespace: {{ .Values.namespace }} +roleRef: + kind: ClusterRole + name: csi-node + apiGroup: rbac.authorization.k8s.io +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: csi-provisioner-volumeattachment-status-binding +subjects: + - kind: ServiceAccount + name: csi-provisioner + namespace: {{ .Values.namespace }} +roleRef: + kind: ClusterRole + name: csi-provisioner + apiGroup: rbac.authorization.k8s.io diff --git a/deploy/helm/repo/v1.2.8/hammerspace-helm-chart/values.yaml b/deploy/helm/repo/v1.2.8/hammerspace-helm-chart/values.yaml new file mode 100644 index 0000000..c6df9cf --- /dev/null +++ b/deploy/helm/repo/v1.2.8/hammerspace-helm-chart/values.yaml @@ -0,0 +1,21 @@ +namespace: kube-system + +credentialsSecretName: com.hammerspace.csi.credentials +# +env: + MOUNT_CHECK_TIMEOUT: "30s" + UNMOUNT_RETRY_COUNT: "5" + UNMOUNT_RETRY_INTERVAL: "1s" +# +image: + csiPlugin: hammerspaceinc/csi-plugin:v1.2.8-rc2 + provisioner: registry.k8s.io/sig-storage/csi-provisioner:v5.2.0 + attacher: registry.k8s.io/sig-storage/csi-attacher:v4.8.0 + snapshotter: registry.k8s.io/sig-storage/csi-snapshotter:v8.0.2 + resizer: registry.k8s.io/sig-storage/csi-resizer:v1.14.0 + registrar: registry.k8s.io/sig-storage/csi-node-driver-registrar:v2.13.0 +# +controller: + replicas: 1 + + From 186a26cfd91c983e42190dd11f826c427f3829b8 Mon Sep 17 00:00:00 2001 From: Ravi Kumar Date: Wed, 20 Aug 2025 22:22:32 +0530 Subject: [PATCH 4/6] Revert unsued code changes. --- pkg/common/host_utils.go | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/pkg/common/host_utils.go b/pkg/common/host_utils.go index 3bd2feb..a519af3 100644 --- a/pkg/common/host_utils.go +++ b/pkg/common/host_utils.go @@ -40,6 +40,24 @@ import ( const LOOP_CTL_GET_FREE = 0x4C82 +var ( + defaultMountCheckTimeout time.Duration = 50 * time.Second // Default timeout for checking mount status +) + +func init() { + // Read environment variables for mount check timeout + mountCheckTimeoutStr := os.Getenv("MOUNT_CHECK_TIMEOUT") + if mountCheckTimeoutStr != "" { + if timeout, err := time.ParseDuration(mountCheckTimeoutStr); err == nil && timeout > 0 { + defaultMountCheckTimeout = timeout + } else { + log.Warnf("Invalid MOUNT_CHECK_TIMEOUT=%s; using default %s", mountCheckTimeoutStr, defaultMountCheckTimeout) + } + } + + log.Infof("mountCheckTimeout=%s", defaultMountCheckTimeout) +} + func execCommandHelper(command string, args ...string) ([]byte, error) { cmd := exec.Command(command, args...) log.Debugf("Executing command: %v", cmd) From 37f1e0b1cbcb9f6b674400cf22c392a7a3359821 Mon Sep 17 00:00:00 2001 From: Ravi Kumar Date: Fri, 22 Aug 2025 06:23:08 +0000 Subject: [PATCH 5/6] Added update v1.2.8 helm rbac rules. --- deploy/helm/README.md | 5 +- deploy/helm/repo/index.yaml | 8 +- .../repo/v1.2.8/hammerspace-csi-1.2.8.tgz | Bin 3137 -> 3084 bytes .../templates/controller/rbac.yaml | 31 +- .../templates/node/rbac.yaml | 16 +- deploy/kubernetes/kubernetes-1.28/plugin.yaml | 47 +-- docs/hammerspace_csi_upgrade_guide_v_1.2.8.md | 285 ++++++++++++++++++ 7 files changed, 306 insertions(+), 86 deletions(-) create mode 100644 docs/hammerspace_csi_upgrade_guide_v_1.2.8.md diff --git a/deploy/helm/README.md b/deploy/helm/README.md index edc5421..24fa6aa 100644 --- a/deploy/helm/README.md +++ b/deploy/helm/README.md @@ -21,14 +21,15 @@ This repository provides Helm charts to deploy the Hammerspace CSI driver compon #### Navigate to the chart directory: ``` +(v1.2.8) will be changed to dir name for which package need to be created cd deploy/helm/repo/v1.2.8 ``` #### Create new package ``` -helm package ./hammerspace-helm-chart/ +helm package .hammerspace-helm-chart/ ``` -#### Update the index.yaml +#### Update the index.yaml ``` cd ../repo helm repo index . diff --git a/deploy/helm/repo/index.yaml b/deploy/helm/repo/index.yaml index 0db0c87..a78b014 100644 --- a/deploy/helm/repo/index.yaml +++ b/deploy/helm/repo/index.yaml @@ -3,9 +3,9 @@ entries: hammerspace-csi: - apiVersion: v2 appVersion: v1.2.8 - created: "2025-08-20T21:34:38.923368821+05:30" + created: "2025-08-22T06:21:31.000723783Z" description: A Helm chart for the Hammerspace CSI driver - digest: 72a409136455142bbd25bb12e47282c4251077de7465849bb09274a47beee921 + digest: c8d82095e2a9323ae7061faa7e6b971ce9df1c1685d0739020f8e2ccb558e3a1 icon: https://www.hammerspace.com/favicon.ico name: hammerspace-csi urls: @@ -13,7 +13,7 @@ entries: version: 1.2.8 - apiVersion: v2 appVersion: v1.2.7 - created: "2025-08-20T21:34:38.900138837+05:30" + created: "2025-08-22T06:21:31.000159223Z" description: A Helm chart for the Hammerspace CSI driver digest: 342c39ef85e06e4ed13fdb2d392bcafbb73e64525e0036f15644d0af35f6412f icon: https://www.hammerspace.com/favicon.ico @@ -21,4 +21,4 @@ entries: urls: - v1.2.7/hammerspace-csi-1.2.7.tgz version: 1.2.7 -generated: "2025-08-20T21:34:38.875046754+05:30" +generated: "2025-08-22T06:21:30.999427348Z" diff --git a/deploy/helm/repo/v1.2.8/hammerspace-csi-1.2.8.tgz b/deploy/helm/repo/v1.2.8/hammerspace-csi-1.2.8.tgz index d62889da0e1136a0ad9ca356a1ee27ddd0c99a74..5b5b266a1d52ea009dd2c600840a9d6f47435b70 100644 GIT binary patch delta 3055 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 delta 3109 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 /var/lib/kubelet/pods//volumes/.../mount (NFS direct) +``` + +### New flow (v1.2.8) + +``` +IP:/ --> /var/lib/hammerspace/rootmount (1 root NFS mount per node) + | + +--> bind mount /var/lib/hammerspace/rootmount/pvc-XYZ/ --> /var/lib/kubelet/pods//volumes/.../mount +``` + +**Key migration point:** If a node had direct NFS mounts from old driver, the root share directory will not exist until either `NodeStageVolume` runs or a lazy-stage is performed by `NodePublishVolume`. For large clusters we recommend lazy-stage logic inside `NodePublishVolume` to automatically mount root share and convert old direct NFS mounts to bind mounts. + +--- + +## 3. Phase 1 — Single-node testing (safe & reversible) + +**Pick a node:** + +- Choose a healthy, non-critical node that currently successfully mounts PVCs. +- Verify with: + +```bash +kubectl get nodes -o wide +kubectl describe node +``` + +**Steps:** + +1. Cordon the node so new pods don't land on it during validation: + +```bash +kubectl cordon +``` + +2. Label the node so DaemonSet can be targeted for the test: + +```bash +kubectl label node csi-test-node=true +``` + +3. Patch the `csi-node` DaemonSet to include the nodeSelector and set the new image. Example patch (JSON patch): + +```bash +kubectl patch daemonset csi-node -n kube-system \ + --type='json' \ + -p='[ + {"op":"add","path":"/spec/template/spec/nodeSelector","value":{"csi-test-node":"true"}}, + {"op":"replace","path":"/spec/template/spec/containers/2/image","value":"hammerspaceinc/csi-plugin:v1.2.8"} + ]' +``` + +*NB:* the `containers/2` index in the patch assumes container order; if you want safer, edit the DaemonSet YAML and change the `hs-csi-plugin-node` image and add `nodeSelector` under the template. + +4. Wait for the DaemonSet to schedule the updated pod onto the labeled node and verify the pod is running: + +```bash +kubectl get pods -n kube-system -o wide -l app=csi-node +kubectl logs -n kube-system -c hs-csi-plugin-node --tail=200 +``` + +5. Run a test Pod that mounts an existing PVC (or create a temporary PVC + Pod): + +```bash +kubectl run csi-test --image=nginx --restart=Never \ + --overrides='{"apiVersion":"v1","spec":{"volumes":[{"name":"test-vol","persistentVolumeClaim":{"claimName":""}}],"containers":[{"name":"nginx","image":"nginx","volumeMounts":[{"mountPath":"/data","name":"test-vol"}]}]}}' + +kubectl exec -it csi-test -- mount | grep /data +``` + +6. Validate: + +- Confirm the root share exists on the node (`ls /var/lib/hammerspace/rootmount`). +- Confirm the pod target path is a **bind mount** whose source path is under `/var/lib/hammerspace/rootmount/`. + +Example on node: `mount | grep hammerspace` or inside the pod: `mount | grep /data`. + +7. Roll back test targeting (remove nodeSelector and unlabel): + +```bash +kubectl patch daemonset csi-node -n kube-system --type='json' -p='[{"op":"remove","path":"/spec/template/spec/nodeSelector"}]' +kubectl label node csi-test-node- +kubectl uncordon +``` + +--- + +## 4. Phase 2 — Cluster-wide rollout (recommended: staged) + +**Plan:** Rolling update in batches, e.g., `maxUnavailable: 10%` in DaemonSet rollingUpdate. With 400 nodes, this means \~40 nodes at a time. + +**Pre-checks:** + +- Ensure cluster-wide backups of manifests for quick rollback. +- Ensure kubelet/node health and that `csi-node` DaemonSet can tolerate brief restarts. + +**Step-by-step:** + +1. Backup current DaemonSet and controller manifests: + +```bash +kubectl get daemonset csi-node -n kube-system -o yaml > csi-node-backup.yaml +kubectl get statefulset csi-provisioner -n kube-system -o yaml > csi-provisioner-backup.yaml +``` + +2. Edit the DaemonSet update strategy: + +```yaml +spec: + updateStrategy: + type: RollingUpdate + rollingUpdate: + maxUnavailable: 10% +``` + +3. Apply new image for the node plugin (and controller if needed): + +```bash +kubectl set image daemonset/csi-node -n kube-system hs-csi-plugin-node=hammerspaceinc/csi-plugin:v1.2.8 +kubectl set image statefulset/csi-provisioner -n kube-system csi-provisioner +``` + +4. Monitor rollout and logs: + +```bash +kubectl rollout status daemonset/csi-node -n kube-system +kubectl get pods -n kube-system -l app=csi-node -o wide +kubectl logs -n kube-system -l app=csi-node --tail=200 +``` + +5. Spot-check mounts on upgraded nodes: + +Choose a few nodes that report `Ready` with updated pods and run: + +```bash +kubectl debug node/ -n kube-system --image=registry.k8s.io/pause +# or ssh to node +mount | grep hammerspace +# check pod mounts +kubectl get pods -o wide --field-selector spec.nodeName= +kubectl exec -it -- mount | grep /var/lib/kubelet/pods +``` + +6. Validate PVCs after rollout: + +```bash +kubectl get pvc --all-namespaces +kubectl describe pvc -n +# confirm pods on upgraded nodes can access volumes and see bind mounts from /var/lib/hammerspace/rootmount +``` + +--- + +## 5. Validation & health checks (commands) + +### List PVCs and their bound PVs + +```bash +kubectl get pvc --all-namespaces -o wide +``` + +### Check mount points on a node (SSH or debug pod) + +```bash +mount | grep hammerspace +findmnt --target /var/lib/hammerspace/rootmount +``` + +### Inspect a pod's volume mount inside the pod + +```bash +kubectl exec -it -- mount | grep /data +``` + +### Count nodes with rootshare mounted + +```bash +# run as a DaemonSet job or remote SSH script to check per-node +# example: use kubectl debug or ssh +``` + +--- + +## 6. Troubleshooting + +- **Old mounts not replaced / bind mount failing**: ensure `NodePublishVolume` lazy-stage logic runs — check node logs for `[LazyStage]` entries. +- **ESTALE errors**: may appear on stale NFS mounts. Rebooting kubelet or remounting the underlying NFS may help. Prefer to unmount the *old direct mount at the pod target path* before bind-mounting; do NOT unmount the root share if other pods depend on it. +- **If many nodes show errors**: pause rollout, revert to backup DaemonSet manifest, and investigate logs. + +--- + +## 7. Rollback + +1. Revert the `csi-node` image to the backed-up image: + +```bash +kubectl set image daemonset/csi-node -n kube-system hs-csi-plugin-node= +``` + +2. Monitor rollout and confirm volumes become accessible again. + +--- + +## 8. Appendix — csi-node DaemonSet snippet (example) + +```yaml +# (snippet) Example csi-node DaemonSet for v1.2.8 +kind: DaemonSet +apiVersion: apps/v1 +metadata: + name: csi-node + namespace: kube-system +spec: + selector: + matchLabels: + app: csi-node + template: + metadata: + labels: + app: csi-node + spec: + serviceAccount: csi-node + hostNetwork: true + containers: + - name: hs-csi-plugin-node + image: hammerspaceinc/csi-plugin:v1.2.8 + envFrom: + - configMapRef: + name: csi-env-config + env: + - name: CSI_ENDPOINT + value: /csi/csi.sock + volumeMounts: + - name: socket-dir + mountPath: /csi + - name: registration-dir + mountPath: /registration + mountPropagation: Bidirectional + - name: mountpoint-dir + mountPath: /var/lib/kubelet/ + mountPropagation: Bidirectional + - name: rootshare-dir # new added with 1.2.8 + mountPath: /var/lib/hammerspace/ + mountPropagation: Bidirectional + - name: staging-dir + mountPath: /tmp + mountPropagation: Bidirectional + volumes: + - name: socket-dir + hostPath: + path: /var/lib/kubelet/plugins_registry/com.hammerspace.csi + type: DirectoryOrCreate + - name: mountpoint-dir + hostPath: + path: /var/lib/kubelet/ + - name: rootshare-dir # new added with 1.2.8 + hostPath: + path: /var/lib/hammerspace/ + - name: staging-dir + hostPath: + path: /tmp +``` From 4fb34d6c3e779c2b3f9cc3ced6be43d1850cbbc5 Mon Sep 17 00:00:00 2001 From: Ravi Kumar Date: Tue, 26 Aug 2025 07:22:40 +0000 Subject: [PATCH 6/6] Update the document for developer and user to install --- deploy/helm/DEVELOPER.md | 138 ++++++++++++++++++ deploy/helm/README.md | 114 +++++++++++---- deploy/helm/repo/index.yaml | 10 +- .../repo/v1.2.7/hammerspace-csi-1.2.7.tgz | Bin 3091 -> 3094 bytes .../repo/v1.2.8/hammerspace-csi-1.2.8.tgz | Bin 3084 -> 3085 bytes 5 files changed, 226 insertions(+), 36 deletions(-) create mode 100644 deploy/helm/DEVELOPER.md diff --git a/deploy/helm/DEVELOPER.md b/deploy/helm/DEVELOPER.md new file mode 100644 index 0000000..c7cc1ad --- /dev/null +++ b/deploy/helm/DEVELOPER.md @@ -0,0 +1,138 @@ +# Developer Guide: Building, Packaging, and Publishing Helm Charts + +This guide helps you build a new Helm chart or update an existing chart for configuration changes. See `README.md` for user installation instructions. + +--- + +## Prerequisites +- Helm installed (`helm version`) +- Git access to this repository +- (Optional) GitHub Pages enabled for publishing the Helm repo index + +--- + +## Create a New Helm Chart +```sh +helm create +``` +Then customize: +- Chart.yaml - name, version (chart version), appVersion (driver version) +- values.yaml - defaults +- templates/ - manifests + +Lint & test: +```sh +helm lint +helm install --dry-run --debug +``` + +--- + +## Update an Existing Chart +```sh +git pull +# Edit values/templates/Chart.yaml as needed +helm lint +helm upgrade --dry-run --debug +``` + +Versioning rules (semantic): +- Bump Chart.yaml:version each release (e.g., 1.2.8 -> 1.2.9) +- Update appVersion when the CSI plugin version changes + +--- + +## Package a New Version + +Example layout: +``` +deploy/helm/repo/ +├─ v1.2.7/ # chart root +├─ index.yaml # Helm repo index (published) +└─ v1.2.7/hammerspace-csi-1.2.7.tgz # packaged chart(s) +``` + +1) Package the chart +```sh +cd deploy/helm/repo/v1.2.7 +helm package ./hammerspace-helm-chart +# Produces hammerspace-csi-.tgz +``` + +2) Update the repo index +```sh +cd .. +# Replace with the base URL of your Helm repo hosting +helm repo index . --url +``` + +3) Commit and push the artifacts +```sh +git add *.tgz index.yaml +git commit -m "chore(helm): release csi-driver " +git push +``` + +### If hosted on GitHub Pages +- Publish index.yaml and all *.tgz to your Pages branch (commonly gh-pages) or /docs folder on main +- Ensure Pages serves the exact directory containing index.yaml +- Optional: add artifacthub-repo.yml next to index.yaml for Artifact Hub + +Minimal artifacthub-repo.yml: +```yaml +repositoryID: "hammerspace-csi-helm-repo" +owners: + - name: "Your Name" + email: "you@example.com" +``` + +--- + +## Local Smoke Test from the Built Repo +After you publish the new package + index.yaml: +```sh +helm repo remove hscsi || true +helm repo add hscsi +helm repo update +helm search repo hscsi +helm install test-hscsi hscsi/csi-driver --dry-run --debug +``` + +--- + +## Optional: Makefile helpers +Create a Makefile in deploy/helm/repo: + +```make +CHART_DIR ?= csi-driver +REPO_URL ?= + +package: +\tcd $(CHART_DIR) && helm package . + +index: +\thelm repo index . --url $(REPO_URL) + +release: package index +\tgit add *.tgz index.yaml +\tgit commit -m "chore(helm): release $$(date +%Y.%m.%d-%H%M)" +\tgit push +``` + +Usage: +```sh +make package +make index +make release +``` + +--- + +## Release Checklist +- [ ] Chart.yaml version bumped +- [ ] appVersion set to the intended CSI plugin image tag +- [ ] helm lint passes +- [ ] helm install --dry-run --debug passes +- [ ] New .tgz generated and committed +- [ ] index.yaml updated with correct --url +- [ ] GitHub Pages serves the folder containing index.yaml diff --git a/deploy/helm/README.md b/deploy/helm/README.md index 24fa6aa..cf86034 100644 --- a/deploy/helm/README.md +++ b/deploy/helm/README.md @@ -1,48 +1,100 @@ # Hammerspace CSI Helm Charts -This repository provides Helm charts to deploy the Hammerspace CSI driver components in a Kubernetes cluster. It supports deploying both **Controller** and **Node** plugins, along with configurable options such as timeouts and retry intervals. +This repository provides Helm charts to deploy the **Hammerspace CSI driver** in a Kubernetes cluster. +The chart installs both the **Controller** and **Node** plugins, and supports configuration of timeouts, retry intervals. --- -## 🚀 How to Deploy the Chart - -1. **Add the Helm repository** (Published to GitHub Pages): - ```bash - helm repo add hscsi https://github.com/hammer-space/csi-plugin/deploy/helm/repo - helm repo update - ``` - -2. **Install the chart into your cluster:** - ``` - helm install hscsi hscsi/ --namespace kube-system --create-namespace - ``` ---- -## 📦 How to Package a New Version +## 🚀 Quickstart: Deploy the Chart -#### Navigate to the chart directory: +### 1) Add the Helm repository +> Replace `` with your GitHub Pages URL where `index.yaml` is hosted (e.g., `https://hammer-space/csi-plugin.github.io/deploy/helm/`). +```bash +helm repo add hscsi https://hammer-space/csi-plugin.github.io/deploy/helm/ +helm repo update +helm install my-hammerspace-csi hscsi/hammerspace-csi --version 1.2.8 ``` -(v1.2.8) will be changed to dir name for which package need to be created -cd deploy/helm/repo/v1.2.8 + +### 2) Create your `values.yaml` +You can override default settings by creating a custom `values.yaml`. Example: + +```yaml +# values.yaml (example) + +controller: + replicaCount: 2 + resources: + requests: + cpu: "200m" + memory: "512Mi" + limits: + cpu: "1" + memory: "1Gi" + +node: + # Tolerate control-plane nodes if needed + tolerations: + - key: "node-role.kubernetes.io/control-plane" + operator: "Exists" + effect: "NoSchedule" + ``` -#### Create new package + +### 3) Install the chart +```bash +helm install hscsi hscsi/hammerspace-csi \ + --namespace kube-system \ + --create-namespace \ + -f values.yaml ``` -helm package .hammerspace-helm-chart/ + +Alternatively, override values inline: +```bash +helm install hscsi hscsi/hammerspace-csi \ + --namespace kube-system \ + --create-namespace \ + --set controller.replicaCount=2 ``` -#### Update the index.yaml +### 4) Verify the deployment +```bash +kubectl get pods -n kube-system -l app.kubernetes.io/name=hscsi +kubectl get csidrivers | grep hammerspace || true ``` -cd ../repo -helm repo index . + +You should see both **csi-provisioner-0** and **csi-node-** plugin pods running. +--- + +## 🔧 Upgrade +```bash +helm upgrade hscsi -n kube-system -f values.yaml ``` -#### If hosted on GitHub Pages: +## 🗑 Uninstall +```bash +helm uninstall hscsi -n kube-system +``` -Ensure index.yaml and .tgz files are committed to the branch (typically gh-pages) +--- -Add or update artifacthub-repo.yml next to index.yaml for Artifact Hub metadata +## ⚙️ Configuration Reference (common) +| Key | Type | Description | +| --- | --- | --- | +| `controller.replicaCount` | int | Number of controller replicas | +| `controller.resources` | map | Requests/limits for controller pods | +| `node.tolerations` | list | Tolerations for node daemonset | -#### How to Create a New Helm Chart -If you need to add a new chart: -``` -helm create new-chart -``` +> For all options, see `values.yaml` in the chart. + +--- + +## 🧰 Troubleshooting +- Pods stuck in ImagePullBackOff: Verify image registry access and tag in the chart values. +- "csi-driver" not found: Run `helm repo update` and check that your `/index.yaml` is accessible. +- No nodes provisioned: Check node plugin DaemonSet tolerations/affinity and that nodes can reach the NFS endpoints. + +--- + +## 📚 References +- Helm: https://helm.sh/docs/ +- Kubernetes CSI: https://kubernetes-csi.github.io/docs/ diff --git a/deploy/helm/repo/index.yaml b/deploy/helm/repo/index.yaml index a78b014..8e3068c 100644 --- a/deploy/helm/repo/index.yaml +++ b/deploy/helm/repo/index.yaml @@ -3,9 +3,9 @@ entries: hammerspace-csi: - apiVersion: v2 appVersion: v1.2.8 - created: "2025-08-22T06:21:31.000723783Z" + created: "2025-08-26T06:46:19.212057988Z" description: A Helm chart for the Hammerspace CSI driver - digest: c8d82095e2a9323ae7061faa7e6b971ce9df1c1685d0739020f8e2ccb558e3a1 + digest: b7f41604ea1d1b9b35bc183c5d5f1b8fd0d771a1887565b8a348982824fae058 icon: https://www.hammerspace.com/favicon.ico name: hammerspace-csi urls: @@ -13,12 +13,12 @@ entries: version: 1.2.8 - apiVersion: v2 appVersion: v1.2.7 - created: "2025-08-22T06:21:31.000159223Z" + created: "2025-08-26T06:46:19.211443051Z" description: A Helm chart for the Hammerspace CSI driver - digest: 342c39ef85e06e4ed13fdb2d392bcafbb73e64525e0036f15644d0af35f6412f + digest: 1db738079a744d44fb7e25c70636568d4c136000b564b4845666071ef901b58c icon: https://www.hammerspace.com/favicon.ico name: hammerspace-csi urls: - v1.2.7/hammerspace-csi-1.2.7.tgz version: 1.2.7 -generated: "2025-08-22T06:21:30.999427348Z" +generated: "2025-08-26T06:46:19.210659997Z" diff --git a/deploy/helm/repo/v1.2.7/hammerspace-csi-1.2.7.tgz b/deploy/helm/repo/v1.2.7/hammerspace-csi-1.2.7.tgz index 1c43e8eb051d7b5178cbc51b74fc525a2e629b99..32e2a7407c0bc2d738451274edccaa903466986f 100644 GIT binary patch delta 3063 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 F006UDBk2GD delta 3060 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 C_YNZf diff --git a/deploy/helm/repo/v1.2.8/hammerspace-csi-1.2.8.tgz b/deploy/helm/repo/v1.2.8/hammerspace-csi-1.2.8.tgz index 5b5b266a1d52ea009dd2c600840a9d6f47435b70..36cd7ef13d85e65e97d904609d4982b25f97ede6 100644 GIT binary patch delta 2930 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 bc6Xh2ZP#|~Yia)v00960`*_K_09XJ3U*ome