Skip to content

Commit 5edc932

Browse files
yaguangtangCopilotadrianrezamnaser
committed
feat(csi): Add support for HPE nimble cinder driver and kubernetes CSI (#4103)
Signed-off-by: Copilot Autofix <noreply@github.com> Signed-off-by: adrianreza <adrian.reza@vexxhost.com> Signed-off-by: Yaguang Tang <yaguang.tang@vexxhost.com> Signed-off-by: Mohammed Naser <mnaser@vexxhost.com> Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: adrianreza <1904931+adrianreza@users.noreply.github.com> Co-authored-by: Mohammed Naser <mnaser@vexxhost.com> (cherry picked from commit c605825)
1 parent 2559a8d commit 5edc932

46 files changed

Lines changed: 4388 additions & 17 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.charts.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,10 @@ charts:
8585
gerrit:
8686
review.opendev.org:
8787
- 899931
88+
- name: hpe-csi-driver
89+
version: 3.1.0
90+
repository:
91+
url: https://hpe-storage.github.io/co-deployments
8892
- name: horizon
8993
version: 0.3.16
9094
repository: *openstack_helm_repository

charts/charts_test.go

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -94,22 +94,23 @@ func TestKubeconform(t *testing.T) {
9494

9595
t.Parallel()
9696

97-
rel, err := client.Run(
98-
chart,
99-
// NOTE(okozachenko1203): loki helm chart default values doesn't work.
100-
map[string]interface{}{
101-
"loki": map[string]interface{}{
102-
"storage": map[string]interface{}{
103-
"bucketNames": map[string]string{
104-
"chunks": "FIXME",
105-
"ruler": "FIXME",
106-
"admin": "FIXME",
107-
},
97+
values := map[string]interface{}{}
98+
99+
// NOTE(okozachenko1203): loki helm chart default values doesn't work.
100+
if chart.Name() == "loki" {
101+
values["loki"] = map[string]interface{}{
102+
"storage": map[string]interface{}{
103+
"bucketNames": map[string]string{
104+
"chunks": "FIXME",
105+
"ruler": "FIXME",
106+
"admin": "FIXME",
108107
},
109-
"useTestSchema": true,
110108
},
111-
},
112-
)
109+
"useTestSchema": true,
110+
}
111+
}
112+
113+
rel, err := client.Run(chart, values)
113114
require.NoError(t, err)
114115

115116
manifests := io.NopCloser(strings.NewReader(rel.Manifest))

charts/hpe-csi-driver/Chart.yaml

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
annotations:
2+
artifacthub.io/category: storage
3+
artifacthub.io/containsSecurityUpdates: "true"
4+
artifacthub.io/license: Apache-2.0
5+
artifacthub.io/links: |
6+
- name: Release Highlights
7+
url: https://scod.hpedev.io/csi_driver/index.html#latest_release
8+
- name: Release Notes
9+
url: https://github.com/hpe-storage/csi-driver/tree/master/release-notes
10+
- name: Documentation
11+
url: https://scod.hpedev.io/csi_driver
12+
- name: Chart Source
13+
url: https://github.com/hpe-storage/co-deployments
14+
artifacthub.io/prerelease: "false"
15+
artifacthub.io/recommendations: |
16+
- url: https://artifacthub.io/packages/olm/community-operators/hpe-csi-operator
17+
- url: https://artifacthub.io/packages/helm/hpe-storage/hpe-csi-info-metrics
18+
- url: https://artifacthub.io/packages/helm/hpe-storage/hpe-array-exporter
19+
apiVersion: v1
20+
appVersion: 3.1.0
21+
description: A Helm chart for installing the HPE CSI Driver for Kubernetes
22+
home: https://hpe.com/storage/containers
23+
icon: https://raw.githubusercontent.com/hpe-storage/co-deployments/master/docs/assets/hpedev.png
24+
keywords:
25+
- HPE
26+
- Storage
27+
- CSI
28+
maintainers:
29+
- email: dev-hi-containers@hpe.com
30+
name: datamattsson
31+
name: hpe-csi-driver
32+
sources:
33+
- https://github.com/hpe-storage/csi-driver
34+
version: 3.1.0

charts/hpe-csi-driver/README.md

Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
# HPE CSI Driver for Kubernetes Helm chart
2+
3+
The [HPE CSI Driver for Kubernetes](https://scod.hpedev.io/csi_driver/index.html) leverages Hewlett Packard Enterprise primary storage platforms to provide scalable, persistent block and file storage for stateful and ephemeral applications. Currently supported storage platforms include HPE Alletra Storage MP B10000, HPE Alletra 5000/6000/9000, HPE Nimble Storage, HPE Primera and HPE 3PAR.
4+
5+
## Release highlights
6+
7+
The HPE CSI Driver for Kubernetes Helm chart is the primary delivery vehicle for the HPE CSI Driver.
8+
9+
- All resources for the HPE CSI Driver is available on [HPE Storage Container Orchestrator Documentation](https://scod.hpedev.io/) (SCOD).
10+
- Visit [the latest release](https://scod.hpedev.io/csi_driver/index.html#latest_release) on SCOD to learn what's new in this chart.
11+
- The release notes for the HPE CSI Driver are hosted on [GitHub](https://github.com/hpe-storage/csi-driver/tree/master/release-notes).
12+
13+
## Prerequisites
14+
15+
- Most recent Kubernetes distributions are supported
16+
- Recent Ubuntu, SLES or RHEL (and its derives) compute nodes connected to their respective official package repositories
17+
- Helm 3 (Version >= 3.2.0 required)
18+
19+
Refer to [Compatibility & Support](https://scod.hpedev.io/csi_driver/index.html#compatibility_and_support) for currently supported versions of Kubernetes and compute node operating systems.
20+
21+
Depending on which [Container Storage Provider](https://scod.hpedev.io/container_storage_provider/index.html) (CSP) is being used, other prerequisites and requirements may apply, such as storage platform OS and features.
22+
23+
- [HPE Alletra Storage MP B10000, Alletra 9000, Primera and 3PAR](https://scod.hpedev.io/container_storage_provider/hpe_alletra_storage_mp_b10000/index.html)
24+
- [HPE Alletra Storage MP B10000 File Service](https://scod.hpedev.io/container_storage_provider/hpe_alletra_storage_mp_b10000_file_service/index.html)
25+
- [HPE Alletra 5000/6000 and Nimble Storage](https://scod.hpedev.io/container_storage_provider/hpe_alletra_6000/index.html)
26+
27+
## Configuration and installation
28+
29+
The following table lists the configurable parameters of the chart and their default values.
30+
31+
| Parameter | Description | Default |
32+
|---------------------------|----------------------------------------------------------------------------------------------------|------------------|
33+
| disable.nimble | Disable HPE Nimble Storage CSP `Service`. | false |
34+
| disable.primera | Disable HPE Primera (and 3PAR) CSP `Service`. | false |
35+
| disable.alletra6000 | Disable HPE Alletra 5000/6000 CSP `Service`. | false |
36+
| disable.alletra9000 | Disable HPE Alletra 9000 CSP `Service`. | false |
37+
| disable.alletraStorageMP | Disable HPE Alletra Storage MP B10000 Block Storage CSP `Service`. | false |
38+
| disable.b10000FileService | Disable HPE Alletra Storage MP B10000 File Service CSP `Service`. | false |
39+
| disableNodeConformance | Disable automatic installation of iSCSI, multipath and NFS packages. | false |
40+
| disableNodeConfiguration | Disables node conformance and configuration.`*` | false |
41+
| disableNodeGetVolumeStats | Disable NodeGetVolumeStats call to CSI driver. | false |
42+
| disableNodeMonitor | Disables the Node Monitor that manages stale storage resources. | false |
43+
| disableHostDeletion | Disables host deletion by the CSP when no volumes are associated with the host. | false |
44+
| disablePreInstallHooks | Disable pre-install hooks when the chart is rendered outside of Kubernetes, such as CI/CD systems. | false |
45+
| imagePullPolicy | Image pull policy (`Always`, `IfNotPresent`, `Never`). | IfNotPresent |
46+
| iscsi.chapSecretName | Secret containing chapUser and chapPassword for iSCSI | "" |
47+
| logLevel | Log level. Can be one of `info`, `debug`, `trace`, `warn` and `error`. | info |
48+
| kubeletRootDir | The kubelet root directory path. | /var/lib/kubelet |
49+
| controller.labels | Additional labels for HPE CSI Driver controller Pods. | {} |
50+
| controller.nodeSelector | Node labels for HPE CSI Driver controller Pods assignment. | {} |
51+
| controller.affinity | Affinity rules for the HPE CSI Driver controller Pods. | {} |
52+
| controller.tolerations | Node taints to tolerate for the HPE CSI Driver controller Pods. | [] |
53+
| controller.resources | A resource block with requests and limits for controller containers. | From [values.yaml](https://github.com/hpe-storage/co-deployments/blob/master/helm/values/csi-driver) |
54+
| csp.labels | Additional labels for CSP Pods. | {} |
55+
| csp.nodeSelector | Node labels for CSP Pods assignment. | {} |
56+
| csp.affinity | Affinity rules for the CSP Pods. | {} |
57+
| csp.tolerations | Node taints to tolerate for the CSP Pods. | [] |
58+
| csp.resources | A resource block with requests and limits for CSP containers. | From [values.yaml](https://github.com/hpe-storage/co-deployments/blob/master/helm/values/csi-driver) |
59+
| node.labels | Additional labels for HPE CSI Driver node Pods. | {} |
60+
| node.nodeSelector | Node labels for HPE CSI Driver node Pods assignment. | {} |
61+
| node.affinity | Affinity rules for the HPE CSI Driver node Pods. | {} |
62+
| node.tolerations | Node taints to tolerate for the HPE CSI Driver node Pods. | [] |
63+
| node.resources | A resource block with requests and limits for node containers. | From [values.yaml](https://github.com/hpe-storage/co-deployments/blob/master/helm/values/csi-driver) |
64+
| images | Key/value pairs of HPE CSI Driver runtime images. | From [values.yaml](https://github.com/hpe-storage/co-deployments/blob/master/helm/values/csi-driver) |
65+
| maxVolumesPerNode | Maximum number of volumes the CSI controller will publish to a node.`**` | 100 |
66+
67+
`*` = Disabling node conformance and configuration may prevent the CSI driver from functioning properly. See the [manual node configuration](https://scod.hpedev.io/csi_driver/operations.html#manual_node_configuration) section on SCOD to understand the consequences.
68+
`**` = The default value is the current well tested upper limit. Do not increase the default value unless the use case has been well tested.
69+
70+
It's recommended to create a [values.yaml](https://github.com/hpe-storage/co-deployments/blob/master/helm/values/csi-driver) file from the corresponding release of the chart and edit it to fit the environment the chart is being deployed to. Download and edit [a sample file](https://github.com/hpe-storage/co-deployments/blob/master/helm/values/csi-driver).
71+
72+
**Note:** The chart is installed with all components and features enabled using reasonable defaults if no tweaks are needed.
73+
74+
### Installing the chart
75+
76+
To install the chart with the name `my-hpe-csi-driver`:
77+
78+
Add HPE helm repo:
79+
80+
```
81+
helm repo add hpe-storage https://hpe-storage.github.io/co-deployments/
82+
helm repo update
83+
```
84+
85+
Install the latest chart:
86+
87+
```
88+
helm install --create-namespace -n hpe-storage my-hpe-csi-driver hpe-storage/hpe-csi-driver
89+
```
90+
91+
**Note**: By default, the latest stable chart will be installed. If it's labeled with `prerelease` and a "beta" version tag, add `--version X.Y.Z-beta` to the command line to install a "beta" chart.
92+
93+
### Upgrading the chart
94+
95+
Due to the [helm limitation](https://helm.sh/docs/chart_best_practices/custom_resource_definitions/#some-caveats-and-explanations) to not support upgrade of CRDs between different chart versions, helm chart upgrade is not supported.
96+
Our recommendation is to uninstall the existing chart and install the chart with the desired version. CRDs will be preserved between uninstall and install.
97+
98+
#### Upgrading from any version below 3.1.0
99+
100+
This step is only necessary for NVMe/TCP environments.
101+
102+
Clusters running any version prior to 3.1.0 needs to first uninstall the chart (see below) and then delete the `HPENodeInfo` CRD. The information stored in the CRD is transient and recreated at each node driver start.
103+
104+
```
105+
kubectl delete crd/hpenodeinfos.storage.hpe.com
106+
```
107+
108+
The CRD will be recreated at install with the new CRD containing the "nqns" field needed for NVMe/TCP.
109+
110+
#### Uninstalling the chart
111+
112+
To uninstall the `my-hpe-csi-driver` chart:
113+
114+
```
115+
helm uninstall my-hpe-csi-driver -n hpe-storage
116+
```
117+
118+
**Note**: Due to a limitation in Helm, CRDs are not deleted as part of the chart uninstall.
119+
120+
## Using persistent storage with Kubernetes
121+
122+
Enable dynamic provisioning of persistent storage by creating a `StorageClass` API object that references a `Secret` which maps to a supported HPE primary storage backend. Refer to the [HPE CSI Driver for Kubernetes](https://scod.hpedev.io/csi_driver/deployment.html#add_a_hpe_storage_backend) documentation on SCOD. Also, it's helpful to be familiar with [persistent storage concepts](https://kubernetes.io/docs/concepts/storage/volumes/) in Kubernetes prior to deploying stateful workloads.
123+
124+
## Support
125+
126+
The HPE CSI Driver for Kubernetes Helm chart is fully supported by HPE.
127+
128+
Formal support statements for each HPE supported CSP is [available on SCOD](https://scod.hpedev.io/legal/support). Use this facility for formal support of your HPE storage products, including the Helm chart.
129+
130+
## Community
131+
132+
Please file any issues, questions or feature requests you may have [here](https://github.com/hpe-storage/co-deployments/issues) (do not use this facility for support inquiries of your HPE storage product, see [SCOD](https://scod.hpedev.io/legal/support) for support). You may also join our Slack community to chat with HPE folks close to this project. We hang out in `#Alletra`, `#NimbleStorage`, `#3par-primera`, and `#Kubernetes`. Sign up at [developer.hpe.com/slack-signup/](https://developer.hpe.com/slack-signup/) and login at [hpedev.slack.com](https://hpedev.slack.com/)
133+
134+
## Contributing
135+
136+
We value all feedback and contributions. If you find any issues or want to contribute, please feel free to open an issue or file a PR. More details in [CONTRIBUTING.md](https://github.com/hpe-storage/co-deployments/blob/master/CONTRIBUTING.md)
137+
138+
## License
139+
140+
This is open source software licensed using the Apache License 2.0. Please see [LICENSE](https://github.com/hpe-storage/co-deployments/blob/master/LICENSE) for details.
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
---
2+
#############################################
3+
############ HPE Node Info CRD ############
4+
#############################################
5+
apiVersion: apiextensions.k8s.io/v1
6+
kind: CustomResourceDefinition
7+
metadata:
8+
creationTimestamp: null
9+
name: hpenodeinfos.storage.hpe.com
10+
spec:
11+
group: storage.hpe.com
12+
names:
13+
kind: HPENodeInfo
14+
plural: hpenodeinfos
15+
scope: Cluster
16+
versions:
17+
- name: v1
18+
# Each version can be enabled/disabled by Served flag.
19+
served: true
20+
# One and only one version must be marked as the storage version.
21+
storage: true
22+
schema:
23+
openAPIV3Schema:
24+
properties:
25+
apiVersion:
26+
description: "APIVersion defines the versioned schema of this representation of an object."
27+
type: string
28+
kind:
29+
description: "Kind is a string value representing the REST resource this object represents"
30+
type: string
31+
spec:
32+
description: "spec defines the desired characteristics of a HPE nodeinfo requested by a user."
33+
properties:
34+
iqns:
35+
description: "List of IQNs configured on the node."
36+
items:
37+
type: string
38+
type: array
39+
networks:
40+
description: "List of networks configured on the node."
41+
items:
42+
type: string
43+
type: array
44+
uuid:
45+
description: "The UUID of the node."
46+
type: string
47+
wwpns:
48+
description: "List of WWPNs configured on the node."
49+
items:
50+
type: string
51+
type: array
52+
nqns:
53+
description: "List of NQNs configured on the node."
54+
items:
55+
type: string
56+
type: array
57+
required:
58+
- uuid
59+
- networks
60+
type: object
61+
required:
62+
- spec
63+
type: object
64+
status:
65+
acceptedNames:
66+
kind: ""
67+
plural: ""
68+
conditions: []
69+
storedVersions: []

0 commit comments

Comments
 (0)