health storage-performance

Check storage performance on your cluster.

Extended description

The cpd-cli health storage-performance command uses the Kubernetes Storage Performance tool to collect storage performance metrics from your Red Hat® OpenShift® Container Platform cluster.

The cpd-cli health storage-performance command checks the I/O performance of your storage by measuring:
  • Disk latency
  • Disk throughput

For more information about I/O performance requirements, see Disk requirements in the IBM® Software Hub hardware requirements.

Important: The cpd-cli health storage-performance command creates resources on your cluster. You can run the cleanup.sh script to list and delete the resources.

Prerequisites

Before you run the cpd-cli health storage-performance command:

  1. Source your installation environment variables script.
  2. Log in to Red Hat OpenShift Container Platform as a cluster administrator.
    ${OC_LOGIN}
    Remember: OC_LOGIN is an alias for the oc login command.
  3. If you pull images from a private container registry, complete Pulling the required image from a private container registry.
  4. Set the STORAGE_PERF_NS environment variable to the name of the project where you want to create the resources that are required for the storage performance tests.

    The recommended project name is ibm-storage-perf.

    export STORAGE_PERF_NS=<project-name>

    If you specify a project that does not exist, the storage-performance command creates the project on your cluster.

  5. Set the IMAGE_LOCATION environment variable based on the registry that your cluster pulls images from:
    IBM Entitled Registry
    export IMAGE_LOCATION=icr.io
    Private container registry
    export IMAGE_LOCATION=${PRIVATE_REGISTRY_LOCATION}
  6. Set the following environment variables based on the credentials that you want to use to authenticate.
    Important: You must provide the credentials for a cluster administrator.
    Username and password
    export STG_PERF_USERNAME=${OCP_USERNAME}
    export STG_PERF_PASSWORD=${OCP_PASSWORD}
    export STG_PERF_TOKEN="<not-specified>"
    export STG_PERF_API_KEY="<not-specified>"
    Token
    export STG_PERF_USERNAME="<required>"
    export STG_PERF_PASSWORD="<required>"
    export STG_PERF_TOKEN=${OCP_TOKEN}
    export STG_PERF_API_KEY="<not-specified>"
    API key
    export STG_PERF_USERNAME="<required>"
    export STG_PERF_PASSWORD="<required>"
    export STG_PERF_TOKEN="<not-specified>"
    export STG_PERF_API_KEY=<enter-your-api-key>
  7. Set the following environment variables to identify the cluster where you are running the storage-performance command. This information is included in the report that is generated by the command:
    1. Set the CLUSTER_INFRA environment variable based on the infrastructure where your cluster is hosted.

      Choose a value that is meaningful to you, such as ibmcloud, vmware, or fusion-hci.

      export CLUSTER_INFRA=<infra-type>
    2. Set the CLUSTER_NAME environment variable to the name that you use to identify the cluster:
      export CLUSTER_NAME=<cluster-name>
    3. Set the CLUSTER_STORAGE environment variable based on the type of persistent storage that you use.

      Choose a value that is meaningful to you, such as fusion-data-foundation, netapp, ebs-efs, nutanix

      export CLUSTER_STORAGE=<persistent-storage-type>
  8. Change to the directory on your workstation where you want to create the param.yml file.
  9. Create a param.yml file based on the tests that you want to run:
    Minimum required metrics
    cat << EOF > ./param.yml
    # OCP Parameters
    ocp_url: ${OCP_URL}
    ocp_username: ${STG_PERF_USERNAME}
    ocp_password: ${STG_PERF_PASSWORD}
    ocp_token: ${STG_PERF_TOKEN}
    ocp_apikey: ${STG_PERF_API_KEY}
    
    storageClass_ReadWriteOnce: ${STG_CLASS_BLOCK}
    storageClass_ReadWriteMany: ${STG_CLASS_FILE}
    
    run_storage_perf: true
    
    arch: ${IMAGE_ARCH}
    
    ############################ STORAGE PERFORMANCE PARAMETERS START #######################
    # vars file for roles/storage-perf-test
    storage_perf_namespace: ${STORAGE_PERF_NS}
    logfolder: '.logs'
    imageurl: ${IMAGE_LOCATION}/cpopen/cpd/k8s-storage-perf:${VERSION}
    
    cluster_infrastructure: ${CLUSTER_INFRA}
    cluster_name: ${CLUSTER_NAME}
    storage_type: ${CLUSTER_STORAGE}
    
    # To run the performace jobs on a dedicated compute nodes, set the node label which meet the criteria.
    # The idea is to gather performance data when the jobs are running remotely from a storage node.
    # A cluster administrator can label a node by running this query with appropriate label key/value: 
    # oc label node <node name> "<label_key>=<label_value>" --overwrite
    dedicated_compute_node:
       label_key: "<optional>"
       label_value: "<optional>"
    
    # The size of persistent volume claims (PVCs) for ReadWriteMany (RWX) storage classes.
    # If your storage provider offers different storage tiers or if the volume size limits the IOPS capacity,
    # follow the guidance from your storage provider to ensure you have sufficient IOPS. 
    rwx_storagesize: 10Gi
    
    # The size of persistent volume claims (PVCs) for ReadWriteOnce (RWO) storage classes.
    # If your storage provider offers different storage tiers or if the volume size limits the IOPS capacity,
    # follow the guidance from your storage provider to ensure you have sufficient IOPS. 
    rwo_storagesize: 10Gi
    
    # Do not change the file_extra_flags setting. You must use dsync to ensure that the output of the 
    # storage performance tool is accurate.
    file_extra_flags: dsync
    
    #sysbench random read
    sysbench_random_read: false
    rread_threads: 8            # 1,4,8,16
    rread_fileTotalSize: 128m
    rread_fileNum: 128
    rread_fileBlockSize: 4k     # 4k,8k,16k
    
    #sysbench random write
    sysbench_random_write: true
    rwrite_threads: 8           # 1,4,8,16
    rwrite_fileTotalSize: 4096m
    rwrite_fileNum: 4
    rwrite_fileBlockSize: 4k    # 4k,8k,16k
    
    #sysbench sequential read
    sysbench_sequential_read: false
    sread_threads: 2            # 1,2
    sread_fileTotalSize: 4096m
    sread_fileNum: 4
    sread_fileBlockSize: 1g     # 512m,1g
    
    #sysbench sequential write
    sysbench_sequential_write: true
    swrite_threads: 2           # 1,2
    swrite_fileTotalSize: 4096m
    swrite_fileNum: 4
    swrite_fileBlockSize: 1g    # 512m,1g
    
    ############################ STORAGE PERFORMANCE PARAMETERS END #########################
    EOF

    Minimum required metrics and write metrics
    cat << EOF > ./param.yml
    # OCP Parameters
    ocp_url: ${OCP_URL}
    ocp_username: ${STG_PERF_USERNAME}
    ocp_password: ${STG_PERF_PASSWORD}
    ocp_token: ${STG_PERF_TOKEN}
    ocp_apikey: ${STG_PERF_API_KEY}
    
    storageClass_ReadWriteOnce: ${STG_CLASS_BLOCK}
    storageClass_ReadWriteMany: ${STG_CLASS_FILE}
    
    run_storage_perf: true
    
    arch: ${IMAGE_ARCH}
    
    ############################ STORAGE PERFORMANCE PARAMETERS START #######################
    # vars file for roles/storage-perf-test
    storage_perf_namespace: ${STORAGE_PERF_NS}
    logfolder: '.logs'
    imageurl: ${IMAGE_LOCATION}/cpopen/cpd/k8s-storage-perf:${VERSION}
    
    cluster_infrastructure: ${CLUSTER_INFRA}
    cluster_name: ${CLUSTER_NAME}
    storage_type: ${CLUSTER_STORAGE}
    
    # To run the performace jobs on a dedicated compute nodes, set the node label which meet the criteria.
    # The idea is to gather performance data when the jobs are running remotely from a storage node.
    # A cluster administrator can label a node by running this query with appropriate label key/value: 
    # oc label node <node name> "<label_key>=<label_value>" --overwrite
    dedicated_compute_node:
       label_key: "<optional>"
       label_value: "<optional>"
    
    rwx_storagesize: 10Gi
    rwo_storagesize: 10Gi
    
    file_extra_flags: dsync
    
    #sysbench random read
    sysbench_random_read: false
    rread_threads: 1,4,8,16
    rread_fileTotalSize: 128m
    rread_fileNum: 128
    rread_fileBlockSize: 4k     # 4k,8k,16k
    
    #sysbench random write
    sysbench_random_write: true
    rwrite_threads: 1,4,8,16
    rwrite_fileTotalSize: 4096m
    rwrite_fileNum: 4
    rwrite_fileBlockSize: 4k    # 4k,8k,16k
    
    #sysbench sequential read
    sysbench_sequential_read: false
    sread_threads: 1,2
    sread_fileTotalSize: 4096m
    sread_fileNum: 4
    sread_fileBlockSize: 1g     # 512m,1g
    
    #sysbench sequential write
    sysbench_sequential_write: true
    swrite_threads: 1,2
    swrite_fileTotalSize: 4096m
    swrite_fileNum: 4
    swrite_fileBlockSize: 1g    # 512m,1g
    
    ############################ STORAGE PERFORMANCE PARAMETERS END #########################
    EOF

    Minimum required metrics, write metrics, and read metrics
    cat << EOF > ./param.yml
    # OCP Parameters
    ocp_url: ${OCP_URL}
    ocp_username: ${STG_PERF_USERNAME}
    ocp_password: ${STG_PERF_PASSWORD}
    ocp_token: ${STG_PERF_TOKEN}
    ocp_apikey: ${STG_PERF_API_KEY}
    
    storageClass_ReadWriteOnce: ${STG_CLASS_BLOCK}
    storageClass_ReadWriteMany: ${STG_CLASS_FILE}
    
    run_storage_perf: true
    
    arch: ${IMAGE_ARCH}
    
    ############################ STORAGE PERFORMANCE PARAMETERS START #######################
    # vars file for roles/storage-perf-test
    storage_perf_namespace: ${STORAGE_PERF_NS}
    logfolder: '.logs'
    imageurl: ${IMAGE_LOCATION}/cpopen/cpd/k8s-storage-perf:${VERSION}
    
    cluster_infrastructure: ${CLUSTER_INFRA}
    cluster_name: ${CLUSTER_NAME}
    storage_type: ${CLUSTER_STORAGE}
    
    # To run the performace jobs on a dedicated compute nodes, set the node label which meet the criteria.
    # The idea is to gather performance data when the jobs are running remotely from a storage node.
    # A cluster administrator can label a node by running this query with appropriate label key/value: 
    # oc label node <node name> "<label_key>=<label_value>" --overwrite
    dedicated_compute_node:
       label_key: "<optional>"
       label_value: "<optional>"
    
    rwx_storagesize: 10Gi
    rwo_storagesize: 10Gi
    
    file_extra_flags: dsync
    
    #sysbench random read
    sysbench_random_read: true
    rread_threads: 1,4,8,16
    rread_fileTotalSize: 128m
    rread_fileNum: 128
    rread_fileBlockSize: 4k,8k,16k
    
    #sysbench random write
    sysbench_random_write: true
    rwrite_threads: 1,4,8,16
    rwrite_fileTotalSize: 4096m
    rwrite_fileNum: 4
    rwrite_fileBlockSize: 4k,8k,16k
    
    #sysbench sequential read
    sysbench_sequential_read: true
    sread_threads: 1,2
    sread_fileTotalSize: 4096m
    sread_fileNum: 4
    sread_fileBlockSize: 512m,1g
    
    #sysbench sequential write
    sysbench_sequential_write: true
    swrite_threads: 1,2
    swrite_fileTotalSize: 4096m
    swrite_fileNum: 4
    swrite_fileBlockSize: 512m,1g
    
    ############################ STORAGE PERFORMANCE PARAMETERS END #########################
    EOF

Pulling the required image from a private container registry

The k8s-storage-perf image is automatically mirrored when you mirror the IBM Software Hub images to your private container registry.

Before you run the cpd-cli health storage-performance command, you must authorize the client runtime environment on your workstation to pull the k8s-storage-perf image from the private container registry:

  1. Ensure that Docker or Podman is running on the client workstation.
  2. Source your installation environment variables script.
  3. Authenticate to your private container registry:
    • Docker
      docker login ${PRIVATE_REGISTRY_LOCATION} \
      -u ${PRIVATE_REGISTRY_PULL_USER} \
      -p ${PRIVATE_REGISTRY_PULL_PASSWORD}
    • Podman
      podman login ${PRIVATE_REGISTRY_LOCATION} \
      -u ${PRIVATE_REGISTRY_PULL_USER} \
      -p ${PRIVATE_REGISTRY_PULL_PASSWORD}

To use the k8s-storage-perf image from your private container registry, you must specify the following options when you run the cpd-cli health storage-performance command:

  • --image-prefix
  • --image-tag

For example:

cpd-cli health storage-performance \
--image-prefix=${PRIVATE_REGISTRY_LOCATION} \
--image-tag=${VERSION}.${IMAGE_ARCH} \
--param=param.yml

Syntax

cpd-cli health storage-performance \
--param <path of param.yml file>
[--image-prefix=<image-registry-prefix>] \
[--image-tag=<image-tag>

Arguments

The command has no arguments.

Options

Table 1: Command options
Option Description
--image-prefix Specify the registry that the image should be pulled from.
Status
Required if your cluster pulls images from a private container registry.
Syntax
--image-prefix=<image-registry-prefix>
Default value
icr.io/cpopen/cpd

If you omit this option, the default value is used.

Valid values
IBM Entitled Registry
icr.io/cpopen/cpd
Private container registry
${PRIVATE_REGISTRY_LOCATION}
--image-tag Specify the tag that identifies the image in the repository.

The tag must exist on the k8s-storage-perf image in the repository that you specified for the --image-prefix option.

Status
Required if your cluster pulls images from a private container registry.
Syntax
--image-tag=<image-tag>
Default value
No default.
Valid values
The value depends on which image you want to pull.
Tip: If you mirrored the images to a private container registry using the --arch flag, use the single-arch image.
Multi-arch image
${VERSION}
Single-arch image
${VERSION}.IMAGE_ARCH
--param The path of the YAML that defines the parameters required to run the storage performance test.
Status
Required.
Syntax
--param <path of param.yml file>
Default value
No default.
Valid values
The fully qualified path of the param.yml file.

Cleanup

Run a cleanup script to remove any resources that were created after you ran the cpd-cli health storage-performance command. The cleanup.sh script takes the following arguments:

Follow these steps to run the cleanup.sh script:

  1. Save the following script file as a shell script, cleanup.sh :
    #!/usr/bin/env sh
    
    HELP="
    This script lists storage test resources in the supplied namespace. If the '--delete' flag is provided, it removes those resources.
    
    USAGE:
      cleanup.sh --namespace <namespace> <--delete>
    
    FLAGS:
      -c | --command:           (Required) The cpd-cli storage command resources to list and/or clean up, storage-performance|storage-validation.
      --delete:                 Delete storage test resources created in --namespace.
      -n | --namespace:         (Required) The namespace specified in param.yml, storage_validation_namespace|storage_perf_namespace.
      -h | --help:              Show help for cleanup.sh
    "
    NAMESPACE=
    COMMAND=
    DELETE_RESOURCES="0"
    
    CM_SEARCH=
    JOB_SEARCH=
    PVC_SEARCH=
    LOCAL_CONTAINER=
    
    log() {
      prefix=""
      case "${1}" in
      info)
        prefix="[INFO ]"
        ;;
      debug)
        prefix="[DEBUG]"
        ;;
      error)
        prefix="[ERROR]"
        ;;
      *)
        prefix=""
        ;;
      esac
      echo "${prefix} ${2}"
    }
    
    print_usage() {
      log noop "${HELP}"
    }
    
    set_vars() {
      if [ "${COMMAND}" == "storage-performance" ]; then
        PVC_SEARCH="pvc-sysbench-rwo\|pvc-sysbench-rwx"
        JOB_SEARCH="sysbench-random-\|sysbench-sequential-"
        LOCAL_CONTAINER="k8s-storage-perf"
      fi
    
      if [ "${COMMAND}" == "storage-validation" ]; then
        CM_SEARCH="consumer\|producer"
        PVC_SEARCH="readiness-readwritemany\|readiness-readwriteonce"
        JOB_SEARCH="readiness-consumer\|readiness-create\|readiness-edit\|readiness-file\|readiness-mount\|readiness-producer\|readiness-read"
        LOCAL_CONTAINER="k8s-storage-val"
      fi
    }
    
    list() {
      echo "\nListing ${COMMAND} cluster resources in namespace: ${NAMESPACE}"
      
      if [ -n "${CM_SEARCH}" ]; then
        echo "\nCONFIGMAPS:"
        oc get cm -n ${NAMESPACE} | sed -n "1p;/${CM_SEARCH}/p"
      fi
      
      echo "\nPVCS:"
      oc get pvc -n ${NAMESPACE} | sed -n "1p;/${PVC_SEARCH}/p"
      echo "\nJOBS:"
      oc get job -n ${NAMESPACE} | sed -n "1p;/${JOB_SEARCH}/p"
    
      echo "\nLocal ${COMMAND} playbook container:"
      podman ps -a --filter="name=${LOCAL_CONTAINER}"
      echo ""
    }
    
    delete_resources() {
        echo "\nDeleting ${COMMAND} cluster resources from namespace: ${NAMESPACE}"
        oc get job -n ${NAMESPACE} -o name | grep "${JOB_SEARCH}" | xargs -I % -n 1 oc delete % -n ${NAMESPACE}
    
        if [ -n "${CM_SEARCH}" ]; then
          oc get cm -n ${NAMESPACE} -o name | grep "${CM_SEARCH}" | xargs -I % -n 1 oc delete % -n ${NAMESPACE}
        fi
        
        sleep 10
        oc get pvc -n ${NAMESPACE} -o name | grep "${PVC_SEARCH}" | xargs -I % -n 1 oc delete % -n ${NAMESPACE}
    
        echo "\nRemoving local ${COMMAND} container:"
        podman rm -f ${LOCAL_CONTAINER}
        echo ""
    }
    
    run() {
      # confirm required flags have been provided  
      if [ -z "${NAMESPACE}" ]; then
        log error "You must specify the --namespace option. For example: --namespace <project-name>"
        print_usage
        exit 1
      fi
      if [ "${COMMAND}" != "storage-performance" ] && [ "${COMMAND}" != "storage-validation" ]; then
        log error "You must specify the --command option. For example: --command <storage-performance|storage-validation>"
        print_usage
        exit 1
      fi
    
      # set command-specific variables
      set_vars
    
      # show resources
      list
    
      # delete storage test resources and re-run list to confirm deletion
      if [ "${DELETE_RESOURCES}" -eq "1" ]; then
        delete_resources
      fi
    
      exit 0
    }
    
    # Parse CLI args
    while [ "${1-}" != "" ]; do
        case $1 in
        --namespace | -n)
            shift
            NAMESPACE="${1}"
            ;;
        --command | -c)
            shift
            COMMAND="${1}"
            ;;    
        --delete)
            shift
            DELETE_RESOURCES="1"
            ;;
        --help | -h)
            print_usage 0
            exit 0
            ;;
        *)
            echo "Invalid Option ${1}" >&2
            exit 1
            ;;
        esac
        shift
    done
    
    run

  2. If you are using a Mac or Linux® client workstation, update the file permissions so you can run the script:
    chmod +x % ./cleanup.sh
Table: Arguments for cleanup.sh script
Argument Description
-c--command
Description
The cpd-cli storage command, storage-performance|storage-validation, that created resources to list or clean up.
Status
Required.
--delete
Description
Removes storage test resources that were created in --namespace.
Status
Optional.
-n--namespace
Description
The namespace specified in the param.yml file: storage_validation_namespace|storage_perf_namespace.
Status
Optional.
-h--help Show help for cleanup.sh

Examples

Standard run.
cpd-cli health storage-performance \
--param param.yml

Sample output.

% cpd-cli health storage-performance --param=param-perf.yaml
INFO[0000] health                                        event=Information info="Creating directory /Users/test/cpd-cli-darwin-EE-14.1.1-1650/cpd-cli-workspace/Health/Storage/Performance" trace=9e814e81-5e9d-4c76-99ac-764de307a98b
[INFO] 2025-02-24T20:05:10.712376Z Creating directory /Users/test/cpd-cli-darwin-EE-14.1.1-1650/cpd-cli-workspace/Health/Storage/Performance
INFO[0000] manage(olm-utils)                             event=Information info="Checking podman or docker" trace=9e814e81-5e9d-4c76-99ac-764de307a98b
[INFO] 2025-02-24T20:05:10.713314Z Checking podman or docker
INFO[0000] health                                        event=Information info="Dockerexe: podman" trace=9e814e81-5e9d-4c76-99ac-764de307a98b
[INFO] 2025-02-24T20:05:10.891820Z Dockerexe: podman
INFO[0000] health                                        event=Information info="Checking if the container image exists locally or not" trace=9e814e81-5e9d-4c76-99ac-764de307a98b
[INFO] 2025-02-24T20:05:11.142675Z Checking if the container image exists locally or not
INFO[0000] health                                        event=Information info="Container image icr.io/cpopen/cpd/k8s-storage-perf:5.1.1 is present" trace=9e814e81-5e9d-4c76-99ac-764de307a98b
[INFO] 2025-02-24T20:05:11.395063Z Container image icr.io/cpopen/cpd/k8s-storage-perf:5.1.1 is present
INFO[0000] health                                        event=Information info="Start the k8s-storage-perf container" trace=9e814e81-5e9d-4c76-99ac-764de307a98b
[INFO] 2025-02-24T20:05:11.395101Z Start the k8s-storage-perf container
INFO[0002] health                                        event=Information info="Run command: podman run -d --name k8s-storage-perf --platform linux/amd64 -v /Users/test/cpd-cli-darwin-EE-14.1.1-1650/cpd-cli-workspace/Health/Storage/Performance:/tmp/work-dir  icr.io/cpopen/cpd/k8s-storage-perf:5.1.1" trace=9e814e81-5e9d-4c76-99ac-764de307a98b
[INFO] 2025-02-24T20:05:13.201469Z Run command: podman run -d --name k8s-storage-perf --platform linux/amd64 -v /Users/test/cpd-cli-darwin-EE-14.1.1-1650/cpd-cli-workspace/Health/Storage/Performance:/tmp/work-dir  icr.io/cpopen/cpd/k8s-storage-perf:5.1.1

PLAY [localhost] ***************************************************************

TASK [ocp login using creds] ***************************************************
changed: [localhost]

TASK [ocp login using token] ***************************************************
skipping: [localhost]

TASK [ocp login using apikey] **************************************************
skipping: [localhost]

TASK [debug] *******************************************************************
ok: [localhost] => {
    "login_creds.stdout_lines": [
        "WARNING: Using insecure TLS client config. Setting this option is not supported!",
        "",
        "Login successful.",
        "",
        "You have access to 91 projects, the list has been suppressed. You can list all projects with 'oc projects'",
        "",
        "Using project \"default\".",
        "Welcome! See 'oc help' to get started."
    ]
}

TASK [debug] *******************************************************************
skipping: [localhost]

TASK [debug] *******************************************************************
skipping: [localhost]

TASK [Storage Performance] *****************************************************
included: storage-perf-test for localhost

TASK [storage-perf-test : Setup PVCs to run test on] ***************************
changed: [localhost]

TASK [storage-perf-test : Wait few seconds for the PVC] ************************
Pausing for 60 seconds
ok: [localhost]

TASK [storage-perf-test : Create logs directory] *******************************
changed: [localhost]

TASK [storage-perf-test : Run sysbench random read RWO test] *******************
skipping: [localhost]

TASK [storage-perf-test : Get logs of the sysbench random read pod for RWO] ****
skipping: [localhost]

TASK [storage-perf-test : Save Log to local file] ******************************
skipping: [localhost]

TASK [storage-perf-test : Run sysbench random write RWO test] ******************
changed: [localhost]

TASK [storage-perf-test : Get logs of the sysbench random write pod for RWO] ***
ok: [localhost]

TASK [storage-perf-test : Save random write Log to local file] *****************
changed: [localhost]

TASK [storage-perf-test : Run sysbench sequential read rwo test] ***************
skipping: [localhost]

TASK [storage-perf-test : Get logs of the sysbench sequential read pod for RWO] ***
skipping: [localhost]

TASK [storage-perf-test : Save Log to local file] ******************************
skipping: [localhost]

TASK [storage-perf-test : Run sysbench sequential write rwo test] **************
changed: [localhost]

TASK [storage-perf-test : Get logs of the sysbench sequential write pod for RWO] ***
ok: [localhost]

TASK [storage-perf-test : Save sequential write Log to local file] *************
changed: [localhost]

TASK [storage-perf-test : Run sysbench random read RWX test] *******************
skipping: [localhost]

TASK [storage-perf-test : Get logs of the sysbench random read pod for RWX] ****
skipping: [localhost]

TASK [storage-perf-test : Save Log to local file] ******************************
skipping: [localhost]

TASK [storage-perf-test : Run sysbench random write RWX test] ******************
changed: [localhost]

TASK [storage-perf-test : Get logs of the sysbench random write pod for RWX] ***
ok: [localhost]

TASK [storage-perf-test : Save random write Log to local file] *****************
changed: [localhost]

TASK [storage-perf-test : Run sysbench sequential read RWX test] ***************
skipping: [localhost]

TASK [storage-perf-test : Get logs of the sysbench sequential read pod for RWX] ***
skipping: [localhost]

TASK [storage-perf-test : Save Log to local file] ******************************
skipping: [localhost]

TASK [storage-perf-test : Run sysbench sequential write rwx test] **************
changed: [localhost]

TASK [storage-perf-test : Get logs of the sysbench sequential write pod for RWX] ***
ok: [localhost]

TASK [storage-perf-test : Save sequential write Log to local file] *************
changed: [localhost]

TASK [storage-perf-test : Create CSV file] *************************************
changed: [localhost]

TASK [storage-perf-test : Output node lists to CSV] ****************************
changed: [localhost]

TASK [storage-perf-test : Output pod lists to CSV] *****************************
changed: [localhost]

TASK [storage-perf-test : Output job lists to CSV] *****************************
changed: [localhost]

TASK [storage-perf-test : Print to file] ***************************************
changed: [localhost]

TASK [storage-perf-test : Package storage-perf.tar] ****************************
changed: [localhost]

PLAY RECAP *********************************************************************
localhost                  : ok=24   changed=17   unreachable=0    failed=0    skipped=16   rescued=0    ignored=0

INFO[0340] health                                        event=Information info="Run command: podman cp k8s-storage-perf:/opt/ansible/storage-perf.tar /Users/test/cpd-cli-darwin-EE-14.1.1-1650/cpd-cli-workspace/Health/Storage/Performance" trace=9e814e81-5e9d-4c76-99ac-764de307a98b
[INFO] 2025-02-24T20:10:50.977622Z Run command: podman cp k8s-storage-perf:/opt/ansible/storage-perf.tar /Users/test/cpd-cli-darwin-EE-14.1.1-1650/cpd-cli-workspace/Health/Storage/Performance
Example of the cleanup.sh script to list resources

The storage_perf_namespace namespace ibm-stor-perf is the namespace provided in the param.yml file:

% ./cleanup.sh --namespace ibm-stor-perf --command storage-performance
Example of the cleanup.sh script to delete resources
% ./cleanup.sh --namespace ibm-stor-perf --command storage-performance --delete
Example output from the cleanup.sh script to delete resources
% ./cleanup.sh --namespace ibm-stor-perf --command storage-performance --delete

Listing storage-performance cluster resources in namespace: ibm-stor-perf

PVCS:
NAME               STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS                  VOLUMEATTRIBUTESCLASS   AGE
pvc-sysbench-rwo   Bound    pvc-7591f82d-5ac5-4db8-abcb-209664a68b8c   10Gi       RWO            ocs-storagecluster-ceph-rbd   <unset>                 144m
pvc-sysbench-rwx   Bound    pvc-f06523df-0d72-40b4-8d23-e9a4082760e1   10Gi       RWX            ocs-storagecluster-cephfs     <unset>                 144m

JOBS:
NAME                            STATUS     COMPLETIONS   DURATION   AGE
sysbench-random-write-rwo       Complete   1/1           45s        143m
sysbench-random-write-rwx       Complete   1/1           45s        141m
sysbench-sequential-write-rwo   Complete   1/1           47s        142m
sysbench-sequential-write-rwx   Complete   1/1           51s        141m

Local storage-performance playbook container:
CONTAINER ID  IMAGE                                     COMMAND     CREATED      STATUS      PORTS       NAMES
6760f6beaaca  icr.io/cpopen/cpd/k8s-storage-perf:5.1.0              2 hours ago  Up 2 hours              k8s-storage-perf


Deleting storage-performance cluster resources from namespace: ibm-stor-perf
job.batch "sysbench-random-write-rwo" deleted
job.batch "sysbench-random-write-rwx" deleted
job.batch "sysbench-sequential-write-rwo" deleted
job.batch "sysbench-sequential-write-rwx" deleted
persistentvolumeclaim "pvc-sysbench-rwo" deleted
persistentvolumeclaim "pvc-sysbench-rwx" deleted

Removing local storage-performance container:
k8s-storage-perf

% ./cleanup.sh --namespace ibm-stor-perf --command storage-performance

Listing storage-performance cluster resources in namespace: ibm-stor-perf

PVCS:
No resources found in ibm-stor-perf namespace.

JOBS:
No resources found in ibm-stor-perf namespace.

Local storage-performance playbook container:
CONTAINER ID  IMAGE       COMMAND     CREATED     STATUS      PORTS       NAMES