Jump to: navigation, search

StarlingX/Containers/Applications/app-dell-storage

Application: app-dell-storage

Source

Tarball Package

  • Get the .tgz file located at:
/usr/local/share/applications/helm/dell-storage-XX.XX-XX.tgz 
  • From Debian Build environment:
build-pkgs -c -p csi-powerstore-helm,csi-powerscale-helm,csi-unity-helm,csm-replication-helm,csm-observability-helm,python3-k8sapp-dell-storage,stx-dell-storage-helm

Common Commands

  • Get list of enabled/disabled dell-storage application charts
~(keystone_admin)$ system helm-override-list dell-storage --long
  • Check csm/csi overrides
~(keystone_admin)$ system helm-override-show dell-storage <chart_name> dell-storage
  • Enable/Disable chart:
~(keystone_admin)$  system helm-chart-attribute-modify --enabled <true/false> dell-storage <chart_name> dell-storage
  • Apply overrides
~(keystone_admin)$ system helm-override-update dell-storage <chart_name> dell-storage --values=<override_file>
  • Get dell-storage pods list
~(keystone_admin)$  kubectl get pods -n dell-storage
  • Apply/Abort/Remove dell-storage application
~(keystone_admin)$  system application-<apply/abort/remove> dell-storage

Testing

Requirements

The following tests assume that you first done the following checks:

  • Verify dell-storage is successfully uploaded
~(keystone_admin)$ system application-list
+--------------------------+-----------+-------------------------------+------------------+----------+-----------+
| application              | version   | manifest name                 | manifest file    |  status  | progress  |
+--------------------------+-----------+-------------------------------+------------------+----------+-----------+
| dell-storage             | 1.0-36    | dell-storage-fluxcd-manifests | fluxcd-manifests | uploaded | completed |
+--------------------------+-----------+-------------------------------+------------------+----------+-----------+
 
  • Check enabled charts
  ~(keystone_admin)$ system helm-override-list dell-storage --long
  +--------------------------+----------------------+---------------+
  | chart name               | overrides namespaces | chart enabled |
  +--------------------------+----------------------+---------------+
  | csi-powerflex            | ['dell-storage']     | [False]       |
  | csi-powermax             | ['dell-storage']     | [False]       |
  | csi-powerscale           | ['dell-storage']     | [False]       |
  | csi-powerstore           | ['dell-storage']     | [True]        |
  | csi-unity                | ['dell-storage']     | [False]       |
  | csm-observability        | ['dell-storage']     | [False]       |
  | csm-replication          | ['dell-storage']     | [False]       |
  +--------------------------+----------------------+---------------+
 
  • Enable the charts that will be tested and disable any other chart
~(keystone_admin) system helm-chart-attribute-modify --enabled true dell-storage <testing_chart> dell-storage
~(keystone_admin) system helm-chart-attribute-modify --enabled false dell-storage <any_other_chart> all-storage
 
  • Changes on user overrides will only be effective after the application apply. So if the dell-storage application is already applied you need to remove and re-apply the application.
# Remove dell-storage application
~(keystone_admin)$ system application-remove dell-storage
# Apply user override
~(keystone_admin)$ system helm-override-update dell-storage <chart> dell-storage --values=<user_override_file>
# Apply dell-storage application
~(keystone_admin)$ system application-apply dell-storage
 

csi-powerstore

  • Create user override
~(keystone_admin)$ cat << EOF > ~/powerstoreOverrides.yaml
storageClasses:
- name: csi-powerstore-nfs
  arrayID: <ARRAY_ID>
  fstype: ext4
  nasName: NAS1
secret:
  arrays:
  - globalID: <GLOBAL_ID>
    username: <USERNAME>
    password: <PASSWORD>
    endpoint: https://<POWERSTORE_ADDRESS>/api/rest
    isDefault: true
    blockProtocol: None
    nasName: NAS1
EOF
 
  • Apply user override
~(keystone_admin)$ system helm-override-update dell-storage csi-powerstore dell-storage --values=~/powerstoreOverrides.yaml
  • Check if install is successful
~(keystone_admin)$ kubectl get pods -n dell-storage
NAME                                         READY   STATUS              RESTARTS           AGE
csi-powerstore-controller-6646dc49f6-6dpxm   6/6     Pending             0                  6h
csi-powerstore-controller-6646dc49f6-pshjn   6/6     Running             0                  6h
csi-powerstore-node-7g7ff                    2/2     Running             0                  6h
csi-powerstore-node-8qchp                    2/2     Running             0                  6h
csi-powerstore-node-p7z4t                    2/2     Running             0                  6h
csi-powerstore-node-vtg4l                    2/2     Running             0                  6h
 
  • Test configuration by creating StatefulSet
~(keystone_admin)$ cat << EOF > ~/powerstoreTest.yaml
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: pvol0
  namespace: dell-storage
spec:
  accessModes:
  - ReadWriteOnce
  volumeMode: Filesystem
  resources:
    requests:
      storage: 8Gi
  storageClassName: csi-powerstore-nfs
---
apiVersion: v1
kind: ServiceAccount
metadata:
    name: powerstoretest
    namespace: dell-storage
---
kind: StatefulSet
apiVersion: apps/v1
metadata:
    name: powerstoretest
    namespace: dell-storage
spec:
    serviceName: powerstoretest
    selector:
        matchLabels:
          app: powerstoretest
    template:
      metadata:
        labels:
          app: powerstoretest
      spec:
        serviceAccount: powerstoretest
        hostNetwork: true
        containers:
          - name: test
            image: quay.io/centos/centos:latest
            command: [ "/bin/sleep", "3600" ]
            volumeMounts:
              - mountPath: "/data0"
                name: pvol0
        volumes:
          - name: pvol0
            persistentVolumeClaim:
              claimName: pvol0
EOF
 
  • Apply it and check if the PVC is bound
~(keystone_admin)$ kubectl apply -f ~/powerstoreTest.yaml
~(keystone_admin)$ kubectl get pvc -n dell-storage

csi-unity

  • Enable chart:
~(keystone_admin)$  system helm-chart-attribute-modify --enabled true dell-storage csi-unity dell-storage
  • Create override to configure the storage connection:
~(keystone_admin)$ cat << EOF > ~/unityOverrides.yaml
csm:
  resiliency: false
app.starlingx.io/component: platform

storageClasses:
- name: <NAME>
  arrayId: <ARRAY_ID>
  nasServer: nas_2
  provisioner: csi-unity.dellemc.com
  fstype: nfs
  reclaimPolicy: Delete
  allowVolumeExpansion: true
  volumeBindingMode: Immediate
  mountOptions: ["hard"]
  hostIoSize: 8192
  tieringPolicy: 0
  isDataReductionEnabled: "false"
  thinProvisioned: "true"
  storagePool: pool_2
  protocol: NFS
  allowedTopologies:
    - matchLabelExpressions:
      - key: "csi-unity.dellemc.com/<ARRAY_ID>"
        values:
          - "true"

secret:
  arrays:
  - arrayId: <ARRAY_ID>
    username: <USER>
    password: <PASSWORD>
    endpoint: https://<UNITY_ADDRESS>
    isDefault: true
    skipCertificateValidation: true
EOF
 
  • Apply override
~(keystone_admin)$ system helm-override-update dell-storage csi-unity dell-storage --values=~/unityOverrides.yaml
  • Apply chart:
~(keystone_admin)$ system application-apply dell-storage

csi-powerflex

  • Enable chart:
~(keystone_admin)$  system helm-chart-attribute-modify --enabled true dell-storage csi-powerflex dell-storage
  • Create override to configure the storage connection:
~(keystone_admin)$ cat << EOF > ~/powerflexOverrides.yaml
app.starlingx.io/component: platform

storageClasses:
- name: csi-powerflex-nfs
  arrayId: <ARRAY_ID>
  nasServer: nas_2
  provisioner: csi-vxflexos.dellemc.com
  fstype: nfs
  path: /target
  reclaimPolicy: Delete
  allowVolumeExpansion: true
  volumeBindingMode: Immediate
  mountOptions: ["hard"]
  hostIoSize: 8192
  tieringPolicy: 0
  isDataReductionEnabled: "false"
  thinProvisioned: "true"
  storagePool: pool_2
  protocol: NFS

secret:
  arrays:
  - arrayId: <ARRAYID>
    username: <USERNAME>
    password: <PASSWORD>
    systemID: <SYSTEM_ID>
    allSystemNames: "pflex-1"
    endpoint: https://<POWERFLEX_ADDRESS>/api/rest
    isDefault: true
    skipCertificateValidation: true
    nasName: nas_2
EOF
 
  • Apply override
~(keystone_admin)$ system helm-override-update dell-storage csi-powerflex dell-storage --values=~/powerflexOverrides.yaml
  • Apply chart:
~(keystone_admin)$ system application-apply dell-storage


csi-powermax

  • Enable chart:
~(keystone_admin)$  system helm-chart-attribute-modify --enabled true dell-storage csi-powermax dell-storage
  • Create override to configure the storage connection:
~(keystone_admin)$ cat << EOF > ~/powermaxOverrides.yaml
secret:
  username: <USERNAME>
  password: <PASSWORD>

authorization:
  configs:
    - username: <USERNAME>
      password: <PASSWORD>
      intendedEndpoint: endpoint1
      systemID: <SYSTEM_ID>
      isDefault: true

global:
  managementServers:
    - endpoint: https://primary-1.unisphe.re:8443
      credentialsSecret: primary-1-secret
      username: <USERNAME>
      password: <PASSWORD>
      skipCertificateValidation: true

storageClasses:
- name: <NAME>
  SRP: <SRP
  SYMID: <SYMID>
  ApplicationPrefix: <APP_PREFIX>
  HostLimitName: "1000"
  DynamicDistribution: "Optimized
 
  • Apply override
~(keystone_admin)$ system helm-override-update dell-storage csi-powermax dell-storage --values=~/powermaxOverrides.yaml
  • Apply chart:
~(keystone_admin)$ system application-apply dell-storage

csi-powerscale

  • Enable chart:
~(keystone_admin)$  system helm-chart-attribute-modify --enabled true dell-storage csi-powerscale dell-storage
  • Create override to configure the storage connection:
~(keystone_admin)$ cat << EOF > ~/powerscaleOverrides.yaml

isiPath: "/my/isi/path"

controller:
  replication:
    replicationPrefix: "myCustomReplicationPrefix"

secret:
  arrays:
  - clusterName: Cluster1
    username: <USERNAME>
    password: <PASSWORD>
    endpoint: https://<cluster1_address>
    endpointPort: 8888
    isDefault: true
    skipCertificateValidation: false
    isiPath: "/my/isi/path"
    isiVolumePathPermissions: "0755"
    ignoreUnresolvableHosts: true
    replicationCertificateID: "dd9c736cc17e6dd5f7d85fe13528cfc20f3b4b0af4f26595d22328c8d1f461af"
    authorizationEndpoint: "https://localhost:9999"

  - clusterName: "Cluster2"
    username: <USERNAME>
    password: <PASSWORD>
    endpoint: https://<cluster2_address>
    isiPath: "/my/isi/path2"

storageClasses:
- name: "storageClassDefault"

proxyAuthzTokens:
  access: "YWJjZGVmCg=="
  refresh: "YWJjZGVmCg=="
 
  • Apply override
~(keystone_admin)$ system helm-override-update dell-storage csi-powerscale dell-storage --values=~/powerscaleOverrides.yaml
  • Apply chart:
~(keystone_admin)$ system application-apply dell-storage

CSMs

CSM Observability

  • Enable the csm-observability chart:
~(keystone_admin)$ system helm-chart-attribute-modify --enabled true dell-storage csm-observability dell-storage
  • Create and apply user overrides enabling the metrics that you need:
~(keystone_admin)$ cat << EOF > ~/observabilityOverrides.yaml
karaviMetricsPowerstore:
    enabled: true
karaviMetricsPowerflex:
    enabled: false
karaviMetricsPowerscale:
    enabled: false
karaviMetricsPowermax:
    enabled: false
EOF
 
  • Apply the overrides:
~(keystone_admin)$ system helm-override-update dell-storage csm-observability dell-storage --values=~/observabilityOverrides.yml
  • Apply the application
~(keystone_admin)$ system application-apply dell-storage
  • You can check that the metrics are being generated by accessing the otel-collector pod API:
curl -k https://$(kubectl get -n dell-storage pods -o wide | grep otel-collector | awk '{print $6}'):8443/metrics

CSM Resiliency

To enable csm-resiliency, you need to enable it by adding csm.resiliency: true parameter on the user overrides and apply it. Using the Powerstore as example:

~(keystone_admin)$ cat << EOF > ~/powerstoreOverrides.yaml
csm:
resiliency: true
storageClasses:
- name: csi-powerstore-iscsi
arrayID: <ARRAY_ID>
fstype: ext4
secret:
arrays:
- globalID: <GLOBAL_ID>
    username: <powerstore_user>
    password: <powerstore_password>
    endpoint: https://<powerstore_address>/api/rest
    isDefault: true
    blockProtocol: "ISCSI"
EOF
 
  • Apply the user overrides
~(keystone_admin)$ system helm-override-update dell-storage csi-powerstore dell-storage --values=~/powerstoreOverrides.yaml
  • Apply the application
~(keystone_admin)$ system application-apply dell-storage

CSM Replication

  • Ensure that the csm-replication chart is enabled
~(keystone_admin)$ system helm-chart-attribute-modify --enabled true dell-storage csm-replication dell-storage
  • Enable it by adding ``csm.replication: true`` on user overrides and apply it. Using the Powerstore as example
~(keystone_admin)$ cat << EOF > ~/powerstoreOverrides.yaml
csm:
replication: true
app.starlingx.io/component: platform
storageClasses:
- name: csi-powerstore-iscsi
arrayID: <ARRAY_ID>
fstype: ext4
replication:
    remoteStorageClassName: remote_storageclass
    remoteClusterID: remote_clusterid
    remoteSystem: remote_system
    rpo: "Five_Minutes"
    ignoreNamespaces: false
    volumeGroupPrefix: <VOLUME_GROUP_PREFIX>
secret:
arrays:
- globalID: <GLOBAL_ID>
    username: <USERNAME>
    password: <PASSWORD>
    endpoint: https://<powerstore_address>/api/rest
    isDefault: true
    blockProtocol: "ISCSI"
EOF
 
  • Apply the user overrides
~(keystone_admin)$ system helm-override-update dell-storage csi-powerstore dell-storage --values=~/powerstoreOverrides.yaml
  • Apply the application
~(keystone_admin)$ system application-apply dell-storage