---
name: satellite-storage-odf-remote
title: OpenShift Data Foundation for remote devices
description: Set up OpenShift Data Foundation for IBM Cloud Satellite&reg; clusters. You can use Satellite storage templates to create storage configurations. When you assign a storage configuration to your clusters, the storage drivers of the selected storage provider are installed in your cluster. Be aware that charges occur when you use the OpenShift Data Foundation service. Use the Cost Estimator to generate a cost estimate based on your projected usage.
last-updated: 2026-08-14
---

> ## Documentation Index
> The table of contents for this documentation set is at https://cloud.ibm.com/docs/satellite?format=markdown
> The index for all IBM Cloud docs is at: https://cloud.ibm.com/docs/llms.txt
> Use these files to discover more information as needed.

# OpenShift Data Foundation for remote devices
{: #storage-odf-remote}

Set up OpenShift Data Foundation for IBM Cloud Satellite&reg; clusters. You can use Satellite storage templates to create storage configurations. When you assign a storage configuration to your clusters, the storage drivers of the selected storage provider are installed in your cluster. Be aware that charges occur when you use the OpenShift Data Foundation service. Use the Cost Estimator to generate a cost estimate based on your projected usage.
{: shortdesc}

OpenShift Data Foundation is available in only internal mode, which means that your apps run in the same cluster as your storage. External mode, or storage heavy configurations, where your storage is located in a separate cluster from your apps is not supported.
{: note}

Before you can deploy storage templates to clusters in your location, make sure you set up Satellite Config by selecting the **Enable cluster admin access for Satellite Config** option in the console or including the `--enable-config-admin` option when you create your cluster.
{: important}

You cannot scope Satellite storage service to resource groups. However, if you are scoping other resources such as location and cluster to resource groups, you need to add Satellite reader and link administrator role for all resources in the account.
{: note}

You have two options when deploying OpenShift Data Foundation to your Satellite clusters, which are the `odf-local` and `odf-remote` storage templates.

- [`odf-local`](https://cloud.ibm.com/docs/satellite?topic=satellite-storage-odf-local&format=markdown): Choose this template when you have local storage available to your worker nodes. If your storage volumes are visible when running `lsblk`, you can use these disks when deploying ODF if they are raw and unformatted.
- [`odf-remote`](https://cloud.ibm.com/docs/satellite?topic=satellite-storage-odf-remote&format=markdown): Choose this template if you have a CSI driver installed in your cluster. For example, the `azuredisk-csi-driver` driver. You can use the CSI driver to dynamically provision storage volumes when deploying ODF.

The ODF cluster add-on is not supported on Satellite clusters. You must use either the `odf-local` or `odf-remote` storage template to deploy ODF on Satellite.
{: note}

## Prerequisites for using ODF for remote devices
{: #sat-storage-odf-remote-prereq}

1. Make sure you have the following permissions.
    - **Editor** for the Billing service.
    - **Manager** and **Editor** for Kubernetes service.
    - **Satellite Link Administrator** and **Reader** for the Satellite service.
1. Before you can create a storage configuration, follow the steps to set up a [Satellite location](https://cloud.ibm.com/docs/satellite?topic=satellite-locations&format=markdown).
1. [Create a Satellite cluster](https://cloud.ibm.com/docs/openshift?topic=openshift-satellite-clusters&format=markdown).
    - Make sure that you select the **Enable cluster admin access for Satellite Config** option when you create the cluster. If you don't enable Administrator (admin) access for Satellite Config when creating your cluster, you must re-create your cluster and enable admin access before you can deploy storage.
1. Your cluster must have a minimum of 3 worker nodes with at least 16CPUs and 64GB RAM per worker node.
1. Your cluster must have a remote block storage provisioner available. For example, you can deploy the [AWS EBS](https://cloud.ibm.com/docs/satellite?topic=satellite-storage-aws-ebs-csi-driver&format=markdown) Satellite storage template to install the EBS block drivers that you can then use to provision AWS EBS volumes for ODF.
1. The OCP version must be compatible with the ODF template version that you want to install. For example, for version 4.8 clusters, you must use template version 4.8.
1. **Optional**: [Create an IBM IBM Cloud Object Storage service instance](#sat-storage-odf-remote-cos).
    1. Create HMAC credentials for your IBM Cloud Object Storage instance.
    1. Create a Kubernetes secret that uses your IBM Cloud Object Storage HMAC credentials.



### Optional: Creating the IBM Cloud Object Storage service instance
{: #sat-storage-odf-remote-cos}

If you want to use IBM Cloud Object Storage as your object service, [Create an Object Storage service instance](#sat-storage-odf-remote-cos) and HMAC credentials. The Object Storage instance that you create is used as the NooBaa backing store in your ODF configuration. The backing store is the underlying storage for the data in your NooBaa buckets. If you don't specify an IBM Cloud Object Storage service instance when you create your storage configuration, the default NooBaa backing store is configured. You can create more backing stores, including IBM Cloud Object Storage backing stores after assigning the configuration to to your clusters and installing ODF.
{: shortdesc}

Create an instance of IBM Cloud Object Storage for the backing store of your ODF remote configuration. Then, create a set of HMAC credentials and a Kubernetes secret that uses your IBM Cloud Object Storage HMAC credentials.

1. Create an IBM Cloud Object Storage service instance.
    ```sh
    ibmcloud resource service-instance-create noobaa-store cloud-object-storage standard global
    ```
    {: pre}

1. Create HMAC credentials. Make a note of your credentials.
    ```sh
    ibmcloud resource service-key-create cos-cred-rw Writer --instance-name noobaa-store --parameters '{"HMAC": true}'
    ```
    {: pre}

Want to use Terraform to deploy OpenShift Data Foundation? For more information, see the examples in the [IBM-Cloud repo](https://github.com/IBM-Cloud/terraform-provider-ibm/tree/master/examples/openshift-data-foundation){: external}.
{: tip}




## Creating and assigning a configuration in the console
{: #odf-remote-config-create-console}
{: ui}


1. Review the [parameter reference](#odf-remote-parameter-reference).


1. [From the Locations console](https://cloud.ibm.com/satellite/locations){: external}, select the location where you want to create a storage configuration.
1. Select **Storage** > **Create storage configuration**
1. Enter a name for your configuration.
1. Select the **Storage type**.
1. Select the **Version** and click **Next**
1. If the **Storage type** that you selected accepts custom parameters, enter them on the **Parameters** tab.
1. If the **Storage type** that you selected requires secrets, enter them on the **Secrets** tab.
1. On the **Storage classes** tab, review the storage classes that are deployed by the configuration or create a custom storage class.
1. On the **Assign to service** tab, select the service that you want to assign your configuration to.
1. Click **Complete** to assign your storage configuration.

## Creating a configuration in the CLI
{: #odf-remote-config-create-cli}
{: cli}


1. Review the [parameter reference](#odf-remote-parameter-reference) for the template version that you want to use.


1. Log in to the IBM Cloud CLI.

    ```sh
    ibmcloud login
    ```
    {: pre}

1. List your Satellite locations and note the `Managed from` column.

    ```sh
    ibmcloud sat location ls
    ```
    {: pre}

1. Target the `Managed from` region of your Satellite location. For example, for `wdc` target `us-east`. For more information, see [Satellite regions](https://cloud.ibm.com/docs/satellite?topic=satellite-sat-regions&format=markdown).

    ```sh
    ibmcloud target -r us-east
    ```
    {: pre}

1. If you use a resource group other than `default`, target it.

    ```sh
    ibmcloud target -g RESOURCE_GROUP
    ```
    {: pre}
    
1. Copy one of the following example command for the template version that you want to use. For more information about the command, see `ibmcloud sat storage config create` in the [command reference](https://cloud.ibm.com/docs/satellite?topic=satellite-satellite-cli-reference&format=markdown#storage-config-create-cli).


    Example command to create a version 4.15 configuration.

    ```sh
    ibmcloud sat storage config create --location LOCATION --name NAME --template-name odf-remote --template-version 4.15 --param "osd-size=OSD-SIZE"  --param "osd-storage-class=OSD-STORAGE-CLASS"  --param "num-of-osd=NUM-OF-OSD"  --param "worker-pools=WORKER-POOLS"  --param "worker-nodes=WORKER-NODES"  --param "odf-upgrade=ODF-UPGRADE"  --param "billing-type=BILLING-TYPE"  --param "ibm-cos-endpoint=IBM-COS-ENDPOINT"  --param "ibm-cos-location=IBM-COS-LOCATION"  --param "ibm-cos-access-key=IBM-COS-ACCESS-KEY"  --param "ibm-cos-secret-key=IBM-COS-SECRET-KEY"  --param "cluster-encryption=CLUSTER-ENCRYPTION"  --param "iam-api-key=IAM-API-KEY"  --param "perform-cleanup=PERFORM-CLEANUP"  --param "kms-encryption=KMS-ENCRYPTION"  --param "kms-instance-name=KMS-INSTANCE-NAME"  --param "kms-instance-id=KMS-INSTANCE-ID"  --param "kms-base-url=KMS-BASE-URL"  --param "kms-token-url=KMS-TOKEN-URL"  --param "kms-root-key=KMS-ROOT-KEY"  --param "kms-api-key=KMS-API-KEY"  --param "ignore-noobaa=IGNORE-NOOBAA"  --param "disable-noobaa-LB=DISABLE-NOOBAA-LB"  --param "encryption-intransit=ENCRYPTION-INTRANSIT"  --param "add-single-replica-pool=ADD-SINGLE-REPLICA-POOL"  --param "taint-nodes=TAINT-NODES"  --param "prepare-for-disaster-recovery=PREPARE-FOR-DISASTER-RECOVERY"  --param "enable-nfs=ENABLE-NFS"  --param "use-ceph-rbd-as-default-storage-class=USE-CEPH-RBD-AS-DEFAULT-STORAGE-CLASS"  --param "resource-profile=RESOURCE-PROFILE" 
    ```
    {: pre}


    Example command to create a version 4.16 configuration.

    ```sh
    ibmcloud sat storage config create --location LOCATION --name NAME --template-name odf-remote --template-version 4.16 --param "osd-size=OSD-SIZE"  --param "osd-storage-class=OSD-STORAGE-CLASS"  --param "num-of-osd=NUM-OF-OSD"  --param "worker-pools=WORKER-POOLS"  --param "worker-nodes=WORKER-NODES"  --param "odf-upgrade=ODF-UPGRADE"  --param "billing-type=BILLING-TYPE"  --param "ibm-cos-endpoint=IBM-COS-ENDPOINT"  --param "ibm-cos-location=IBM-COS-LOCATION"  --param "ibm-cos-access-key=IBM-COS-ACCESS-KEY"  --param "ibm-cos-secret-key=IBM-COS-SECRET-KEY"  --param "cluster-encryption=CLUSTER-ENCRYPTION"  --param "iam-api-key=IAM-API-KEY"  --param "perform-cleanup=PERFORM-CLEANUP"  --param "kms-encryption=KMS-ENCRYPTION"  --param "kms-instance-name=KMS-INSTANCE-NAME"  --param "kms-instance-id=KMS-INSTANCE-ID"  --param "kms-base-url=KMS-BASE-URL"  --param "kms-token-url=KMS-TOKEN-URL"  --param "kms-root-key=KMS-ROOT-KEY"  --param "kms-api-key=KMS-API-KEY"  --param "ignore-noobaa=IGNORE-NOOBAA"  --param "disable-noobaa-LB=DISABLE-NOOBAA-LB"  --param "encryption-intransit=ENCRYPTION-INTRANSIT"  --param "add-single-replica-pool=ADD-SINGLE-REPLICA-POOL"  --param "taint-nodes=TAINT-NODES"  --param "prepare-for-disaster-recovery=PREPARE-FOR-DISASTER-RECOVERY"  --param "enable-nfs=ENABLE-NFS"  --param "use-ceph-rbd-as-default-storage-class=USE-CEPH-RBD-AS-DEFAULT-STORAGE-CLASS"  --param "resource-profile=RESOURCE-PROFILE" 
    ```
    {: pre}


    Example command to create a version 4.17 configuration.

    ```sh
    ibmcloud sat storage config create --location LOCATION --name NAME --template-name odf-remote --template-version 4.17 --param "osd-size=OSD-SIZE"  --param "osd-storage-class=OSD-STORAGE-CLASS"  --param "num-of-osd=NUM-OF-OSD"  --param "worker-pools=WORKER-POOLS"  --param "worker-nodes=WORKER-NODES"  --param "odf-upgrade=ODF-UPGRADE"  --param "billing-type=BILLING-TYPE"  --param "ibm-cos-endpoint=IBM-COS-ENDPOINT"  --param "ibm-cos-location=IBM-COS-LOCATION"  --param "ibm-cos-access-key=IBM-COS-ACCESS-KEY"  --param "ibm-cos-secret-key=IBM-COS-SECRET-KEY"  --param "cluster-encryption=CLUSTER-ENCRYPTION"  --param "iam-api-key=IAM-API-KEY"  --param "perform-cleanup=PERFORM-CLEANUP"  --param "kms-encryption=KMS-ENCRYPTION"  --param "kms-instance-name=KMS-INSTANCE-NAME"  --param "kms-instance-id=KMS-INSTANCE-ID"  --param "kms-base-url=KMS-BASE-URL"  --param "kms-token-url=KMS-TOKEN-URL"  --param "kms-root-key=KMS-ROOT-KEY"  --param "kms-api-key=KMS-API-KEY"  --param "ignore-noobaa=IGNORE-NOOBAA"  --param "disable-noobaa-LB=DISABLE-NOOBAA-LB"  --param "encryption-intransit=ENCRYPTION-INTRANSIT"  --param "add-single-replica-pool=ADD-SINGLE-REPLICA-POOL"  --param "taint-nodes=TAINT-NODES"  --param "prepare-for-disaster-recovery=PREPARE-FOR-DISASTER-RECOVERY"  --param "enable-nfs=ENABLE-NFS"  --param "use-ceph-rbd-as-default-storage-class=USE-CEPH-RBD-AS-DEFAULT-STORAGE-CLASS"  --param "resource-profile=RESOURCE-PROFILE" 
    ```
    {: pre}


    Example command to create a version 4.18 configuration.

    ```sh
    ibmcloud sat storage config create --location LOCATION --name NAME --template-name odf-remote --template-version 4.18 --param "osd-size=OSD-SIZE"  --param "osd-storage-class=OSD-STORAGE-CLASS"  --param "num-of-osd=NUM-OF-OSD"  --param "worker-pools=WORKER-POOLS"  --param "worker-nodes=WORKER-NODES"  --param "odf-upgrade=ODF-UPGRADE"  --param "billing-type=BILLING-TYPE"  --param "ibm-cos-endpoint=IBM-COS-ENDPOINT"  --param "ibm-cos-location=IBM-COS-LOCATION"  --param "ibm-cos-access-key=IBM-COS-ACCESS-KEY"  --param "ibm-cos-secret-key=IBM-COS-SECRET-KEY"  --param "cluster-encryption=CLUSTER-ENCRYPTION"  --param "iam-api-key=IAM-API-KEY"  --param "perform-cleanup=PERFORM-CLEANUP"  --param "kms-encryption=KMS-ENCRYPTION"  --param "kms-instance-name=KMS-INSTANCE-NAME"  --param "kms-instance-id=KMS-INSTANCE-ID"  --param "kms-base-url=KMS-BASE-URL"  --param "kms-token-url=KMS-TOKEN-URL"  --param "kms-root-key=KMS-ROOT-KEY"  --param "kms-api-key=KMS-API-KEY"  --param "ignore-noobaa=IGNORE-NOOBAA"  --param "disable-noobaa-LB=DISABLE-NOOBAA-LB"  --param "encryption-intransit=ENCRYPTION-INTRANSIT"  --param "add-single-replica-pool=ADD-SINGLE-REPLICA-POOL"  --param "taint-nodes=TAINT-NODES"  --param "enable-nfs=ENABLE-NFS"  --param "use-ceph-rbd-as-default-storage-class=USE-CEPH-RBD-AS-DEFAULT-STORAGE-CLASS"  --param "resource-profile=RESOURCE-PROFILE" 
    ```
    {: pre}


    Example command to create a version 4.19 configuration.

    ```sh
    ibmcloud sat storage config create --location LOCATION --name NAME --template-name odf-remote --template-version 4.19 --param "osd-size=OSD-SIZE"  --param "osd-storage-class=OSD-STORAGE-CLASS"  --param "num-of-osd=NUM-OF-OSD"  --param "worker-pools=WORKER-POOLS"  --param "worker-nodes=WORKER-NODES"  --param "odf-upgrade=ODF-UPGRADE"  --param "billing-type=BILLING-TYPE"  --param "ibm-cos-endpoint=IBM-COS-ENDPOINT"  --param "ibm-cos-location=IBM-COS-LOCATION"  --param "ibm-cos-access-key=IBM-COS-ACCESS-KEY"  --param "ibm-cos-secret-key=IBM-COS-SECRET-KEY"  --param "cluster-encryption=CLUSTER-ENCRYPTION"  --param "iam-api-key=IAM-API-KEY"  --param "perform-cleanup=PERFORM-CLEANUP"  --param "kms-encryption=KMS-ENCRYPTION"  --param "kms-instance-name=KMS-INSTANCE-NAME"  --param "kms-instance-id=KMS-INSTANCE-ID"  --param "kms-base-url=KMS-BASE-URL"  --param "kms-token-url=KMS-TOKEN-URL"  --param "kms-root-key=KMS-ROOT-KEY"  --param "kms-api-key=KMS-API-KEY"  --param "ignore-noobaa=IGNORE-NOOBAA"  --param "disable-noobaa-LB=DISABLE-NOOBAA-LB"  --param "encryption-intransit=ENCRYPTION-INTRANSIT"  --param "add-single-replica-pool=ADD-SINGLE-REPLICA-POOL"  --param "taint-nodes=TAINT-NODES"  --param "enable-nfs=ENABLE-NFS"  --param "use-ceph-rbd-as-default-storage-class=USE-CEPH-RBD-AS-DEFAULT-STORAGE-CLASS"  --param "resource-profile=RESOURCE-PROFILE" 
    ```
    {: pre}


    Example command to create a version 4.20 configuration.

    ```sh
    ibmcloud sat storage config create --location LOCATION --name NAME --template-name odf-remote --template-version 4.20 --param "osd-size=OSD-SIZE"  --param "osd-storage-class=OSD-STORAGE-CLASS"  --param "num-of-osd=NUM-OF-OSD"  --param "worker-pools=WORKER-POOLS"  --param "worker-nodes=WORKER-NODES"  --param "odf-upgrade=ODF-UPGRADE"  --param "billing-type=BILLING-TYPE"  --param "ibm-cos-endpoint=IBM-COS-ENDPOINT"  --param "ibm-cos-location=IBM-COS-LOCATION"  --param "ibm-cos-access-key=IBM-COS-ACCESS-KEY"  --param "ibm-cos-secret-key=IBM-COS-SECRET-KEY"  --param "cluster-encryption=CLUSTER-ENCRYPTION"  --param "iam-api-key=IAM-API-KEY"  --param "perform-cleanup=PERFORM-CLEANUP"  --param "kms-encryption=KMS-ENCRYPTION"  --param "kms-instance-name=KMS-INSTANCE-NAME"  --param "kms-instance-id=KMS-INSTANCE-ID"  --param "kms-base-url=KMS-BASE-URL"  --param "kms-token-url=KMS-TOKEN-URL"  --param "kms-root-key=KMS-ROOT-KEY"  --param "kms-api-key=KMS-API-KEY"  --param "ignore-noobaa=IGNORE-NOOBAA"  --param "disable-noobaa-LB=DISABLE-NOOBAA-LB"  --param "encryption-intransit=ENCRYPTION-INTRANSIT"  --param "add-single-replica-pool=ADD-SINGLE-REPLICA-POOL"  --param "taint-nodes=TAINT-NODES"  --param "enable-nfs=ENABLE-NFS"  --param "use-ceph-rbd-as-default-storage-class=USE-CEPH-RBD-AS-DEFAULT-STORAGE-CLASS"  --param "resource-profile=RESOURCE-PROFILE"  --param "set-default-storage-class-for-virtualization=SET-DEFAULT-STORAGE-CLASS-FOR-VIRTUALIZATION"  --param "enable-automatic-capacity-scaling=ENABLE-AUTOMATIC-CAPACITY-SCALING"  --param "cluster-expansion-limit=CLUSTER-EXPANSION-LIMIT" 
    ```
    {: pre}



1. Customize the command based on the settings that you want to use.

1. Run the command to create a configuration.

1. Verify your configuration was created.
    ```sh
    ibmcloud sat storage config get --config CONFIG
    ```
    {: pre}

## Creating a configuration in the API
{: #odf-remote-config-create-api}
{: api}

1. Generate an API key, then request a refresh token. For more information, see [Generating an IBM Cloud IAM token by using an API key](https://cloud.ibm.com/docs/iam?topic=iam-iamtoken_from_apikey&format=markdown).

1. Review the [parameter reference](#odf-remote-parameter-reference) for the template version that you want to use.


1. Copy one of the following example requests and replace the variables that you want to use.


    Example request to create a version 4.15 configuration.

    ```sh
    curl -X POST "https://containers.cloud.ibm.com/global/v2/storage/satellite/createStorageConfigurationByController" -H "accept: application/json" -H "Authorization: TOKEN" -H "Content-Type: application/json" -d "{ \"config-name\": \"string\", \"controller\": \"string\", \"storage-class-parameters\": [ { \"additionalProp1\": \"string\", \"additionalProp2\": \"string\", \"additionalProp3\": \"string\" } ], \"storage-template-name\": \"odf-remote\", \"storage-template-version\": \"4.15\", \"update-assignments\": true, \"user-config-parameters\": { \"entry.name\": \"OSD-SIZE\", { \"entry.name\": \"OSD-STORAGE-CLASS\", { \"entry.name\": \"NUM-OF-OSD\", { \"entry.name\": \"WORKER-POOLS\", { \"entry.name\": \"WORKER-NODES\", { \"entry.name\": \"ODF-UPGRADE\", { \"entry.name\": \"BILLING-TYPE\", { \"entry.name\": \"IBM-COS-ENDPOINT\", { \"entry.name\": \"IBM-COS-LOCATION\", { \"entry.name\": \"CLUSTER-ENCRYPTION\", { \"entry.name\": \"PERFORM-CLEANUP\", { \"entry.name\": \"KMS-ENCRYPTION\", { \"entry.name\": \"KMS-INSTANCE-NAME\", { \"entry.name\": \"KMS-INSTANCE-ID\", { \"entry.name\": \"KMS-BASE-URL\", { \"entry.name\": \"KMS-TOKEN-URL\", { \"entry.name\": \"IGNORE-NOOBAA\", { \"entry.name\": \"DISABLE-NOOBAA-LB\", { \"entry.name\": \"ENCRYPTION-INTRANSIT\", { \"entry.name\": \"ADD-SINGLE-REPLICA-POOL\", { \"entry.name\": \"TAINT-NODES\", { \"entry.name\": \"PREPARE-FOR-DISASTER-RECOVERY\", { \"entry.name\": \"ENABLE-NFS\", { \"entry.name\": \"USE-CEPH-RBD-AS-DEFAULT-STORAGE-CLASS\", { \"entry.name\": \"RESOURCE-PROFILE\",\"user-secret-parameters\": { \"entry.name\": \"IBM-COS-ACCESS-KEY\",{ \"entry.name\": \"IBM-COS-SECRET-KEY\",{ \"entry.name\": \"IAM-API-KEY\",{ \"entry.name\": \"KMS-ROOT-KEY\",{ \"entry.name\": \"KMS-API-KEY\",}
    ```
    {: pre}


    Example request to create a version 4.16 configuration.

    ```sh
    curl -X POST "https://containers.cloud.ibm.com/global/v2/storage/satellite/createStorageConfigurationByController" -H "accept: application/json" -H "Authorization: TOKEN" -H "Content-Type: application/json" -d "{ \"config-name\": \"string\", \"controller\": \"string\", \"storage-class-parameters\": [ { \"additionalProp1\": \"string\", \"additionalProp2\": \"string\", \"additionalProp3\": \"string\" } ], \"storage-template-name\": \"odf-remote\", \"storage-template-version\": \"4.16\", \"update-assignments\": true, \"user-config-parameters\": { \"entry.name\": \"OSD-SIZE\", { \"entry.name\": \"OSD-STORAGE-CLASS\", { \"entry.name\": \"NUM-OF-OSD\", { \"entry.name\": \"WORKER-POOLS\", { \"entry.name\": \"WORKER-NODES\", { \"entry.name\": \"ODF-UPGRADE\", { \"entry.name\": \"BILLING-TYPE\", { \"entry.name\": \"IBM-COS-ENDPOINT\", { \"entry.name\": \"IBM-COS-LOCATION\", { \"entry.name\": \"CLUSTER-ENCRYPTION\", { \"entry.name\": \"PERFORM-CLEANUP\", { \"entry.name\": \"KMS-ENCRYPTION\", { \"entry.name\": \"KMS-INSTANCE-NAME\", { \"entry.name\": \"KMS-INSTANCE-ID\", { \"entry.name\": \"KMS-BASE-URL\", { \"entry.name\": \"KMS-TOKEN-URL\", { \"entry.name\": \"IGNORE-NOOBAA\", { \"entry.name\": \"DISABLE-NOOBAA-LB\", { \"entry.name\": \"ENCRYPTION-INTRANSIT\", { \"entry.name\": \"ADD-SINGLE-REPLICA-POOL\", { \"entry.name\": \"TAINT-NODES\", { \"entry.name\": \"PREPARE-FOR-DISASTER-RECOVERY\", { \"entry.name\": \"ENABLE-NFS\", { \"entry.name\": \"USE-CEPH-RBD-AS-DEFAULT-STORAGE-CLASS\", { \"entry.name\": \"RESOURCE-PROFILE\",\"user-secret-parameters\": { \"entry.name\": \"IBM-COS-ACCESS-KEY\",{ \"entry.name\": \"IBM-COS-SECRET-KEY\",{ \"entry.name\": \"IAM-API-KEY\",{ \"entry.name\": \"KMS-ROOT-KEY\",{ \"entry.name\": \"KMS-API-KEY\",}
    ```
    {: pre}


    Example request to create a version 4.17 configuration.

    ```sh
    curl -X POST "https://containers.cloud.ibm.com/global/v2/storage/satellite/createStorageConfigurationByController" -H "accept: application/json" -H "Authorization: TOKEN" -H "Content-Type: application/json" -d "{ \"config-name\": \"string\", \"controller\": \"string\", \"storage-class-parameters\": [ { \"additionalProp1\": \"string\", \"additionalProp2\": \"string\", \"additionalProp3\": \"string\" } ], \"storage-template-name\": \"odf-remote\", \"storage-template-version\": \"4.17\", \"update-assignments\": true, \"user-config-parameters\": { \"entry.name\": \"OSD-SIZE\", { \"entry.name\": \"OSD-STORAGE-CLASS\", { \"entry.name\": \"NUM-OF-OSD\", { \"entry.name\": \"WORKER-POOLS\", { \"entry.name\": \"WORKER-NODES\", { \"entry.name\": \"ODF-UPGRADE\", { \"entry.name\": \"BILLING-TYPE\", { \"entry.name\": \"IBM-COS-ENDPOINT\", { \"entry.name\": \"IBM-COS-LOCATION\", { \"entry.name\": \"CLUSTER-ENCRYPTION\", { \"entry.name\": \"PERFORM-CLEANUP\", { \"entry.name\": \"KMS-ENCRYPTION\", { \"entry.name\": \"KMS-INSTANCE-NAME\", { \"entry.name\": \"KMS-INSTANCE-ID\", { \"entry.name\": \"KMS-BASE-URL\", { \"entry.name\": \"KMS-TOKEN-URL\", { \"entry.name\": \"IGNORE-NOOBAA\", { \"entry.name\": \"DISABLE-NOOBAA-LB\", { \"entry.name\": \"ENCRYPTION-INTRANSIT\", { \"entry.name\": \"ADD-SINGLE-REPLICA-POOL\", { \"entry.name\": \"TAINT-NODES\", { \"entry.name\": \"PREPARE-FOR-DISASTER-RECOVERY\", { \"entry.name\": \"ENABLE-NFS\", { \"entry.name\": \"USE-CEPH-RBD-AS-DEFAULT-STORAGE-CLASS\", { \"entry.name\": \"RESOURCE-PROFILE\",\"user-secret-parameters\": { \"entry.name\": \"IBM-COS-ACCESS-KEY\",{ \"entry.name\": \"IBM-COS-SECRET-KEY\",{ \"entry.name\": \"IAM-API-KEY\",{ \"entry.name\": \"KMS-ROOT-KEY\",{ \"entry.name\": \"KMS-API-KEY\",}
    ```
    {: pre}


    Example request to create a version 4.18 configuration.

    ```sh
    curl -X POST "https://containers.cloud.ibm.com/global/v2/storage/satellite/createStorageConfigurationByController" -H "accept: application/json" -H "Authorization: TOKEN" -H "Content-Type: application/json" -d "{ \"config-name\": \"string\", \"controller\": \"string\", \"storage-class-parameters\": [ { \"additionalProp1\": \"string\", \"additionalProp2\": \"string\", \"additionalProp3\": \"string\" } ], \"storage-template-name\": \"odf-remote\", \"storage-template-version\": \"4.18\", \"update-assignments\": true, \"user-config-parameters\": { \"entry.name\": \"OSD-SIZE\", { \"entry.name\": \"OSD-STORAGE-CLASS\", { \"entry.name\": \"NUM-OF-OSD\", { \"entry.name\": \"WORKER-POOLS\", { \"entry.name\": \"WORKER-NODES\", { \"entry.name\": \"ODF-UPGRADE\", { \"entry.name\": \"BILLING-TYPE\", { \"entry.name\": \"IBM-COS-ENDPOINT\", { \"entry.name\": \"IBM-COS-LOCATION\", { \"entry.name\": \"CLUSTER-ENCRYPTION\", { \"entry.name\": \"PERFORM-CLEANUP\", { \"entry.name\": \"KMS-ENCRYPTION\", { \"entry.name\": \"KMS-INSTANCE-NAME\", { \"entry.name\": \"KMS-INSTANCE-ID\", { \"entry.name\": \"KMS-BASE-URL\", { \"entry.name\": \"KMS-TOKEN-URL\", { \"entry.name\": \"IGNORE-NOOBAA\", { \"entry.name\": \"DISABLE-NOOBAA-LB\", { \"entry.name\": \"ENCRYPTION-INTRANSIT\", { \"entry.name\": \"ADD-SINGLE-REPLICA-POOL\", { \"entry.name\": \"TAINT-NODES\", { \"entry.name\": \"ENABLE-NFS\", { \"entry.name\": \"USE-CEPH-RBD-AS-DEFAULT-STORAGE-CLASS\", { \"entry.name\": \"RESOURCE-PROFILE\",\"user-secret-parameters\": { \"entry.name\": \"IBM-COS-ACCESS-KEY\",{ \"entry.name\": \"IBM-COS-SECRET-KEY\",{ \"entry.name\": \"IAM-API-KEY\",{ \"entry.name\": \"KMS-ROOT-KEY\",{ \"entry.name\": \"KMS-API-KEY\",}
    ```
    {: pre}


    Example request to create a version 4.19 configuration.

    ```sh
    curl -X POST "https://containers.cloud.ibm.com/global/v2/storage/satellite/createStorageConfigurationByController" -H "accept: application/json" -H "Authorization: TOKEN" -H "Content-Type: application/json" -d "{ \"config-name\": \"string\", \"controller\": \"string\", \"storage-class-parameters\": [ { \"additionalProp1\": \"string\", \"additionalProp2\": \"string\", \"additionalProp3\": \"string\" } ], \"storage-template-name\": \"odf-remote\", \"storage-template-version\": \"4.19\", \"update-assignments\": true, \"user-config-parameters\": { \"entry.name\": \"OSD-SIZE\", { \"entry.name\": \"OSD-STORAGE-CLASS\", { \"entry.name\": \"NUM-OF-OSD\", { \"entry.name\": \"WORKER-POOLS\", { \"entry.name\": \"WORKER-NODES\", { \"entry.name\": \"ODF-UPGRADE\", { \"entry.name\": \"BILLING-TYPE\", { \"entry.name\": \"IBM-COS-ENDPOINT\", { \"entry.name\": \"IBM-COS-LOCATION\", { \"entry.name\": \"CLUSTER-ENCRYPTION\", { \"entry.name\": \"PERFORM-CLEANUP\", { \"entry.name\": \"KMS-ENCRYPTION\", { \"entry.name\": \"KMS-INSTANCE-NAME\", { \"entry.name\": \"KMS-INSTANCE-ID\", { \"entry.name\": \"KMS-BASE-URL\", { \"entry.name\": \"KMS-TOKEN-URL\", { \"entry.name\": \"IGNORE-NOOBAA\", { \"entry.name\": \"DISABLE-NOOBAA-LB\", { \"entry.name\": \"ENCRYPTION-INTRANSIT\", { \"entry.name\": \"ADD-SINGLE-REPLICA-POOL\", { \"entry.name\": \"TAINT-NODES\", { \"entry.name\": \"ENABLE-NFS\", { \"entry.name\": \"USE-CEPH-RBD-AS-DEFAULT-STORAGE-CLASS\", { \"entry.name\": \"RESOURCE-PROFILE\",\"user-secret-parameters\": { \"entry.name\": \"IBM-COS-ACCESS-KEY\",{ \"entry.name\": \"IBM-COS-SECRET-KEY\",{ \"entry.name\": \"IAM-API-KEY\",{ \"entry.name\": \"KMS-ROOT-KEY\",{ \"entry.name\": \"KMS-API-KEY\",}
    ```
    {: pre}


    Example request to create a version 4.20 configuration.

    ```sh
    curl -X POST "https://containers.cloud.ibm.com/global/v2/storage/satellite/createStorageConfigurationByController" -H "accept: application/json" -H "Authorization: TOKEN" -H "Content-Type: application/json" -d "{ \"config-name\": \"string\", \"controller\": \"string\", \"storage-class-parameters\": [ { \"additionalProp1\": \"string\", \"additionalProp2\": \"string\", \"additionalProp3\": \"string\" } ], \"storage-template-name\": \"odf-remote\", \"storage-template-version\": \"4.20\", \"update-assignments\": true, \"user-config-parameters\": { \"entry.name\": \"OSD-SIZE\", { \"entry.name\": \"OSD-STORAGE-CLASS\", { \"entry.name\": \"NUM-OF-OSD\", { \"entry.name\": \"WORKER-POOLS\", { \"entry.name\": \"WORKER-NODES\", { \"entry.name\": \"ODF-UPGRADE\", { \"entry.name\": \"BILLING-TYPE\", { \"entry.name\": \"IBM-COS-ENDPOINT\", { \"entry.name\": \"IBM-COS-LOCATION\", { \"entry.name\": \"CLUSTER-ENCRYPTION\", { \"entry.name\": \"PERFORM-CLEANUP\", { \"entry.name\": \"KMS-ENCRYPTION\", { \"entry.name\": \"KMS-INSTANCE-NAME\", { \"entry.name\": \"KMS-INSTANCE-ID\", { \"entry.name\": \"KMS-BASE-URL\", { \"entry.name\": \"KMS-TOKEN-URL\", { \"entry.name\": \"IGNORE-NOOBAA\", { \"entry.name\": \"DISABLE-NOOBAA-LB\", { \"entry.name\": \"ENCRYPTION-INTRANSIT\", { \"entry.name\": \"ADD-SINGLE-REPLICA-POOL\", { \"entry.name\": \"TAINT-NODES\", { \"entry.name\": \"ENABLE-NFS\", { \"entry.name\": \"USE-CEPH-RBD-AS-DEFAULT-STORAGE-CLASS\", { \"entry.name\": \"RESOURCE-PROFILE\", { \"entry.name\": \"SET-DEFAULT-STORAGE-CLASS-FOR-VIRTUALIZATION\", { \"entry.name\": \"ENABLE-AUTOMATIC-CAPACITY-SCALING\", { \"entry.name\": \"CLUSTER-EXPANSION-LIMIT\",\"user-secret-parameters\": { \"entry.name\": \"IBM-COS-ACCESS-KEY\",{ \"entry.name\": \"IBM-COS-SECRET-KEY\",{ \"entry.name\": \"IAM-API-KEY\",{ \"entry.name\": \"KMS-ROOT-KEY\",{ \"entry.name\": \"KMS-API-KEY\",}
    ```
    {: pre}









{: cli}

1. List your storage configurations and make a note of the storage configuration that you want to assign to your clusters.
    ```sh
    ibmcloud sat storage config ls
    ```
    {: pre}

1. Get the ID of the cluster, cluster group, or service that you want to assign storage to. 

    To make sure that your cluster is registered with Satellite Config or to create groups, see [Setting up clusters to use with Satellite Config](https://cloud.ibm.com/docs/satellite?topic=satellite-setup-clusters-satconfig&format=markdown).
    {: tip}
    
    Example command to list cluster groups.
    
    ```sh
    ibmcloud sat group ls
    ```
    {: pre}

    Example command to list clusters.
    
    ```sh
    ibmcloud oc cluster ls --provider satellite
    ```
    {: pre}
    
    Example command to list Satellite services.
    
    ```sh
    ibmcloud sat service ls --location LOCATION
    ```
    {: pre}

1. Assign your storage configuration to the cluster, group, or service that you retrieved earlier. For more information, see the `ibmcloud sat storage assignment create` [command](https://cloud.ibm.com/docs/satellite?topic=satellite-satellite-cli-reference&format=markdown#storage-assignment-create-cli).

    Example command to assign a configuration to a cluster group.
    ```sh
    ibmcloud sat storage assignment create --group GROUP --config CONFIG --name NAME
    ```
    {: pre}

    Example command to assign a configuration to a cluster.
    ```sh
    ibmcloud sat storage assignment create --cluster CLUSTER --config CONFIG --name NAME
    ```
    {: pre}

    Example command to assign a configuration to a service cluster.
    ```sh
    ibmcloud sat storage assignment create --service-cluster-id CLUSTER --config CONFIG --name NAME
    ```
    {: pre}

1. Verify that your assignment is created.
    ```sh
    ibmcloud sat storage assignment ls (--cluster CLUSTER | --config CONFIG | --location LOCATION | --service-cluster-id CLUSTER)
    ```
    {: pre}
{: api}

1. Copy one of the following example requests. 

    Example request to assign a [configuration to a cluster](https://cloud.ibm.com/apidocs/kubernetes/containers-v1-v2){: external}.
    ```sh
    curl -X POST "https://containers.cloud.ibm.com/global/v2/storage/satellite/createAssignmentByCluster" -H "accept: application/json" -H "Authorization: Bearer TOKEN" -H "Content-Type: application/json" -d "{ \"channelName\": \"CONFIGURATION-NAME\", \"cluster\": \"CLUSTER-ID\", \"controller\": \"LOCATION-ID\", \"name\": \"ASSIGNMENT-NAME\"}"
    ```
    {: pre}
    
    Example request to [assign configuration to a cluster group](https://cloud.ibm.com/apidocs/kubernetes/containers-v1-v2){: external}.
    ```sh
    curl -X POST "https://containers.cloud.ibm.com/global/v2/storage/satellite/createAssignment" -H "accept: application/json" -H "Authorization: Bearer TOKEN" -H "Content-Type: application/json" -d "{ \"channelName\": \"CONFIGURATION-NAME\", \"cluster\": \"string\", \"groups\": [ \"CLUSTER-GROUP\" ], \"name\": \"ASSIGNMENT-NAME\"}"
    ```
    {: pre}
    
1. Replace the variables with your details and run the request.

1. Verify the assignment was created by listing your assignments.

    ```sh
    curl -X GET "https://containers.cloud.ibm.com/global/v2/storage/satellite/getAssignments" -H "accept: application/json" -H "Authorization: Bearer TOKEN"
    ```
    {: pre}
{: ui}

You can use the [Satellite console](https://cloud.ibm.com/satellite/locations){: external} to apply the latest patch updates to your assignments.

1. From the **Locations** page in the [Satellite console](https://cloud.ibm.com/satellite/locations){: external}, select your location.

1. Click the **Storage** tab to view your configurations.

1. Click the configuration you want to update.

1. Click information **Information** (i) icon to apply the latest revision or patch.

1. **Optional**: Enable automatic patch updates for your storage assignment. Enabling automatic patch updates ensures that your assignment always has the latest security fixes.

If you enable automatic patch updates, you must still apply major updates manually.
{: note}
{: cli}

Upgrade an assignment to use the latest storage template revision.

1. List your Satellite storage assignments, make a note of the Satellite assignment you want to upgrade.
    ```sh
    ibmcloud sat storage assignment ls
    ```
    {: pre}

1. List the Satellite storage templates to see the latest available versions.
    ```sh
    ibmcloud sat storage template ls
    ```
    {: pre}

1. Upgrade the Satellite assignment.

    Example command to upgrade an assignment.
    ```sh
    ibmcloud sat storage assignment upgrade --assignment ASSIGNMENT
    ```
    {: pre}
{: cli}

You can use the `sat storage assignment autopatch enable` CLI to enable automatic patch updates for your assignments. Enabling automatic patch updates applies the latest storage template revisions (patches) automatically. You must still apply major updates manually.

1. List your Satellite storage configurations. Make a note of the configuration ID. 

    ```sh
    ibmcloud sat storage assignment ls
    ```
    {: pre}

1. Run one of the following example commands to enable automatic patch updates for your configuration and its associated assignments. Enter the configuration ID that you retrieved in the previous step.

    Example command to enable automatic patch updates for an assignment.

    ```sh
    ibmcloud sat storage assignment autopatch enable --config CONFIG  (--all | --assignment ASSIGNMENT-ID [--assignment ASSIGNMENT-ID])
    ```
    {: pre}

    Example command to enable automatic patch updates for all storage assignments under a given configuration.

    ```sh
    ibmcloud sat storage assignment autopatch enable --config CONFIG --all
    ```
    {: pre}

    Example command to disable automatic patch updates for all assignments under a specific configuration.

    ```sh
    ibmcloud sat storage assignment autopatch disable --config CONFIG --all
    ```
    {: pre}

    Example command to disable automatic patch updates for an single assignment and a specific configuration.

    ```sh
    ibmcloud sat storage assignment autopatch disable --config CONFIG --assignment ASSIGNMENT-ID
    ```
    {: pre}

    Example command to disable automatic patch updates for an multiple assignment and a specific configuration.

    ```sh
    ibmcloud sat storage assignment autopatch disable --config CONFIG --assignment ASSIGNMENT-ID --assignment ASSIGNMENT-ID
    ```
    {: pre}
{: api}

You can use the [`/v2/storage/satellite/updateAssignment`](https://cloud.ibm.com/apidocs/kubernetes/containers-v1-v2){: external} API to update your assignments with new clusters or cluster groups. Set `updateConfigVersion` to `true` to apply the revision update.

1. Copy the following example request and replace the variables for the cluster groups and assignments that you want to update.
    ```sh
    curl -X PATCH "https://containers.cloud.ibm.com/global/v2/storage/satellite/updateAssignment" -H "accept: application/json" -H "Authorization: Bearer TOKEN" -H "Content-Type: application/json" -d "{ \"groups\": [ \"CLUSTER-GROUPS\" ], \"name\": \"ASSIGNMENT-NAME\", \"updateConfigVersion\": true, \"uuid\": \"ASSIGNMENT-ID\"}"
    ```
    {: pre}
    
1. Run the request.

1. Get the details of you assignment to verify the update.
    ```txt
    curl -X GET "https://containers.cloud.ibm.com/global/v2/storage/satellite/getAssignment?uuid=ASSIGNMENT-ID" -H "accept: application/json" -H "Authorization: Bearer TOKEN"
    ```
    {: pre}
{: api}

You can use the `/v2/storage/satellite/setAssignmentAutoupgrade` API to enable automatic patch updates for your assignments. Enabling automatic patch updates applies the latest storage template revisions (patches) automatically. You must still apply major updates manually.

1. Copy the following example request and replace the variables for the cluster groups and assignments that you want to update.
    ```txt
    curl -X PATCH "https://containers.cloud.ibm.com/global/v2/storage/satellite/setAssignmentAutoupgrade" -H "accept: application/json" -H "Authorization: Bearer TOKEN" -H "Content-Type: application/json" -d { "config": "string", "controller": "string", "autopatch": boolean,"assignment" : { "all": boolean, "uuid": ["string", "string", ...], } }
    ```
    {: pre}
    
1. Run the request.

1. Get the details of you assignment to verify the upgrade.
    ```sh
    curl -X GET "https://containers.cloud.ibm.com/global/v2/storage/satellite/getAssignment?uuid=ASSIGNMENT-ID" -H "accept: application/json" -H "Authorization: Bearer TOKEN"
    ```
    {: pre}

### Optional: Adding additional worker nodes to your ODF configuration
{: #add-worker-nodes-odf-remote}
{: cli}

1. Add more worker nodes to your ODF configuration.
    ```sh
    ibmcloud sat storage config param set --config CONFIG_NAME -p "worker-nodes=<comma-separated values of new worker-nodes followed by list of old worker-nodes>" --apply
    ```
    {: pre}




1. Verify that the storage configuration resources are deployed.

    1. Get the `storagecluster` that you deployed and verify that the phase is `Ready`.
        ```sh
        oc get storagecluster -n openshift-storage
        ```
        {: pre}

        Example output
        ```sh
        NAME                 AGE   PHASE   EXTERNAL   CREATED AT             VERSION
        ocs-storagecluster   72m   Ready              2021-02-10T06:00:20Z   4.6.0
        ```
        {: screen}

    1. Get a list of pods in the `openshift-storage` namespace and verify that the status is `Running`.
        ```sh
        oc get pods -n openshift-storage
        ```
        {: pre}

        Example output
        ```sh
        NAME                                                              READY   STATUS      RESTARTS   AGE
        csi-cephfsplugin-9g2d5                                            3/3     Running     0          8m11s
        csi-cephfsplugin-g42wv                                            3/3     Running     0          8m11s
        csi-cephfsplugin-provisioner-7b89766c86-l68sr                     5/5     Running     0          8m10s
        csi-cephfsplugin-provisioner-7b89766c86-nkmkf                     5/5     Running     0          8m10s
        csi-cephfsplugin-rlhzv                                            3/3     Running     0          8m11s
        csi-rbdplugin-8dmxc                                               3/3     Running     0          8m12s
        csi-rbdplugin-f8c4c                                               3/3     Running     0          8m12s
        csi-rbdplugin-nkzcd                                               3/3     Running     0          8m12s
        csi-rbdplugin-provisioner-75596f49bd-7mk5g                        5/5     Running     0          8m12s
        csi-rbdplugin-provisioner-75596f49bd-r2p6g                        5/5     Running     0          8m12s
        noobaa-core-0                                                     1/1     Running     0          4m37s
        noobaa-db-0                                                       1/1     Running     0          4m37s
        noobaa-endpoint-7d959fd6fb-dr5x4                                  1/1     Running     0          2m27s
        noobaa-operator-6cbf8c484c-fpwtt                                  1/1     Running     0          9m41s
        ocs-operator-9d6457dff-c4xhh                                      1/1     Running     0          9m42s
        rook-ceph-crashcollector-169.48.170.83-89f6d7dfb-gsglz            1/1     Running     0          5m38s
        rook-ceph-crashcollector-169.48.170.88-6f58d6489-b9j49            1/1     Running     0          5m29s
        rook-ceph-crashcollector-169.48.170.90-866b9d444d-zk6ft           1/1     Running     0          5m15s
        rook-ceph-drain-canary-169.48.170.83-6b885b94db-wvptz             1/1     Running     0          4m41s
        rook-ceph-drain-canary-169.48.170.88-769f8b6b7-mtm47              1/1     Running     0          4m39s
        rook-ceph-drain-canary-169.48.170.90-84845c98d4-pxpqs             1/1     Running     0          4m40s
        rook-ceph-mds-ocs-storagecluster-cephfilesystem-a-6dfbb4fcnqv9g   1/1     Running     0          4m16s
        rook-ceph-mds-ocs-storagecluster-cephfilesystem-b-cbc56b8btjhrt   1/1     Running     0          4m15s
        rook-ceph-mgr-a-55cc8d96cc-vm5dr                                  1/1     Running     0          4m55s
        rook-ceph-mon-a-5dcc4d9446-4ff5x                                  1/1     Running     0          5m38s
        rook-ceph-mon-b-64dc44f954-w24gs                                  1/1     Running     0          5m30s
        rook-ceph-mon-c-86d4fb86-s8gdz                                    1/1     Running     0          5m15s
        rook-ceph-operator-69c46db9d4-tqdpt                               1/1     Running     0          9m42s
        rook-ceph-osd-0-6c6cc87d58-79m5z                                  1/1     Running     0          4m42s
        rook-ceph-osd-1-f4cc9c864-fmwgd                                   1/1     Running     0          4m41s
        rook-ceph-osd-2-dd4968b75-lzc6x                                   1/1     Running     0          4m40s
        rook-ceph-osd-prepare-ocs-deviceset-0-data-0-29jgc-kzpgr          0/1     Completed   0          4m51s
        rook-ceph-osd-prepare-ocs-deviceset-1-data-0-ckvv2-4jdx5          0/1     Completed   0          4m50s
        rook-ceph-osd-prepare-ocs-deviceset-2-data-0-szmjd-49dd4          0/1     Completed   0          4m50s
        rook-ceph-rgw-ocs-storagecluster-cephobjectstore-a-7f7f6df9rv6h   1/1     Running     0          3m44s
        rook-ceph-rgw-ocs-storagecluster-cephobjectstore-b-554fd9dz6dm8   1/1     Running     0          3m41s
        ```
        {: screen}


## Deploying an app that uses OpenShift Data Foundation
{: #sat-storage-odf-remote-deploy}

You can use the ODF storage classes to create PVCs for the apps in your clusters.
{: shortdesc}

1. Create a YAML configuration file for your PVC. In order for the PVC to match the PV, you must use the same values for the storage class and the size of the storage.

    ```yaml
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: ocs-pvc
    spec:
      accessModes:
        - ReadWriteOnce
      storageClassName: sat-ocs-cephfs-gold
      resources:
        requests:
          storage: 5Gi
    ```
    {: codeblock}

1. Create the PVC in your cluster.

    ```sh
    oc apply -f pvc.yaml
    ```
    {: pre}

1. Create a YAML configuration file for a pod that mounts the PVC that you created. The following example creates an `nginx` pod that writes the current date and time to a `test.txt` file.

    ```yaml
    apiVersion: v1
    kind: Pod
    metadata:
      name: app
    spec:
      containers:
      - name: app
        image: nginx
        command: ["/bin/sh"]
        args: ["-c", "while true; do echo $(date -u) >> /test/test.txt; sleep 5; done"]
        volumeMounts:
        - name: persistent-storage
          mountPath: /test
      volumes:
      - name: persistent-storage
        persistentVolumeClaim:
          claimName: ocs-pvc
    ```
    {: codeblock}

1. Create the pod in your cluster.

    ```sh
    oc apply -f pod.yaml
    ```
    {: pre}

1. Verify that the pod is deployed. Note that it might take a few minutes for your app to get into a `Running` state.

    ```sh
    oc get pods
    ```
    {: pre}

    Example output

    ```sh
    NAME                                READY   STATUS    RESTARTS   AGE
    app                                 1/1     Running   0          2m58s
    ```
    {: screen}

1. Verify that the app can write data.

    1. Log in to your pod.
    
        ```sh
        oc exec <app-pod-name> -it bash
        ```
        {: pre}

    1. Display the contents of the `test.txt` file to confirm that your app can write data to your persistent storage.
    
        ```sh
        cat /test/test.txt
        ```
        {: pre}

        Example output
        ```sh
        Tue Mar 2 20:09:19 UTC 2021
        Tue Mar 2 20:09:25 UTC 2021
        Tue Mar 2 20:09:31 UTC 2021
        Tue Mar 2 20:09:36 UTC 2021
        Tue Mar 2 20:09:42 UTC 2021
        Tue Mar 2 20:09:47 UTC 2021
        ```
        {: screen}

    1. Exit the pod.
    
        ```sh
        exit
        ```
        {: pre}


{: cli}

You can upgrade your Satellite storage configurations to get the latest storage template revision within the same major version. 

1. List your Satellite storage configurations, make a note of the Satellite configuration you want to upgrade.
    ```sh
    ibmcloud sat storage config ls
    ```
    {: pre}

1. Upgrade the Satellite configuration. Note, only the configuration is updated. If you want to upgrade the assignments that use this configuration, you can specify the `--include-assignments` option or you can manually update each assignment using the `assignment update` command.

    Example command to upgrade a configuration to the latest revision.
    ```sh
    ibmcloud sat storage config upgrade --config CONFIG [--include-assignments]
    ```
    {: pre}

    Example command to upgrade a configuration and it's associated assignments to the latest revision.
    ```sh
    ibmcloud sat storage config upgrade --config CONFIG --include-assignments
    ```
    {: pre}

## Scaling up your ODF configuration
{: #sat-storage-odf-remote-scale-config}


To scale your ODF configuration by adding disks to your worker nodes, increase the `num-of-osd` parameter value. 

```sh
ibmcloud sat storage config param set --config <config-name> -p num-of-osd=2 --apply
```
{: pre}





### Removing the ODF remote storage assignment from the command line
{: #odf-remote-template-rm-cli}


Use the command line to remove a storage assignment.
{: shortdesc}

1. Run the following command to delete your ODF storage assignment.
    ```sh
    oc delete ocscluster --all
    ```
    {: pre}

1. List your storage assignments and find the one that you used for your cluster.
    ```sh
    ibmcloud sat storage assignment ls (--cluster CLUSTER | --config CONFIG | --location LOCATION | --service-cluster-id CLUSTER)
    ```
    {: pre}

1. Remove the assignment. After the assignment is removed, the ODF driver pods and storage classes are removed from all clusters that were part of the storage assignment.
    ```sh
    ibmcloud sat storage assignment rm --assignment <assignment_ID>
    ```
    {: pre}





## Parameter reference
{: #odf-remote-parameter-reference}

### 4.15 parameter reference
{: #odf-remote-4.15-parameters}

| Display name | CLI option | Type | Description | Default value |
| --- | --- | --- | --- | --- |
| OSD pod volume size | `osd-size`| Config | The OSD storage size in Gi(Use 512Gi or more). The default value is '512Gi'. |`512Gi` |
| OSD pod storage class | `osd-storage-class` | Config | The storage class to use when dynamically provisioning volumes for the OSD pods. | N/A |
| Number of OSD volumes | `num-of-osd`| Config | The number of storage device replicas to create. The default value is '1', which creates 1 device across 3 nodes. Increase by 1 for each additional set of 3 devices. For must use cases, leave the default value of '1'. |`1` |
| Worker pools names/IDs | `worker-pools` | Config | Specify a comma separated list of either the names or the IDs of the worker pools you want to use for ODF. Leave this field blank if you want to use 'worker-nodes'. If you want to use all the worker nodes in your cluster for ODF, then leave 'worker-pools' and 'worker-nodes' blank. | N/A |
| Worker node names | `worker-nodes` | Config | A comma separated list of the worker node names where you want to deploy ODF. Leave this field blank if you want to use 'worker-pools'. If you want to use all the worker nodes in your cluster for ODF, then then leave 'worker-nodes' and 'worker-pools' blank. The minimum number of worker nodes is 3. You can find your worker node names by running 'oc get nodes'. | N/A |
| Upgrade | `odf-upgrade`| Config | If you are upgrading an existing ODF installation, set to 'true'. |`false` |
| Billing type | `billing-type`| Config | The billing type you want to use. Choose from 'essentials' or 'advanced'. |`advanced` |
| IBM COS endpoint | `ibm-cos-endpoint` | Config | The IBM COS regional public endpoint. | N/A |
| IBM COS location constraint | `ibm-cos-location` | Config | The location constraint that you want to use when creating your bucket. For example 'us-east-standard'. | N/A |
| Access key ID | `ibm-cos-access-key` | Secret | Your IBM COS HMAC access key ID . | N/A |
| Secret access key | `ibm-cos-secret-key` | Secret | Your IBM COS HMAC secret access key. | N/A |
| Encryption enabled | `cluster-encryption`| Config | Set to 'true' if you want to enable cluster-wide encryption. |`false` |
| IAM API key | `iam-api-key` | Secret | Your IAM API key. | N/A |
| Perform Cleanup | `perform-cleanup`| Config | Set to 'true' if you want to perform complete cleanup of ODF on assignment deletion. |`false` |
| KMS encryption | `kms-encryption`| Config | Set to 'true' if you want to enable storage class encryption. |`false` |
| KMS instance name | `kms-instance-name` | Config | Your KMS instance name. The instance name must only include alphanumeric characters, '-', '_' or '.' and start and end with an alphanumeric character. | N/A |
| KMS instance id | `kms-instance-id` | Config | Your KMS instance id. | N/A |
| KMS instance Base URL | `kms-base-url` | Config | Your KMS instance public URL to connect to the instance. | N/A |
| KMS instance API key token URL | `kms-token-url` | Config | API key token URL to generate token for KMS instance. | N/A |
| KMS root key | `kms-root-key` | Secret | KMS root key of your instance. | N/A |
| KMS IAM API key | `kms-api-key` | Secret | IAM API key to access the KMS instance. The API key that you provide must have at least Viewer access to the KMS instance. | N/A |
| Ignore Noobaa | `ignore-noobaa`| Config | Set to 'false' if you want to deploy MultiCloud Object Gateway (Noobaa) |`true` |
| Disable Noobaa LB | `disable-noobaa-LB`| Config | Set to 'true' if you want to disable Noobaa public load balancer |`false` |
| In-transit Encryption | `encryption-intransit`| Config | Set to 'true' if you want to enable in-transit encryption |`false` |
| Add Single Replica Pool(once enabled, cannot be disabled) | `add-single-replica-pool`| Config | Enabling this feature creates a single replica pool without data replication, increasing the risk of data loss, data corruption, and potential system instability. Once it is enabled, it cannot be disabled |`false` |
| Taint Nodes | `taint-nodes`| Config | When set the selected worker nodes will be dedicated to Data Foundation use only |`false` |
| Prepare for Disaster Recovery | `prepare-for-disaster-recovery`| Config | Enabling this will set up the storage system for disaster recovery service with the essential configurations in place. This will subsequently allow seamless implementation of DR strategies for your workloads |`false` |
| Enable NFS | `enable-nfs`| Config | Allow exports from the Network File System (NFS) that can then be accessed internally or externally from the OpenShift cluster |`false` |
| Use Ceph RBD As Default Storage Class | `use-ceph-rbd-as-default-storage-class`| Config | Set the Ceph RADOS block device (RBD) storage class as the default storage class during the deployment of OpenShift Data Foundation |`false` |
| Resource Profile | `resource-profile`| Config | Choose a resource profile based on the availability of resources during deployment. Choose between 'lean', 'balanced' and 'performance'. |`balanced` |
{: caption="Table 1. 4.15 parameter reference" caption-side="bottom"}


### 4.16 parameter reference
{: #odf-remote-4.16-parameters}

| Display name | CLI option | Type | Description | Default value |
| --- | --- | --- | --- | --- |
| OSD pod volume size | `osd-size`| Config | The OSD storage size in Gi(Use 512Gi or more). The default value is '512Gi'. |`512Gi` |
| OSD pod storage class | `osd-storage-class` | Config | The storage class to use when dynamically provisioning volumes for the OSD pods. | N/A |
| Number of OSD volumes | `num-of-osd`| Config | The number of storage device replicas to create. The default value is '1', which creates 1 device across 3 nodes. Increase by 1 for each additional set of 3 devices. For must use cases, leave the default value of '1'. |`1` |
| Worker pools names/IDs | `worker-pools` | Config | Specify a comma separated list of either the names or the IDs of the worker pools you want to use for ODF. Leave this field blank if you want to use 'worker-nodes'. If you want to use all the worker nodes in your cluster for ODF, then leave 'worker-pools' and 'worker-nodes' blank. | N/A |
| Worker node names | `worker-nodes` | Config | A comma separated list of the worker node names where you want to deploy ODF. Leave this field blank if you want to use 'worker-pools'. If you want to use all the worker nodes in your cluster for ODF, then then leave 'worker-nodes' and 'worker-pools' blank. The minimum number of worker nodes is 3. You can find your worker node names by running 'oc get nodes'. | N/A |
| Upgrade | `odf-upgrade`| Config | If you are upgrading an existing ODF installation, set to 'true'. |`false` |
| Billing type | `billing-type`| Config | The billing type you want to use. Choose from 'essentials' or 'advanced'. |`advanced` |
| IBM COS endpoint | `ibm-cos-endpoint` | Config | The IBM COS regional public endpoint. | N/A |
| IBM COS location constraint | `ibm-cos-location` | Config | The location constraint that you want to use when creating your bucket. For example 'us-east-standard'. | N/A |
| Access key ID | `ibm-cos-access-key` | Secret | Your IBM COS HMAC access key ID . | N/A |
| Secret access key | `ibm-cos-secret-key` | Secret | Your IBM COS HMAC secret access key. | N/A |
| Encryption enabled | `cluster-encryption`| Config | Set to 'true' if you want to enable cluster-wide encryption. |`false` |
| IAM API key | `iam-api-key` | Secret | Your IAM API key. | N/A |
| Perform Cleanup | `perform-cleanup`| Config | Set to 'true' if you want to perform complete cleanup of ODF on assignment deletion. |`false` |
| KMS encryption | `kms-encryption`| Config | Set to 'true' if you want to enable storage class encryption. |`false` |
| KMS instance name | `kms-instance-name` | Config | Your KMS instance name. The instance name must only include alphanumeric characters, '-', '_' or '.' and start and end with an alphanumeric character. | N/A |
| KMS instance id | `kms-instance-id` | Config | Your KMS instance id. | N/A |
| KMS instance Base URL | `kms-base-url` | Config | Your KMS instance public URL to connect to the instance. | N/A |
| KMS instance API key token URL | `kms-token-url` | Config | API key token URL to generate token for KMS instance. | N/A |
| KMS root key | `kms-root-key` | Secret | KMS root key of your instance. | N/A |
| KMS IAM API key | `kms-api-key` | Secret | IAM API key to access the KMS instance. The API key that you provide must have at least Viewer access to the KMS instance. | N/A |
| Ignore Noobaa | `ignore-noobaa`| Config | Set to 'false' if you want to deploy MultiCloud Object Gateway (Noobaa) |`true` |
| Disable Noobaa LB | `disable-noobaa-LB`| Config | Set to 'true' if you want to disable Noobaa public load balancer |`false` |
| In-transit Encryption | `encryption-intransit`| Config | Set to 'true' if you want to enable in-transit encryption |`false` |
| Add Single Replica Pool(once enabled, cannot be disabled) | `add-single-replica-pool`| Config | Enabling this feature creates a single replica pool without data replication, increasing the risk of data loss, data corruption, and potential system instability. Once it is enabled, it cannot be disabled |`false` |
| Taint Nodes | `taint-nodes`| Config | When set the selected worker nodes will be dedicated to Data Foundation use only |`false` |
| Prepare for Disaster Recovery | `prepare-for-disaster-recovery`| Config | Enabling this will set up the storage system for disaster recovery service with the essential configurations in place. This will subsequently allow seamless implementation of DR strategies for your workloads |`false` |
| Enable NFS | `enable-nfs`| Config | Allow exports from the Network File System (NFS) that can then be accessed internally or externally from the OpenShift cluster |`false` |
| Use Ceph RBD As Default Storage Class | `use-ceph-rbd-as-default-storage-class`| Config | Set the Ceph RADOS block device (RBD) storage class as the default storage class during the deployment of OpenShift Data Foundation |`false` |
| Resource Profile | `resource-profile`| Config | Choose a resource profile based on the availability of resources during deployment. Choose between 'lean', 'balanced' and 'performance'. |`balanced` |
{: caption="Table 2. 4.16 parameter reference" caption-side="bottom"}


### 4.17 parameter reference
{: #odf-remote-4.17-parameters}

| Display name | CLI option | Type | Description | Default value |
| --- | --- | --- | --- | --- |
| OSD pod volume size | `osd-size`| Config | The OSD storage size in Gi(Use 512Gi or more). The default value is '512Gi'. |`512Gi` |
| OSD pod storage class | `osd-storage-class` | Config | The storage class to use when dynamically provisioning volumes for the OSD pods. | N/A |
| Number of OSD volumes | `num-of-osd`| Config | The number of storage device replicas to create. The default value is '1', which creates 1 device across 3 nodes. Increase by 1 for each additional set of 3 devices. For must use cases, leave the default value of '1'. |`1` |
| Worker pools names/IDs | `worker-pools` | Config | Specify a comma separated list of either the names or the IDs of the worker pools you want to use for ODF. Leave this field blank if you want to use 'worker-nodes'. If you want to use all the worker nodes in your cluster for ODF, then leave 'worker-pools' and 'worker-nodes' blank. | N/A |
| Worker node names | `worker-nodes` | Config | A comma separated list of the worker node names where you want to deploy ODF. Leave this field blank if you want to use 'worker-pools'. If you want to use all the worker nodes in your cluster for ODF, then then leave 'worker-nodes' and 'worker-pools' blank. The minimum number of worker nodes is 3. You can find your worker node names by running 'oc get nodes'. | N/A |
| Upgrade | `odf-upgrade`| Config | If you are upgrading an existing ODF installation, set to 'true'. |`false` |
| Billing type | `billing-type`| Config | The billing type you want to use. Choose from 'essentials' or 'advanced'. |`advanced` |
| IBM COS endpoint | `ibm-cos-endpoint` | Config | The IBM COS regional public endpoint. | N/A |
| IBM COS location constraint | `ibm-cos-location` | Config | The location constraint that you want to use when creating your bucket. For example 'us-east-standard'. | N/A |
| Access key ID | `ibm-cos-access-key` | Secret | Your IBM COS HMAC access key ID . | N/A |
| Secret access key | `ibm-cos-secret-key` | Secret | Your IBM COS HMAC secret access key. | N/A |
| Encryption enabled | `cluster-encryption`| Config | Set to 'true' if you want to enable cluster-wide encryption. |`false` |
| IAM API key | `iam-api-key` | Secret | Your IAM API key. | N/A |
| Perform Cleanup | `perform-cleanup`| Config | Set to 'true' if you want to perform complete cleanup of ODF on assignment deletion. |`false` |
| KMS encryption | `kms-encryption`| Config | Set to 'true' if you want to enable storage class encryption. |`false` |
| KMS instance name | `kms-instance-name` | Config | Your KMS instance name. The instance name must only include alphanumeric characters, '-', '_' or '.' and start and end with an alphanumeric character. | N/A |
| KMS instance id | `kms-instance-id` | Config | Your KMS instance id. | N/A |
| KMS instance Base URL | `kms-base-url` | Config | Your KMS instance public URL to connect to the instance. | N/A |
| KMS instance API key token URL | `kms-token-url` | Config | API key token URL to generate token for KMS instance. | N/A |
| KMS root key | `kms-root-key` | Secret | KMS root key of your instance. | N/A |
| KMS IAM API key | `kms-api-key` | Secret | IAM API key to access the KMS instance. The API key that you provide must have at least Viewer access to the KMS instance. | N/A |
| Ignore Noobaa | `ignore-noobaa`| Config | Set to 'false' if you want to deploy MultiCloud Object Gateway (Noobaa) |`true` |
| Disable Noobaa LB | `disable-noobaa-LB`| Config | Set to 'true' if you want to disable Noobaa public load balancer |`false` |
| In-transit Encryption | `encryption-intransit`| Config | Set to 'true' if you want to enable in-transit encryption |`false` |
| Add Single Replica Pool(once enabled, cannot be disabled) | `add-single-replica-pool`| Config | Enabling this feature creates a single replica pool without data replication, increasing the risk of data loss, data corruption, and potential system instability. Once it is enabled, it cannot be disabled |`false` |
| Taint Nodes | `taint-nodes`| Config | When set the selected worker nodes will be dedicated to Data Foundation use only |`false` |
| Prepare for Disaster Recovery | `prepare-for-disaster-recovery`| Config | Enabling this will set up the storage system for disaster recovery service with the essential configurations in place. This will subsequently allow seamless implementation of DR strategies for your workloads |`false` |
| Enable NFS | `enable-nfs`| Config | Allow exports from the Network File System (NFS) that can then be accessed internally or externally from the OpenShift cluster |`false` |
| Use Ceph RBD As Default Storage Class | `use-ceph-rbd-as-default-storage-class`| Config | Set the Ceph RADOS block device (RBD) storage class as the default storage class during the deployment of OpenShift Data Foundation |`false` |
| Resource Profile | `resource-profile`| Config | Choose a resource profile based on the availability of resources during deployment. Choose between 'lean', 'balanced' and 'performance'. |`balanced` |
{: caption="Table 3. 4.17 parameter reference" caption-side="bottom"}


### 4.18 parameter reference
{: #odf-remote-4.18-parameters}

| Display name | CLI option | Type | Description | Default value |
| --- | --- | --- | --- | --- |
| OSD pod volume size | `osd-size`| Config | The OSD storage size in Gi(Use 512Gi or more). The default value is '512Gi'. |`512Gi` |
| OSD pod storage class | `osd-storage-class` | Config | The storage class to use when dynamically provisioning volumes for the OSD pods. | N/A |
| Number of OSD volumes | `num-of-osd`| Config | The number of storage device replicas to create. The default value is '1', which creates 1 device across 3 nodes. Increase by 1 for each additional set of 3 devices. For must use cases, leave the default value of '1'. |`1` |
| Worker pools names/IDs | `worker-pools` | Config | Specify a comma separated list of either the names or the IDs of the worker pools you want to use for ODF. Leave this field blank if you want to use 'worker-nodes'. If you want to use all the worker nodes in your cluster for ODF, then leave 'worker-pools' and 'worker-nodes' blank. | N/A |
| Worker node names | `worker-nodes` | Config | A comma separated list of the worker node names where you want to deploy ODF. Leave this field blank if you want to use 'worker-pools'. If you want to use all the worker nodes in your cluster for ODF, then then leave 'worker-nodes' and 'worker-pools' blank. The minimum number of worker nodes is 3. You can find your worker node names by running 'oc get nodes'. | N/A |
| Upgrade | `odf-upgrade`| Config | If you are upgrading an existing ODF installation, set to 'true'. |`false` |
| Billing type | `billing-type`| Config | The billing type you want to use. Choose from 'essentials' or 'advanced'. |`advanced` |
| IBM COS endpoint | `ibm-cos-endpoint` | Config | The IBM COS regional public endpoint. | N/A |
| IBM COS location constraint | `ibm-cos-location` | Config | The location constraint that you want to use when creating your bucket. For example 'us-east-standard'. | N/A |
| Access key ID | `ibm-cos-access-key` | Secret | Your IBM COS HMAC access key ID . | N/A |
| Secret access key | `ibm-cos-secret-key` | Secret | Your IBM COS HMAC secret access key. | N/A |
| Encryption enabled | `cluster-encryption`| Config | Set to 'true' if you want to enable cluster-wide encryption. |`false` |
| IAM API key | `iam-api-key` | Secret | Your IAM API key. | N/A |
| Perform Cleanup | `perform-cleanup`| Config | Set to 'true' if you want to perform complete cleanup of ODF on assignment deletion. |`false` |
| KMS encryption | `kms-encryption`| Config | Set to 'true' if you want to enable storage class encryption. |`false` |
| KMS instance name | `kms-instance-name` | Config | Your KMS instance name. The instance name must only include alphanumeric characters, '-', '_' or '.' and start and end with an alphanumeric character. | N/A |
| KMS instance id | `kms-instance-id` | Config | Your KMS instance id. | N/A |
| KMS instance Base URL | `kms-base-url` | Config | Your KMS instance public URL to connect to the instance. | N/A |
| KMS instance API key token URL | `kms-token-url` | Config | API key token URL to generate token for KMS instance. | N/A |
| KMS root key | `kms-root-key` | Secret | KMS root key of your instance. | N/A |
| KMS IAM API key | `kms-api-key` | Secret | IAM API key to access the KMS instance. The API key that you provide must have at least Viewer access to the KMS instance. | N/A |
| Ignore Noobaa | `ignore-noobaa`| Config | Set to 'false' if you want to deploy MultiCloud Object Gateway (Noobaa) |`true` |
| Disable Noobaa LB | `disable-noobaa-LB`| Config | Set to 'true' if you want to disable Noobaa public load balancer |`false` |
| In-transit Encryption | `encryption-intransit`| Config | Set to 'true' if you want to enable in-transit encryption |`false` |
| Add Single Replica Pool(once enabled, cannot be disabled) | `add-single-replica-pool`| Config | Enabling this feature creates a single replica pool without data replication, increasing the risk of data loss, data corruption, and potential system instability. Once it is enabled, it cannot be disabled |`false` |
| Taint Nodes | `taint-nodes`| Config | When set the selected worker nodes will be dedicated to Data Foundation use only |`false` |
| Enable NFS | `enable-nfs`| Config | Allow exports from the Network File System (NFS) that can then be accessed internally or externally from the OpenShift cluster |`false` |
| Use Ceph RBD As Default Storage Class | `use-ceph-rbd-as-default-storage-class`| Config | Set the Ceph RADOS block device (RBD) storage class as the default storage class during the deployment of OpenShift Data Foundation |`false` |
| Resource Profile | `resource-profile`| Config | Choose a resource profile based on the availability of resources during deployment. Choose between 'lean', 'balanced' and 'performance'. |`balanced` |
{: caption="Table 4. 4.18 parameter reference" caption-side="bottom"}


### 4.19 parameter reference
{: #odf-remote-4.19-parameters}

| Display name | CLI option | Type | Description | Default value |
| --- | --- | --- | --- | --- |
| OSD pod volume size | `osd-size`| Config | The OSD storage size in Gi(Use 512Gi or more). The default value is '512Gi'. |`512Gi` |
| OSD pod storage class | `osd-storage-class` | Config | The storage class to use when dynamically provisioning volumes for the OSD pods. | N/A |
| Number of OSD volumes | `num-of-osd`| Config | The number of storage device replicas to create. The default value is '1', which creates 1 device across 3 nodes. Increase by 1 for each additional set of 3 devices. For must use cases, leave the default value of '1'. |`1` |
| Worker pools names/IDs | `worker-pools` | Config | Specify a comma separated list of either the names or the IDs of the worker pools you want to use for ODF. Leave this field blank if you want to use 'worker-nodes'. If you want to use all the worker nodes in your cluster for ODF, then leave 'worker-pools' and 'worker-nodes' blank. | N/A |
| Worker node names | `worker-nodes` | Config | A comma separated list of the worker node names where you want to deploy ODF. Leave this field blank if you want to use 'worker-pools'. If you want to use all the worker nodes in your cluster for ODF, then then leave 'worker-nodes' and 'worker-pools' blank. The minimum number of worker nodes is 3. You can find your worker node names by running 'oc get nodes'. | N/A |
| Upgrade | `odf-upgrade`| Config | If you are upgrading an existing ODF installation, set to 'true'. |`false` |
| Billing type | `billing-type`| Config | The billing type you want to use. Choose from 'essentials' or 'advanced'. |`advanced` |
| IBM COS endpoint | `ibm-cos-endpoint` | Config | The IBM COS regional public endpoint. | N/A |
| IBM COS location constraint | `ibm-cos-location` | Config | The location constraint that you want to use when creating your bucket. For example 'us-east-standard'. | N/A |
| Access key ID | `ibm-cos-access-key` | Secret | Your IBM COS HMAC access key ID . | N/A |
| Secret access key | `ibm-cos-secret-key` | Secret | Your IBM COS HMAC secret access key. | N/A |
| Encryption enabled | `cluster-encryption`| Config | Set to 'true' if you want to enable cluster-wide encryption. |`false` |
| IAM API key | `iam-api-key` | Secret | Your IAM API key. | N/A |
| Perform Cleanup | `perform-cleanup`| Config | Set to 'true' if you want to perform complete cleanup of ODF on assignment deletion. |`false` |
| KMS encryption | `kms-encryption`| Config | Set to 'true' if you want to enable storage class encryption. |`false` |
| KMS instance name | `kms-instance-name` | Config | Your KMS instance name. The instance name must only include alphanumeric characters, '-', '_' or '.' and start and end with an alphanumeric character. | N/A |
| KMS instance id | `kms-instance-id` | Config | Your KMS instance id. | N/A |
| KMS instance Base URL | `kms-base-url` | Config | Your KMS instance public URL to connect to the instance. | N/A |
| KMS instance API key token URL | `kms-token-url` | Config | API key token URL to generate token for KMS instance. | N/A |
| KMS root key | `kms-root-key` | Secret | KMS root key of your instance. | N/A |
| KMS IAM API key | `kms-api-key` | Secret | IAM API key to access the KMS instance. The API key that you provide must have at least Viewer access to the KMS instance. | N/A |
| Ignore Noobaa | `ignore-noobaa`| Config | Set to 'false' if you want to deploy MultiCloud Object Gateway (Noobaa) |`true` |
| Disable Noobaa LB | `disable-noobaa-LB`| Config | Set to 'true' if you want to disable Noobaa public load balancer |`false` |
| In-transit Encryption | `encryption-intransit`| Config | Set to 'true' if you want to enable in-transit encryption |`false` |
| Add Single Replica Pool(once enabled, cannot be disabled) | `add-single-replica-pool`| Config | Enabling this feature creates a single replica pool without data replication, increasing the risk of data loss, data corruption, and potential system instability. Once it is enabled, it cannot be disabled |`false` |
| Taint Nodes | `taint-nodes`| Config | When set the selected worker nodes will be dedicated to Data Foundation use only |`false` |
| Enable NFS | `enable-nfs`| Config | Allow exports from the Network File System (NFS) that can then be accessed internally or externally from the OpenShift cluster |`false` |
| Use Ceph RBD As Default Storage Class | `use-ceph-rbd-as-default-storage-class`| Config | Set the Ceph RADOS block device (RBD) storage class as the default storage class during the deployment of OpenShift Data Foundation |`false` |
| Resource Profile | `resource-profile`| Config | Choose a resource profile based on the availability of resources during deployment. Choose between 'lean', 'balanced' and 'performance'. |`balanced` |
{: caption="Table 5. 4.19 parameter reference" caption-side="bottom"}


### 4.20 parameter reference
{: #odf-remote-4.20-parameters}

| Display name | CLI option | Type | Description | Default value |
| --- | --- | --- | --- | --- |
| OSD pod volume size | `osd-size`| Config | The OSD storage size in Gi(Use 512Gi or more). The default value is '512Gi'. |`512Gi` |
| OSD pod storage class | `osd-storage-class` | Config | The storage class to use when dynamically provisioning volumes for the OSD pods. | N/A |
| Number of OSD volumes | `num-of-osd`| Config | The number of storage device replicas to create. The default value is '1', which creates 1 device across 3 nodes. Increase by 1 for each additional set of 3 devices. For must use cases, leave the default value of '1'. |`1` |
| Worker pools names/IDs | `worker-pools` | Config | Specify a comma separated list of either the names or the IDs of the worker pools you want to use for ODF. Leave this field blank if you want to use 'worker-nodes'. If you want to use all the worker nodes in your cluster for ODF, then leave 'worker-pools' and 'worker-nodes' blank. | N/A |
| Worker node names | `worker-nodes` | Config | A comma separated list of the worker node names where you want to deploy ODF. Leave this field blank if you want to use 'worker-pools'. If you want to use all the worker nodes in your cluster for ODF, then then leave 'worker-nodes' and 'worker-pools' blank. The minimum number of worker nodes is 3. You can find your worker node names by running 'oc get nodes'. | N/A |
| Upgrade | `odf-upgrade`| Config | If you are upgrading an existing ODF installation, set to 'true'. |`false` |
| Billing type | `billing-type`| Config | The billing type you want to use. Choose from 'essentials' or 'advanced'. |`advanced` |
| IBM COS endpoint | `ibm-cos-endpoint` | Config | The IBM COS regional public endpoint. | N/A |
| IBM COS location constraint | `ibm-cos-location` | Config | The location constraint that you want to use when creating your bucket. For example 'us-east-standard'. | N/A |
| Access key ID | `ibm-cos-access-key` | Secret | Your IBM COS HMAC access key ID . | N/A |
| Secret access key | `ibm-cos-secret-key` | Secret | Your IBM COS HMAC secret access key. | N/A |
| Encryption enabled | `cluster-encryption`| Config | Set to 'true' if you want to enable cluster-wide encryption. |`false` |
| IAM API key | `iam-api-key` | Secret | Your IAM API key. | N/A |
| Perform Cleanup | `perform-cleanup`| Config | Set to 'true' if you want to perform complete cleanup of ODF on assignment deletion. |`false` |
| KMS encryption | `kms-encryption`| Config | Set to 'true' if you want to enable storage class encryption. |`false` |
| KMS instance name | `kms-instance-name` | Config | Your KMS instance name. The instance name must only include alphanumeric characters, '-', '_' or '.' and start and end with an alphanumeric character. | N/A |
| KMS instance id | `kms-instance-id` | Config | Your KMS instance id. | N/A |
| KMS instance Base URL | `kms-base-url` | Config | Your KMS instance public URL to connect to the instance. | N/A |
| KMS instance API key token URL | `kms-token-url` | Config | API key token URL to generate token for KMS instance. | N/A |
| KMS root key | `kms-root-key` | Secret | KMS root key of your instance. | N/A |
| KMS IAM API key | `kms-api-key` | Secret | IAM API key to access the KMS instance. The API key that you provide must have at least Viewer access to the KMS instance. | N/A |
| Ignore Noobaa | `ignore-noobaa`| Config | Set to 'false' if you want to deploy MultiCloud Object Gateway (Noobaa) |`true` |
| Disable Noobaa LB | `disable-noobaa-LB`| Config | Set to 'true' if you want to disable Noobaa public load balancer |`false` |
| In-transit Encryption | `encryption-intransit`| Config | Set to 'true' if you want to enable in-transit encryption |`false` |
| Add Single Replica Pool(once enabled, cannot be disabled) | `add-single-replica-pool`| Config | Enabling this feature creates a single replica pool without data replication, increasing the risk of data loss, data corruption, and potential system instability. Once it is enabled, it cannot be disabled |`false` |
| Taint Nodes | `taint-nodes`| Config | When set the selected worker nodes will be dedicated to Data Foundation use only |`false` |
| Enable NFS | `enable-nfs`| Config | Allow exports from the Network File System (NFS) that can then be accessed internally or externally from the OpenShift cluster |`false` |
| Use Ceph RBD As Default Storage Class | `use-ceph-rbd-as-default-storage-class`| Config | Set the Ceph RADOS block device (RBD) storage class as the default storage class during the deployment of OpenShift Data Foundation |`false` |
| Resource Profile | `resource-profile`| Config | Choose a resource profile based on the availability of resources during deployment. Choose between 'lean', 'balanced' and 'performance'. |`balanced` |
| Set default StorageClass for virtualization | `set-default-storage-class-for-virtualization`| Config | If enabled, RBD virtualization StorageClass will be marked as the default for KubeVirt VM disks (persistent volumes) upon installation. |`false` |
| Enable automatic capacity scaling | `enable-automatic-capacity-scaling`| Config | To automatically add additional raw capacity equivalent to the configured deployment size whenever used capacity reaches 70%. |`false` |
| Cluster expansion limit | `cluster-expansion-limit`| Config | The maximum limit to which the cluster can expand in the cloud. Automatic capacity scaling is suspended if exceeded. |`12Ti` |
{: caption="Table 6. 4.20 parameter reference" caption-side="bottom"}






## Storage class reference for OpenShift Data Foundation for remote devices
{: #sat-storage-odf-remote-sc-ref}

Review the Satellite storage classes for OpenShift Data Foundation. You can describe storage classes in the command line with the `oc describe sc <storage-class-name>` command.
{: shortdesc}

| Storage class name | Type | File system | Provisioner | Volume binding mode | Allow volume expansion | Reclaim policy |
| --- | --- | --- | --- | --- | --- | --- |
| `sat-ocs-cephrbd-gold` | Block | ext4 | `openshift-storage.rbd.csi.ceph.com` | Immediate | True | Delete |
| `sat-ocs-cephfs-gold` | File | N/A | `openshift-storage.cephfs.csi.ceph.com` | Immediate | True |Delete |
| `sat-ocs-cephrgw-gold` | Object | N/A | `openshift-storage.ceph.rook.io/bucket` | Immediate | N/A | Delete |
| `sat-ocs-noobaa-gold` **Default** | OBC | N/A | `openshift-storage.noobaa.io/obc` | Immediate | N/A | Delete |
| `sat-ocs-cephrbd-gold-metro` | Block | ext4 | `openshift-storage.rbd.csi.ceph.com` | WaitForFirstConsumer | True | Delete |
| `sat-ocs-cephfs-gold-metro` | File | N/A | `openshift-storage.cephfs.csi.ceph.com` | WaitForFirstConsumer | True | Delete |
{: caption="Storage class reference for OpenShift Container storage" caption-side="bottom"}