Installing the IBM Cloud Object Storage plug-in
Virtual Private Cloud Classic infrastructure
Install the IBM Cloud Object Storage plug-in to set up pre-defined storage classes for IBM Cloud Object Storage. You can use these storage classes to create a PVC to provision IBM Cloud Object Storage for your apps.
Installing the plug-in via Helm
- Prerequisites
- The IBM Cloud Object Storage plug-in requires at least 0.2 vCPU and 128 MB of memory.
Before you begin: Log in to your account. If applicable, target the appropriate resource group. Set the context for your cluster.
Install the ibmc Helm plug-in and the ibm-object-storage-plugin:
-
Make sure that your worker node applies the latest patch for your minor version to run your worker node with the latest security settings. The patch version also ensures that the root password on the worker node is renewed.
If you did not apply updates or reload your worker node within the last 90 days, your root password on the worker node expires and the installation of the storage plug-in might fail.
-
List the current patch version of your worker nodes.
ibmcloud ks worker ls --cluster <cluster_name_or_ID>Example output
OK ID Public IP Private IP Machine Type State Status Zone Version kube-dal10-crb1a23b456789ac1b20b2nc1e12b345ab-w26 169.xx.xxx.xxx 10.xxx.xx.xxx b3c.4x16.encrypted normal Ready dal10 1.33_1523*If your worker node does not apply the latest patch version, you see an asterisk (
*) in the Version column of your CLI output. -
Review the Kubernetes version information to find the latest changes.
-
Apply the latest patch version by reloading your worker node. Follow the instructions in the ibmcloud ks worker reload command to safely reschedule any running pods on your worker node before you reload your worker node. Note that during the reload, your worker node machine is updated with the latest image and data is deleted if not stored outside the worker node.
-
-
Review the change log and verify support for your cluster version and architecture.
-
Follow the instructions to install the version 3 Helm client on your local machine.
If you enabled VRF and service endpoints in your IBM Cloud account, you can use the private IBM Cloud Helm repository to keep your image pull traffic on the private network. If you can't enable VRF or service endpoints in your account, use the public Helm repository.
-
Add the IBM Cloud Helm repo to your cluster.
helm repo add ibm-helm https://raw.githubusercontent.com/IBM/charts/master/repo/ibm-helm -
Update the Helm repos to retrieve the most recent version of all Helm charts in this repo.
helm repo update -
If you installed the IBM Cloud Object Storage Helm plug-in earlier, remove the
ibmcplug-in.helm plugin uninstall ibmc -
Download the Helm charts and unpack the charts in your current directory.
helm fetch --untar ibm-helm/ibm-object-storage-pluginIf the output shows
Error: failed to untar: a file or directory with the name ibm-object-storage-plugin already exists, delete youribm-object-storage-plugindirectory and rerun thehelm fetchcommand. -
If your are installing the plug-in for the first time, install the IBM Cloud Object Storage Helm plug-in
ibmc. The plug-in automatically retrieves your cluster location and to set the API endpoint for your IBM Cloud Object Storage buckets in your storage classes. If you use Windows as your operating system, skip this step.The
ibmcplug-in is not supported on Windows.-
Install the Helm plug-in.
helm plugin install ./ibm-object-storage-plugin/helm-ibmc -
Verify that the
ibmcplug-in is installed successfully.helm ibmc --helpExample output
Helm version: v3.13.1+g3547a4b Install or upgrade Helm charts in IBM K8S Service(IKS) Usage: helm ibmc [command] Available Commands: install Install a Helm chart upgrade Upgrade the release to a new version of the Helm chart Available Flags: -h, --help (Optional) This text. -u, --update (Optional) Update this plugin to the latest version Example Usage: Install: helm ibmc install ibm-object-storage-plugin ibm-helm/ibm-object-storage-plugin Upgrade: helm ibmc upgrade [RELEASE] ibm-helm/ibm-object-storage-plugin Note: 1. It is always recommended to install latest version of ibm-object-storage-plugin chart. 2. It is always recommended to have 'kubectl' client up-to-date. -
Optional: If the output shows the error
Error: fork/exec /home/iksadmin/.helm/plugins/helm-ibmc/ibmc.sh: permission denied, run the following command.chmod 755 /Users/<user_name>/Library/helm/plugins/helm-ibmc/ibmc.shThen retry the
ibmc --helpcommand.helm ibmc --help
-
-
Optional: Limit the IBM Cloud Object Storage plug-in to access only the Kubernetes secrets that hold your IBM Cloud Object Storage service credentials. By default, the plug-in can access all Kubernetes secrets in your cluster.
-
Store your IBM Cloud Object Storage service credentials in a Kubernetes secret).
-
Change directories to the
ibm-object-storage-plugindirectory.cd ibm-object-storage-plugin -
From the
ibm-object-storage-plugin, navigate to thetemplatesdirectory and list available files. OS X and Linuxcd templates && lsWindows
chdir templates && dir -
Open the
provisioner-sa.yamlfile and look for theibmcloud-object-storage-secret-readerClusterRoledefinition. -
Add the name of the secret that you created earlier to the list of secrets that the plug-in is authorized to access in the
resourceNamessection.kind: ClusterRole apiVersion: rbac.authorization.k8s.io/v1beta1 metadata: name: ibmcloud-object-storage-secret-reader rules: - apiGroups: [""] resources: ["secrets"] resourceNames: ["<secret_name1>","<secret_name2>"] verbs: ["get"] -
Save your changes and navigate to your working directory.
-
Install the
ibm-object-storage-pluginin your cluster. When you install the plug-in, pre-defined storage classes are added to your cluster. If you completed the previous step for limiting the IBM Cloud Object Storage plug-in to access only the Kubernetes secrets that hold your IBM Cloud Object Storage service credentials and you are still targeting thetemplatesdirectory, change directories to your working directory. To set a limit on how much storage is available for the bucket, set the--set quotaLimit=trueVPC clusters only: To enable authorized IPs on VPC, set the--set bucketAccessPolicy=trueoption.
If you don't set the --set quotaLimit=true option during installation, you can't set quotas for your PVCs.
Example helm ibmc install commands for non-Windows operating systems.
helm ibmc install ibm-object-storage-plugin ibm-helm/ibm-object-storage-plugin --set license=true [--set quotaLimit=true/false] [--set bucketAccessPolicy=true/false] [--set allowCrossNsSecret=true/false]
Example helm install command for Windows.
helm install ibm-object-storage-plugin ./ibm-object-storage-plugin --set dcname="${DC_NAME}" --set provider="${CLUSTER_PROVIDER}" --set workerOS="${WORKER_OS}" --set region="${REGION} --set platform="${PLATFORM}" --set license=true [--set bucketAccessPolicy=false]
quotaLimit- A quota limit sets the maximum amount of storage (in bytes) available for a bucket. If you set this option to
true, then when you create PVCs, the quota on buckets created by those PVCs is equal to the PVC size. The default value istrue. allowCrossNsSecret- By default, the plug-in searches for the Kubernetes secret in namespaces other than the PVC namespace. If you set this option to
falsethe plug-in searches for the Kubernetes secret in only the PVC namespace. The default value istrue. kubeDriver- Set to
/usr/libexec/kubernetes. DC_NAME- The cluster data center. To retrieve the data center, run
kubectl get cm cluster-info -n kube-system -o jsonpath="{.data.cluster-config\.json}{'\n'}". Store the data center value in an environment variable by runningSET DC_NAME=<datacenter>. Optional: Set the environment variable in Windows PowerShell by running$env:DC_NAME="<datacenter>". CLUSTER_PROVIDER- The infrastructure provider. To retrieve this value, run
kubectl get nodes -o jsonpath="{.items[*].metadata.labels.ibm-cloud\.kubernetes\.io\/iaas-provider}{'\n'}". If the output from the previous step containssoftlayer, then set theCLUSTER_PROVIDERto"IBMC". If the output containsgc,ng, org2, then set theCLUSTER_PROVIDERto"IBMC-VPC". Store the infrastructure provider in an environment variable. For example:SET CLUSTER_PROVIDER="IBMC-VPC". WORKER_OSandPLATFORM- The operating system of the worker nodes. To retrieve these values, run
kubectl get nodes -o jsonpath="{.items[*].metadata.labels.ibm-cloud\.kubernetes\.io\/os}{'\n'}". Store the operating system of the worker nodes in an environment variable. For IBM Cloud Kubernetes Service clusters, runSET WORKER_OS="debian"andSET PLATFORM="k8s". REGION- The region of the worker nodes. To retrieve this value, run
kubectl get nodes -o yaml | grep 'ibm-cloud\.kubernetes\.io/region'. Store the region of the worker nodes in an environment variable by runningSET REGION="< region>".
Updating the IBM Cloud Object Storage plug-in
You can upgrade the existing IBM Cloud Object Storage plug-in to the most recent version.
-
Get the name of your IBM Cloud Object Storage plug-in Helm release and the version of the plug-in in your cluster.
helm ls -A | grep objectExample output
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION <release_name> <namespace> 1 2020-02-13 16:05:58.599679 -0500 EST deployed ibm-object-storage-plugin-1.1.2 1.1.2 -
Update the IBM Cloud Helm repo to retrieve the most recent version of all Helm charts in this repo.
helm repo update -
Update the IBM Cloud Object Storage
ibmcHelm plug-in to the most recent version.helm ibmc --update -
Install the most recent version of the
ibm-object-storage-pluginfor your operating system.Example
helm ibmc upgradecommand for non-Windows operating systems.helm ibmc upgrade ibm-object-storage-plugin ibm-helm/ibm-object-storage-plugin --set license=true [--set quotaLimit=true/false] [--set bucketAccessPolicy=true/false] [--set allowCrossNsSecret=true/false]Example
helm upgradecommand for Windows.helm upgrade ibm-object-storage-plugin ./ibm-object-storage-plugin --set dcname="${DC_NAME}" --set provider="${CLUSTER_PROVIDER}" --set workerOS="${WORKER_OS}" --set region="${REGION} --set platform="${PLATFORM}" --set license=true [--set bucketAccessPolicy=false]DC_NAME- The cluster data center. To retrieve the data center, run
kubectl get cm cluster-info -n kube-system -o jsonpath="{.data.cluster-config\.json}{'\n'}". Store the data center value in an environment variable by runningSET DC_NAME=<datacenter>. Optional: Set the environment variable in Windows PowerShell by running$env:DC_NAME="<datacenter>". CLUSTER_PROVIDER- The infrastructure provider. To retrieve this value, run
kubectl get nodes -o jsonpath="{.items[*].metadata.labels.ibm-cloud\.kubernetes\.io\/iaas-provider}{'\n'}". If the output from the previous step containssoftlayer, then set theCLUSTER_PROVIDERto"IBMC". If the output containsgc,ng, org2, then set theCLUSTER_PROVIDERto"IBMC-VPC". Store the infrastructure provider in an environment variable. For example:SET CLUSTER_PROVIDER="IBMC-VPC". WORKER_OSandPLATFORM- The operating system of the worker nodes. To retrieve these values, run
kubectl get nodes -o jsonpath="{.items[*].metadata.labels.ibm-cloud\.kubernetes\.io\/os}{'\n'}". Store the operating system of the worker nodes in an environment variable. For IBM Cloud Kubernetes Service clusters, runSET WORKER_OS="debian"andSET PLATFORM="k8s". REGION- The region of the worker nodes. To retrieve this value, run
kubectl get nodes -o yaml | grep 'ibm-cloud\.kubernetes\.io/region'. Store the region of the worker nodes in an environment variable by runningSET REGION="< region>". |
-
Verify that the
ibmcloud-object-storage-pluginis successfully upgraded. The upgrade of the plug-in is successful when you seedeployment "ibmcloud-object-storage-plugin" successfully rolled outin your CLI output.kubectl rollout status deployment/ibmcloud-object-storage-plugin -n ibm-object-s3fs -
Verify that the
ibmcloud-object-storage-driveris successfully upgraded. The upgrade is successful when you seedaemon set "ibmcloud-object-storage-driver" successfully rolled outin your CLI output.kubectl rollout status ds/ibmcloud-object-storage-driver -n ibm-object-s3fs -
Verify that the IBM Cloud Object Storage pods are in a
Runningstate.kubectl get pods -n <namespace> -o wide | grep object-storage
If you're having trouble updating the IBM Cloud Object Storage plug-in, see Object storage: Installing the Object storage ibmc Helm plug-in fails and Object storage: Installing the IBM Cloud Object Storage plug-in fails.
Removing the IBM Cloud Object Storage plug-in
If you don't want to provision and use IBM Cloud Object Storage in your cluster, you can uninstall the ibm-object-storage-plugin and the ibmc Helm plug-in.
Removing the ibmc Helm plug-in or the ibm-object-storage-plugin doesn't remove existing PVCs, PVs, or data. When you remove the ibm-object-storage-plugin, all the related driver pods and daemon sets are
removed from your cluster, which means you can't provision new IBM Cloud Object Storage for your cluster unless you configure your app to use the IBM Cloud Object Storage API directly. There is no impact on existing PVCs and PVs.
Before you begin:
- Log in to your account. If applicable, target the appropriate resource group. Set the context for your cluster.
- Make sure that you don't have any PVCs or PVs in your cluster that use IBM Cloud Object Storage. To list all pods that mount a specific PVC, run
kubectl get pods --all-namespaces -o=jsonpath='{range .items[*]}{"\n"}{.metadata.name}{":\t"}{range .spec.volumes[*]}{.persistentVolumeClaim.claimName}{" "}{end}{end}' | grep "<pvc_name>".
To remove the ibmc Helm plug-in and the ibm-object-storage-plugin:
-
Get the name of your
ibm-object-storage-pluginHelm installation.helm ls -A | grep ibm-object-storage-pluginExample output
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION ibm-object-storage-plugin default 2 2020-04-01 08:46:01.403477 -0400 EDT deployed ibm-object-storage-plugin-1.1.4 1.1.4 -
Uninstall the
ibm-object-storage-plugin.helm uninstall <release_name>Example command for a release named
ibm-object-storage-plugin.helm uninstall ibm-object-storage-plugin -
Verify that the
ibm-object-storage-pluginpods are removed.kubectl get pod -n <namespace> | grep object-storageThe removal of the pods is successful if no pods are displayed in your CLI output. The removal of the storage classes is successful if no storage classes are displayed in your CLI output.
-
Verify that the storage classes are removed.
kubectl get sc | grep s3 -
If you use OS X or a Linux distribution, remove the
ibmcHelm plug-in. If you use Windows, this step is not required.-
Remove the
ibmcHelm plug-in.helm plugin uninstall ibmc -
Verify that the
ibmcplug-in is removed. Theibmcplug-in is removed successfully if theibmcplug-in is not listed in your CLI output.helm plugin listExample output
NAME VERSION DESCRIPTION
-
Deciding on the object storage configuration
IBM Cloud Kubernetes Service provides pre-defined storage classes that you can use to create buckets with a specific configuration.
-
List available storage classes in IBM Cloud Kubernetes Service.
kubectl get sc | grep s3Example output
ibmc-s3fs-cold-cross-region ibm.io/ibmc-s3fs 8m ibmc-s3fs-cold-regional ibm.io/ibmc-s3fs 8m ibmc-s3fs-smart-cross-region ibm.io/ibmc-s3fs 8m ibmc-s3fs-smart-perf-cross-region ibm.io/ibmc-s3fs 8m ibmc-s3fs-smart-perf-regional ibm.io/ibmc-s3fs 8m ibmc-s3fs-smart-regional ibm.io/ibmc-s3fs 8m ibmc-s3fs-standard-cross-region ibm.io/ibmc-s3fs 8m ibmc-s3fs-standard-perf-cross-region ibm.io/ibmc-s3fs 8m ibmc-s3fs-standard-perf-regional ibm.io/ibmc-s3fs 8m ibmc-s3fs-standard-regional ibm.io/ibmc-s3fs 8m ibmc-s3fs-vault-cross-region ibm.io/ibmc-s3fs 8m ibmc-s3fs-vault-regional ibm.io/ibmc-s3fs 8m -
Choose a storage class that fits your data access requirements. The storage class determines the storage capacity, read and write operations, and outbound bandwidth for a bucket. The option that is correct for you is based on how frequently data is read and written to your service instance.
- Standard: This option is used for hot data that is accessed frequently. Common use cases are web or mobile apps.
- Vault: This option is used for workloads or cool data that are accessed infrequently, such as once a month or less. Common use cases are archives, short-term data retention, digital asset preservation, tape replacement, and disaster recovery.
- Cold: This option is used for cold data that is rarely accessed (every 90 days or less), or inactive data. Common use cases are archives, long-term backups, historical data that you keep for compliance, or workloads and apps that are rarely accessed.
- Smart: This option is used for workloads and data that don't follow a specific usage pattern, or that are too huge to determine or predict a usage pattern.
-
Decide on the level of resiliency for the data that is stored in your bucket. For more information, see Regions and endpoints.
- Cross-region: With this option, your data is stored across three regions within a geolocation for highest availability. If you have workloads that are distributed across regions, requests are routed to the nearest regional
endpoint. The API endpoint for the geolocation is automatically set by the
ibmcHelm plug-in that you installed earlier based on the location that your cluster is in. For example, if your cluster is inUS South, then your storage classes are configured to use theUS GEOAPI endpoint for your buckets. - Regional: With this option, your data is replicated across multiple zones within one region. If you have workloads that are located in the same region, you see lower latency and better performance than in a cross-regional
setup. The regional endpoint is automatically set by the
ibmHelm plug-in that you installed earlier based on the location that your cluster is in. For example, if your cluster is inUS South, then your storage classes were configured to useUS Southas the regional endpoint for your buckets.
- Cross-region: With this option, your data is stored across three regions within a geolocation for highest availability. If you have workloads that are distributed across regions, requests are routed to the nearest regional
endpoint. The API endpoint for the geolocation is automatically set by the
-
Review the detailed IBM Cloud Object Storage bucket configuration for a storage class.
kubectl describe storageclass <storageclass_name>Example output
Name: ibmc-s3fs-standard-cross-region IsDefaultClass: No Annotations: <none> Provisioner: ibm.io/ibmc-s3fs Parameters: ibm.io/chunk-size-mb=16,ibm.io/curl-debug=false,ibm.io/debug-level=warn,ibm.io/iam-endpoint=https://iam.bluemix.net,ibm.io/kernel-cache=true,ibm.io/multireq-max=20,ibm.io/object-store-endpoint=https://s3-api.dal-us-geo.objectstorage.service.networklayer.com,ibm.io/object-store-storage-class=us-standard,ibm.io/parallel-count=2,ibm.io/s3fs-fuse-retry-count=5,ibm.io/stat-cache-size=100000,ibm.io/tls-cipher-suite=AESGCM AllowVolumeExpansion: <unset> MountOptions: <none> ReclaimPolicy: Delete VolumeBindingMode: Immediate Events: <none>ibm.io/chunk-size-mb- The size of a data chunk that is read from or written to IBM Cloud Object Storage in megabytes. Storage classes with
perfin their name are set up with 52 megabytes. Storage classes withoutperfin their name use 16 megabyte chunks. For example, if you want to read a file that is1GB, the plug-in reads this file in multiple 16 or 52-megabyte chunks. ibm.io/curl-debug- Enable the logging of requests that are sent to the IBM Cloud Object Storage service instance. If enabled, logs are sent to
syslogand you can forward the logs to an external logging server. By default, all storage classes are set tofalseto disable this logging feature. ibm.io/debug-level- The logging level that is set by the IBM Cloud Object Storage plug-in. All storage classes are set up with the
WARNlogging level. ibm.io/iam-endpoint- The API endpoint for IBM Cloud Identity and Access Management (IAM).
ibm.io/kernel-cache- Enable or disable the kernel buffer cache for the volume mount point. If enabled, data that is read from IBM Cloud Object Storage is stored in the kernel cache to ensure fast read access to your data. If disabled, data is not cached and
always read from IBM Cloud Object Storage. Kernel cache is enabled for
standardandsmartstorage classes, and disabled forcoldandvaultstorage classes. ibm.io/multireq-max- The maximum number of parallel requests that can be sent to the IBM Cloud Object Storage service instance to list files in a single directory. All storage classes are set up with a maximum of 20 parallel requests.
ibm.io/object-store-endpoint- The API endpoint to use to access the bucket in your IBM Cloud Object Storage service instance. The endpoint is automatically set based on the region of your cluster. If you want to access an existing bucket that is located in a different region than the one where your cluster is in, you must create your own storage class and use the API endpoint for your bucket.
ibm.io/object-store-storage-class- The name of the storage class.
ibm.io/parallel-count- The maximum number of parallel requests that can be sent to the IBM Cloud Object Storage service instance for a single read or write operation. Storage classes with
perfin their name are set up with a maximum of 20 parallel requests. Storage classes withoutperfare set up with two parallel requests by default. ibm.io/s3fs-fuse-retry-count- The maximum number of retries for a read or write operation before the operation is considered unsuccessful. All storage classes are set up with a maximum of five retries.
ibm.io/stat-cache-size- The maximum number of records that are kept in the IBM Cloud Object Storage metadata cache. Every record can take up to 0.5 kilobytes. All storage classes set the maximum number of records to 100000 by default.
ibm.io/tls-cipher-suite- The TLS cipher suite that must be used when a connection to IBM Cloud Object Storage is established via the HTTPS endpoint. The value for the cipher suite must follow the OpenSSL format. If your worker nodes run an Ubuntu operating system, your storage classes are set up to use the
AESGCMcipher suite by default. For worker nodes that run a Red Hat operating system, theecdhe_rsa_aes_128_gcm_sha_256cipher suite is used by default.
For more information about each storage class, see the storage class reference. If you want to change any of the pre-set values, create your own customized storage class.
-
Decide on a name for your bucket. The name of a bucket must be unique in IBM Cloud Object Storage. You can also choose to automatically create a name for your bucket by the IBM Cloud Object Storage plug-in. To organize data in a bucket, you can create subdirectories.
The storage class that you chose earlier determines the pricing for the entire bucket. You can't define different storage classes for subdirectories. If you want to store data with different access requirements, consider creating multiple buckets by using multiple PVCs.
-
Choose if you want to keep your data and the bucket after the cluster or the persistent volume claim (PVC) is deleted. When you delete the PVC, the PV is always deleted. You can choose if you want to also automatically delete the data and the bucket when you delete the PVC. Your IBM Cloud Object Storage service instance is independent from the retention policy that you select for your data and is never removed when you delete a PVC.
Now that you decided on the configuration that you want, you are ready to create a PVC to provision IBM Cloud Object Storage.
Verifying your installation
Review the pod details to verify that the plug-in installation succeeded.
-
Verify the installation succeeded by listing the driver pods.
kubectl get pod --all-namespaces -o wide | grep objectExample output
ibmcloud-object-storage-driver-9n8g8 1/1 Running 0 2m ibmcloud-object-storage-plugin-7c774d484b-pcnnx 1/1 Running 0 2mThe installation is successful when you see one
ibmcloud-object-storage-pluginpod and one or moreibmcloud-object-storage-driverpods. The number ofibmcloud-object-storage-driverpods equals the number of worker nodes in your cluster. All pods must be in aRunningstate for the plug-in to function properly. If the pods fail, runkubectl describe pod -n ibm-object-s3fs <pod_name>to find the root cause for the failure. -
Verify that the storage classes are created successfully.
kubectl get sc | grep s3Example output
ibmc-s3fs-cold-cross-region ibm.io/ibmc-s3fs 8m ibmc-s3fs-cold-regional ibm.io/ibmc-s3fs 8m ibmc-s3fs-smart-cross-region ibm.io/ibmc-s3fs 8m ibmc-s3fs-smart-perf-cross-region ibm.io/ibmc-s3fs 8m ibmc-s3fs-smart-perf-regional ibm.io/ibmc-s3fs 8m ibmc-s3fs-smart-regional ibm.io/ibmc-s3fs 8m ibmc-s3fs-standard-cross-region ibm.io/ibmc-s3fs 8m ibmc-s3fs-standard-perf-cross-region ibm.io/ibmc-s3fs 8m ibmc-s3fs-standard-perf-regional ibm.io/ibmc-s3fs 8m ibmc-s3fs-standard-regional ibm.io/ibmc-s3fs 8m ibmc-s3fs-vault-cross-region ibm.io/ibmc-s3fs 8m ibmc-s3fs-vault-regional ibm.io/ibmc-s3fs 8mIf you want to set one of the IBM Cloud Object Storage storage classes as your default storage class, run
kubectl patch storageclass <storageclass> -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'. Replace<storageclass>with the name of the IBM Cloud Object Storage storage class. -
Follow the instructions to add object storage to your apps.
If you're having trouble installing the IBM Cloud Object Storage plug-in, see Object storage: Installing the Object storage ibmc Helm plug-in fails and Object storage: Installing the IBM Cloud Object Storage plug-in fails.