FNCM on Containers: GCS Fuse Storage on GKE
Introduction
Welcome to another installment in our FNCM on Containers series!
This guide provides step-by-step instructions on how to set up Google Cloud Storage (GCS) Fuse on Google Kubernetes Engine (GKE) for FileNet Content Manager deployments. By leveraging GCS Fuse, you can mount GCS buckets for Persistent Storage in your FileNet environment, enabling scalable and cost-effective storage solutions.
This guide will cover the following topics and features:
-
Overview of GCS Fuse and its benefits for FileNet deployments.
-
Create a GCS bucket for FileNet storage.
-
Configure GKE to use GCS Fuse for Persistent Volumes.
-
Step-by-step instructions to install and configure GCS Fuse on GKE.
Prerequisites:
-
A Google Cloud Platform account
-
Basic knowledge of GCP and IBM FileNet
-
Familiarity with command-line tools and terminal commands
-
Bastion host with access to GKE
-
GKE cluster setup and running, using version 1.25 or later
-
You are using FileNet Content Manager 5.7.0IF3 or later, which includes support for GCS Fuse as a storage option.
GCS Fuse does not support Dynamic Provisioning of Persistent Volumes. All Persistent Volumes must be pre-created and bound to Persistent Volume Claims before they can be used by FileNet pods.
Environment Setup
Before we begin, make sure you have the following tools installed on your Bastion host:
- Install Google Cloud SDK
Follow the instructions in the official documentation to install the Google Cloud SDK: https://cloud.google.com/sdk/docs/install
- Install kubectl
Follow the instructions in the official documentation to install kubectl: https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-access-for-kubectl
We will be defining the following session variables:
export PROJECT_ID=<your-gcp-project-id>
export REGION=us-central1
export ZONE=us-central1-a
export GKE_CLUSTER_NAME=fncm-cluster
Configure gcloud CLI:
gcloud config set project $PROJECT_ID
gcloud config set compute/region $REGION
gcloud config set compute/zone $ZONE
gcloud config set container/cluster $GKE_CLUSTER_NAME
Configure Access and Workload Identity
Google Cloud Workload Identity (specifically for GKE) allows Kubernetes service accounts in GKE pods to directly impersonate Google Cloud IAM service accounts, enabling secure access to GCS buckets without managing long-lived JSON keys. This keyless approach enhances security by enforcing least privilege and reducing credential exposure.
-
Enable GKE and Cloud Storage APIs:
gcloud services enable container.googleapis.com
gcloud services enable storage.googleapis.com
-
Make sure you have the following role or roles on the Project level:
roles/kubernetes.engine.admin
roles/storage.admin
roles/storage.objectviewer
-
Enable Workload Identity on your GKE cluster:
gcloud container clusters update $GKE_CLUSTER_NAME \
--workload-pool=$PROJECT_ID.svc.id.goog
-
Update your node pool to allow metadata access for GKE Metadata Server:
gcloud container node-pools list
export NODEPOOL_NAME=<NodePoolName>
gcloud container node-pools update $NODEPOOL_NAME --workload-metadata=GKE_METADATA
Updating an existing node pool will cause the nodes to be re-created, which may briefly disrupt running workloads on those nodes.
-
Verify that the node pool has been updated:
gcloud container node-pools describe $NODEPOOL_NAME --format="value(config.workloadMetadataConfig.mode)"
For more information on Workload Identity and setting up access to GCS buckets, refer to the official documentation: https://docs.cloud.google.com/kubernetes-engine/docs/how-to/workload-identity
Enable GCS Fuse CSI Driver
The GCS Fuse CSI Driver allows GKE workloads to mount GCS buckets as persistent volumes using the Container Storage Interface (CSI). If you GKE cluster is created with autopilot enabled, the GCS Fuse CSI Driver will already be installed.
-
If you are creating a new standard GKE cluster, you can enable the GCS Fuse CSI Driver during cluster creation:
gcloud container clusters create $GKE_CLUSTER_NAME \
--addons GcsFuseCsiDriver \
--cluster-version=VERSION \
--location=LOCATION
--workload-pool=$PROJECT_ID.svc.id.goog
-
If you have an existing standard GKE cluster, you can enable the GCS Fuse CSI Driver using the following command:
gcloud container clusters update $GKE_CLUSTER_NAME \
--update-addons GcsFuseCsiDriver=ENABLED
-
Verify that the GCS Fuse CSI Driver is enabled:
gcloud container clusters describe $GKE_CLUSTER_NAME \
--format="value(addonsConfig.gcsFuseCsiDriverConfig.enabled)"
For more information on the GCS Fuse CSI Driver, refer to the official documentation: https://docs.cloud.google.com/kubernetes-engine/docs/how-to/persistent-volumes/cloud-storage-fuse-csi-driver
Create GCS Bucket
Our next step is to create a GCS bucket that will be used to store FileNet Content Manager data. GSC buckets used for persistent volumes require "Uniform bucket-level access" for the CSI driver to function properly. The below command will create the bucket in the same region as our GKE cluster, as defined in the environment setup section.
- Create a GCS bucket with uniform bucket-level access:
export BUCKET_NAME=fncm-gcs-fuse-bucket
gcloud storage buckets create gs://$BUCKET_NAME \
--uniform-bucket-level-access
-
Verify the bucket has been created:
gcloud storage buckets list --filter="name:$BUCKET_NAME"
For more information on creating GCS buckets, refer to the official documentation: https://docs.cloud.google.com/storage/docs/creating-buckets
Creating the namespace and persistent volumes and claims
Next, we will create a Kubernetes namespace for FileNet Content Manager and define the Persistent Volumes (PVs) that will use GCS Fuse to mount the GCS bucket we created earlier.
-
Create a namespace for FileNet Content Manager:
export NAMESPACE=fncm
kubectl create namespace $NAMESPACE
The below YAML manifest defines a Persistent Volume (PV) and Persistent Volume Claim (PVC) using GCS Fuse. This is a template, for a full example please refer to the end of the blog for all PV / PVC definitions.
We will using 1 GCS bucket for all the PVs, but you can create multiple buckets if desired.
-
Create Persistent Volumes using GCS Fuse - gfuse-pv.yaml:
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: operator-shared-pvc
namespace: <namespace>
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: <size>
volumeName: <persistent-volume-name>
storageClassName: gcsfuse
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: <persistent-volume-name>
spec:
accessModes:
- ReadWriteMany
capacity:
storage: 1Gi
csi:
driver: gcsfuse.csi.storage.gke.io
volumeHandle: <bucketname>:<foldername>
volumeAttributes:
gcsfuseMetadataPrefetchOnMount: "true"
mountOptions:
- implicit-dirs
- gid=1000
- only-dir=<foldername>
storageClassName: gcsfuse
persistentVolumeReclaimPolicy: Retain
There are some important parameters to note in the above manifest:
-
volumeHandle: This is a required parameter that specifies the GCS bucket and folder to mount in the format <bucketname>:<foldername>. The folder name is optional, but it is recommended to use a separate folder for each PV to avoid conflicts. Specifying a folder allows for multiple PVs to use the same bucket while keeping their data organized and separated.
-
mountOptions:
-
implicit-dirs: This option allows GCS Fuse to treat directories in the bucket as actual directories in the file system, which is important for FileNet Content Manager to function properly.
-
gid=1000: This option sets the group ID of the mounted volume to 1000, you can choose any GID for your mounted volume. We will adjust the pod security to use fsGroup: 1000 in the FileNet custom resource definition to ensure proper access to the mounted volumes.
-
only-dir=<foldername>: This option restricts access to only the specified folder within the bucket, providing an additional layer of security.
-
storageClassName: This can be any name you choose, but it must match the storageClassName defined in the PVC.
-
persistentVolumeReclaimPolicy: This can be set to Retain or Retain depending on whether you want the PV to be deleted when the PVC is deleted. For GCS Fuse, it is recommended to use Retain to prevent accidental deletion of data in the GCS bucket.
-
name of the pvc: These are the default names that the FileNet Content Manager operator will look for when mounting volumes. If you choose to use different names, you will need to update the custom resource accordingly.
For all templates and examples, refer to the end of the blog for the full PV and PVC definitions.
-
Apply the PV and PVC manifests:
kubectl apply -f gfuse-pv.yaml
-
Confirm that the PVs and PVCs have been created and are in the correct state:
kubectl get pv -n $NAMESPACE
kubectl get pvc -n $NAMESPACE
You should see that the PVs and PVCs are in the Bound state, indicating that they have been successfully created and are ready to be used by FileNet Content Manager pods.
For more information on the different persistent volume usage modes for GSC Fuse, refer to the official documentation: https://docs.cloud.google.com/kubernetes-engine/docs/how-to/cloud-storage-fuse-csi-driver-pv
Adjusting FileNet Content Manager Operator and Custom Resource for GCS Fuse
There are some additional parameters that need to be added to the FileNet Content Manager deployment to ensure proper mounting and permissions when using GCS Fuse.
-
fsgroup: This should be set to 1000 to match the gid=1000 mount option specified in the PV definition. This ensures that the FileNet Content Manager pods will have the necessary permissions to read and write to the mounted GCS bucket.
-
custom_annotations: The GCS Fuse CSI driver requires a specific annotation to be added to the pods that will be mounting the GCS bucket. This allows for the CSI driver to properly handle the mounting of the bucket and ensure that the correct permissions are applied.
-
Add the following section to the FileNet Content Manager Operator deployment YAML:
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
gke-gcsfuse/volumes: "true"
...
spec:
securityContext:
fsGroup: 1000
-
Add the following section to the FNCM Custom Resource File:
spec:
shared_configuration:
fsgroup: 1000
custom_annotations:
gke-gcsfuse/volumes: "true"
Authentication and Access to GCS Bucket and GCS Fuse CSI Driver
GCS Fuse CSI Driver uses Workload Identity to authenticate and authorize access to GCS buckets. When a pod is created that mounts a GCS bucket using GCS Fuse, the CSI driver will use the Kubernetes service account associated with the pod to impersonate a Google Cloud IAM service account that has the necessary permissions to access the GCS bucket.
There is some matter of timing when it comes when the service account is created. The operator service account is created when the operator is deployed, but the FileNet pods are not created until the custom resource is applied.
To add the necessary IAM roles to the service account, you will need to know the name of the Kubernetes service account that will be used by the FileNet pods. By default, the FileNet Content Manager Service Accounts used are:
The <metaname> is the name specified in the custom resource definition.
Apply the IAM role to the K8s Service accounts:
export METANAME=fncmdeploy
export NAMESPACE=fncm570
export BUCKET_NAME=fncm-gcs-fuse-bucket
export ROLE_NAME=roles/storage.objectUser
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")
gcloud storage buckets add-iam-policy-binding gs://$BUCKET_NAME \
--member "principal://iam.googleapis.com/projects/$PROJECT_NUMBER/locations/global/workloadIdentityPools/$PROJECT_ID.svc.id.goog/subject/ns/$NAMESPACE/sa/ibm-fncm-operator" \
--role "$ROLE_NAME"
gcloud storage buckets add-iam-policy-binding gs://$BUCKET_NAME \
--member "principal://iam.googleapis.com/projects/$PROJECT_NUMBER/locations/global/workloadIdentityPools/$PROJECT_ID.svc.id.goog/subject/ns/$NAMESPACE/sa/$METANAME-fncm-service-account" \
--role "$ROLE_NAME"
We will using the roles/storage.objectUser role, which allows the service accounts to read and write objects in the GCS bucket, but does not allow them to manage the bucket itself.
For more information on GCS Fuse authentication and access, refer to the official documentation: https://docs.cloud.google.com/kubernetes-engine/docs/how-to/cloud-storage-fuse-csi-driver-setup#authentication
Verification and Testing
Once you have completed the above steps, you can verify that the GCS bucket is properly mounted and accessible by the FileNet Content Manager pods. Your pods should be mounting the GCS bucket at the specified mount points, and you should be able to read and write data to the bucket from within the pods. All pods should be running without any errors related to mounting the volumes, and you should see data being stored in the GCS bucket as you interact with FileNet Content Manager.
You can view the data in the GCS bucket using the Google Cloud Console or the gsutil command-line tool:
export BUCKET_NAME=fncm-gcs-fuse-bucket
gsutil ls -d gs://$BUCKET_NAME
Verify that you see the following folders in the bucket, which correspond to the PVs we defined earlier:
gs://fncm-ce-objectstore-testqa/cmis-cfgstore/
gs://fncm-ce-objectstore-testqa/cmis-logstore/
gs://fncm-ce-objectstore-testqa/cpe-cfgstore/
gs://fncm-ce-objectstore-testqa/cpe-filestore/
gs://fncm-ce-objectstore-testqa/cpe-fnlogstore/
gs://fncm-ce-objectstore-testqa/cpe-logstore/
gs://fncm-ce-objectstore-testqa/css-cfgstore/
gs://fncm-ce-objectstore-testqa/css-customstore/
gs://fncm-ce-objectstore-testqa/css-indexstore/
gs://fncm-ce-objectstore-testqa/css-logstore/
gs://fncm-ce-objectstore-testqa/css-tempstore/
gs://fncm-ce-objectstore-testqa/graphql-cfgstore/
gs://fncm-ce-objectstore-testqa/graphql-logstore/
gs://fncm-ce-objectstore-testqa/icn-cfgstore/
gs://fncm-ce-objectstore-testqa/icn-logstore/
gs://fncm-ce-objectstore-testqa/operator-shared/
gs://fncm-ce-objectstore-testqa/tm-cfgstore/
gs://fncm-ce-objectstore-testqa/tm-logstore/
gs://fncm-ce-objectstore-testqa/vw-cachestore/
For more information on tuning your FileNet Content Manager deployment with GCS Fuse, refer to the official documentation: https://docs.cloud.google.com/kubernetes-engine/docs/how-to/cloud-storage-fuse-csi-driver-perf
All PV and PVC Definitions
Below are the full definitions for all the PVs and PVCs needed for a FileNet Content Manager deployment using GCS Fuse on GKE.
FileNet Content Manager Operator:
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: operator-shared-pvc
namespace: fncm570
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
volumeName: fncm570-operator-shared-pvc-pv
storageClassName: gcsfuse
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: fncm570-operator-shared-pvc-pv
spec:
accessModes:
- ReadWriteMany
capacity:
storage: 1Gi
csi:
driver: gcsfuse.csi.storage.gke.io
volumeHandle: fncm-ce-objectstore-testqa:operator-shared
volumeAttributes:
gcsfuseMetadataPrefetchOnMount: "true"
mountOptions:
- implicit-dirs
- gid=1000
- only-dir=operator-shared
storageClassName: gcsfuse
persistentVolumeReclaimPolicy: Retain
Content Platform Engine (CPE):
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: cpe-cfgstore
namespace: fncm570
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
volumeName: fncm570-cpe-cfgstore-pv
storageClassName: gcsfuse
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: fncm570-cpe-cfgstore-pv
spec:
accessModes:
- ReadWriteMany
capacity:
storage: 1Gi
csi:
driver: gcsfuse.csi.storage.gke.io
volumeHandle: fncm-ce-objectstore-testqa:cpe-cfgstore
volumeAttributes:
gcsfuseMetadataPrefetchOnMount: "true"
mountOptions:
- implicit-dirs
- gid=1000
- only-dir=cpe-cfgstore
storageClassName: gcsfuse
persistentVolumeReclaimPolicy: Retain
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: cpe-logstore
namespace: fncm570
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
volumeName: fncm570-cpe-logstore-pv
storageClassName: gcsfuse
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: fncm570-cpe-logstore-pv
spec:
accessModes:
- ReadWriteMany
capacity:
storage: 1Gi
csi:
driver: gcsfuse.csi.storage.gke.io
volumeHandle: fncm-ce-objectstore-testqa:cpe-logstore
volumeAttributes:
gcsfuseMetadataPrefetchOnMount: "true"
mountOptions:
- implicit-dirs
- gid=1000
- only-dir=cpe-logstore
storageClassName: gcsfuse
persistentVolumeReclaimPolicy: Retain
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: cpe-filestore
namespace: fncm570
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 3Gi
volumeName: fncm570-cpe-filestore-pv
storageClassName: gcsfuse
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: fncm570-cpe-filestore-pv
spec:
accessModes:
- ReadWriteMany
capacity:
storage: 3Gi
csi:
driver: gcsfuse.csi.storage.gke.io
volumeHandle: fncm-ce-objectstore-testqa:cpe-filestore
volumeAttributes:
gcsfuseMetadataPrefetchOnMount: "true"
mountOptions:
- implicit-dirs
- gid=1000
- only-dir=cpe-filestore
storageClassName: gcsfuse
persistentVolumeReclaimPolicy: Retain
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: cpe-icmrulesstore
namespace: fncm570
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
volumeName: fncm570-cpe-icmrulesstore-pv
storageClassName: gcsfuse
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: fncm570-cpe-icmrulesstore-pv
spec:
accessModes:
- ReadWriteMany
capacity:
storage: 1Gi
csi:
driver: gcsfuse.csi.storage.gke.io
volumeHandle: fncm-ce-objectstore-testqa:cpe-icmrulesstore
volumeAttributes:
gcsfuseMetadataPrefetchOnMount: "true"
mountOptions:
- implicit-dirs
- gid=1000
- only-dir=cpe-icmrulesstore
storageClassName: gcsfuse
persistentVolumeReclaimPolicy: Retain
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: cpe-textextstore
namespace: fncm570
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
volumeName: fncm570-cpe-textextstore-pv
storageClassName: gcsfuse
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: fncm570-cpe-textextstore-pv
spec:
accessModes:
- ReadWriteMany
capacity:
storage: 1Gi
csi:
driver: gcsfuse.csi.storage.gke.io
volumeHandle: fncm-ce-objectstore-testqa:cpe-textextstore
volumeAttributes:
gcsfuseMetadataPrefetchOnMount: "true"
mountOptions:
- implicit-dirs
- gid=1000
- only-dir=cpe-textextstore
storageClassName: gcsfuse
persistentVolumeReclaimPolicy: Retain
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: cpe-bootstrapstore
namespace: fncm570
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
volumeName: fncm570-cpe-bootstrapstore-pv
storageClassName: gcsfuse
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: fncm570-cpe-bootstrapstore-pv
spec:
accessModes:
- ReadWriteMany
capacity:
storage: 1Gi
csi:
driver: gcsfuse.csi.storage.gke.io
volumeHandle: fncm-ce-objectstore-testqa:cpe-bootstrapstore
volumeAttributes:
gcsfuseMetadataPrefetchOnMount: "true"
mountOptions:
- implicit-dirs
- gid=1000
- only-dir=cpe-bootstrapstore
storageClassName: gcsfuse
persistentVolumeReclaimPolicy: Retain
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: cpe-fnlogstore
namespace: fncm570
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
volumeName: fncm570-cpe-fnlogstore-pv
storageClassName: gcsfuse
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: fncm570-cpe-fnlogstore-pv
spec:
accessModes:
- ReadWriteMany
capacity:
storage: 1Gi
csi:
driver: gcsfuse.csi.storage.gke.io
volumeHandle: fncm-ce-objectstore-testqa:cpe-fnlogstore
volumeAttributes:
gcsfuseMetadataPrefetchOnMount: "true"
mountOptions:
- implicit-dirs
- gid=1000
- only-dir=cpe-fnlogstore
storageClassName: gcsfuse
persistentVolumeReclaimPolicy: Retain
Content Search Services (CSS):
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: css-cfgstore
namespace: fncm570
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
volumeName: fncm570-css-cfgstore-pv
storageClassName: gcsfuse
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: fncm570-css-cfgstore-pv
spec:
accessModes:
- ReadWriteMany
capacity:
storage: 1Gi
csi:
driver: gcsfuse.csi.storage.gke.io
volumeHandle: fncm-ce-objectstore-testqa:css-cfgstore
volumeAttributes:
gcsfuseMetadataPrefetchOnMount: "true"
mountOptions:
- implicit-dirs
- gid=1000
- only-dir=css-cfgstore
storageClassName: gcsfuse
persistentVolumeReclaimPolicy: Retain
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: css-logstore
namespace: fncm570
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
volumeName: fncm570-css-logstore-pv
storageClassName: gcsfuse
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: fncm570-css-logstore-pv
spec:
accessModes:
- ReadWriteMany
capacity:
storage: 1Gi
csi:
driver: gcsfuse.csi.storage.gke.io
volumeHandle: fncm-ce-objectstore-testqa:css-logstore
volumeAttributes:
gcsfuseMetadataPrefetchOnMount: "true"
mountOptions:
- implicit-dirs
- gid=1000
- only-dir=css-logstore
storageClassName: gcsfuse
persistentVolumeReclaimPolicy: Retain
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: css-tempstore
namespace: fncm570
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
volumeName: fncm570-css-tempstore-pv
storageClassName: gcsfuse
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: fncm570-css-tempstore-pv
spec:
accessModes:
- ReadWriteMany
capacity:
storage: 1Gi
csi:
driver: gcsfuse.csi.storage.gke.io
volumeHandle: fncm-ce-objectstore-testqa:css-tempstore
volumeAttributes:
gcsfuseMetadataPrefetchOnMount: "true"
mountOptions:
- implicit-dirs
- gid=1000
- only-dir=css-tempstore
storageClassName: gcsfuse
persistentVolumeReclaimPolicy: Retain
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: css-indexstore
namespace: fncm570
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
volumeName: fncm570-css-indexstore-pv
storageClassName: gcsfuse
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: fncm570-css-indexstore-pv
spec:
accessModes:
- ReadWriteMany
capacity:
storage: 1Gi
csi:
driver: gcsfuse.csi.storage.gke.io
volumeHandle: fncm-ce-objectstore-testqa:css-indexstore
volumeAttributes:
gcsfuseMetadataPrefetchOnMount: "true"
mountOptions:
- implicit-dirs
- gid=1000
- only-dir=css-indexstore
storageClassName: gcsfuse
persistentVolumeReclaimPolicy: Retain
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: css-customstore
namespace: fncm570
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
volumeName: fncm570-css-customstore-pv
storageClassName: gcsfuse
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: fncm570-css-customstore-pv
spec:
accessModes:
- ReadWriteMany
capacity:
storage: 1Gi
csi:
driver: gcsfuse.csi.storage.gke.io
volumeHandle: fncm-ce-objectstore-testqa:css-customstore
volumeAttributes:
gcsfuseMetadataPrefetchOnMount: "true"
mountOptions:
- implicit-dirs
- gid=1000
- only-dir=css-customstore
storageClassName: gcsfuse
persistentVolumeReclaimPolicy: Retain
Content Service GraphQL:
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: graphql-cfgstore
namespace: fncm570
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
volumeName: fncm570-graphql-cfgstore-pv
storageClassName: gcsfuse
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: fncm570-graphql-cfgstore-pv
spec:
accessModes:
- ReadWriteMany
capacity:
storage: 1Gi
csi:
driver: gcsfuse.csi.storage.gke.io
volumeHandle: fncm-ce-objectstore-testqa:graphql-cfgstore
volumeAttributes:
gcsfuseMetadataPrefetchOnMount: "true"
mountOptions:
- implicit-dirs
- gid=1000
- only-dir=graphql-cfgstore
storageClassName: gcsfuse
persistentVolumeReclaimPolicy: Retain
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: graphql-logstore
namespace: fncm570
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
volumeName: fncm570-graphql-logstore-pv
storageClassName: gcsfuse
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: fncm570-graphql-logstore-pv
spec:
accessModes:
- ReadWriteMany
capacity:
storage: 1Gi
csi:
driver: gcsfuse.csi.storage.gke.io
volumeHandle: fncm-ce-objectstore-testqa:graphql-logstore
volumeAttributes:
gcsfuseMetadataPrefetchOnMount: "true"
mountOptions:
- implicit-dirs
- gid=1000
- only-dir=graphql-logstore
storageClassName: gcsfuse
persistentVolumeReclaimPolicy: Retain
IBM Content Navigator (ICN):
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: icn-cfgstore
namespace: fncm570
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
volumeName: fncm570-icn-cfgstore-pv
storageClassName: gcsfuse
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: fncm570-icn-cfgstore-pv
spec:
accessModes:
- ReadWriteMany
capacity:
storage: 1Gi
csi:
driver: gcsfuse.csi.storage.gke.io
volumeHandle: fncm-ce-objectstore-testqa:icn-cfgstore
volumeAttributes:
gcsfuseMetadataPrefetchOnMount: "true"
mountOptions:
- implicit-dirs
- gid=1000
- only-dir=icn-cfgstore
storageClassName: gcsfuse
persistentVolumeReclaimPolicy: Retain
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: icn-logstore
namespace: fncm570
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
volumeName: fncm570-icn-logstore-pv
storageClassName: gcsfuse
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: fncm570-icn-logstore-pv
spec:
accessModes:
- ReadWriteMany
capacity:
storage: 1Gi
csi:
driver: gcsfuse.csi.storage.gke.io
volumeHandle: fncm-ce-objectstore-testqa:icn-logstore
volumeAttributes:
gcsfuseMetadataPrefetchOnMount: "true"
mountOptions:
- implicit-dirs
- gid=1000
- only-dir=icn-logstore
storageClassName: gcsfuse
persistentVolumeReclaimPolicy: Retain
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: icn-pluginstore
namespace: fncm570
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
volumeName: fncm570-icn-pluginstore-pv
storageClassName: gcsfuse
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: fncm570-icn-pluginstore-pv
spec:
accessModes:
- ReadWriteMany
capacity:
storage: 1Gi
csi:
driver: gcsfuse.csi.storage.gke.io
volumeHandle: fncm-ce-objectstore-testqa:icn-pluginstore
volumeAttributes:
gcsfuseMetadataPrefetchOnMount: "true"
mountOptions:
- implicit-dirs
- gid=1000
- only-dir=icn-pluginstore
storageClassName: gcsfuse
persistentVolumeReclaimPolicy: Retain
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: icn-vw-cachestore
namespace: fncm570
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
volumeName: fncm570-icn-vw-cachestore-pv
storageClassName: gcsfuse
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: fncm570-icn-vw-cachestore-pv
spec:
accessModes:
- ReadWriteMany
capacity:
storage: 1Gi
csi:
driver: gcsfuse.csi.storage.gke.io
volumeHandle: fncm-ce-objectstore-testqa:icn-vw-cachestore
volumeAttributes:
gcsfuseMetadataPrefetchOnMount: "true"
mountOptions:
- implicit-dirs
- gid=1000
- only-dir=vw-cachestore
storageClassName: gcsfuse
persistentVolumeReclaimPolicy: Retain
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: icn-vw-logstore
namespace: fncm570
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
volumeName: fncm570-icn-vw-logstore-pv
storageClassName: gcsfuse
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: fncm570-icn-vw-logstore-pv
spec:
accessModes:
- ReadWriteMany
capacity:
storage: 1Gi
csi:
driver: gcsfuse.csi.storage.gke.io
volumeHandle: fncm-ce-objectstore-testqa:icn-vw-logstore
volumeAttributes:
gcsfuseMetadataPrefetchOnMount: "true"
mountOptions:
- implicit-dirs
- gid=1000
- only-dir=vw-logstore
storageClassName: gcsfuse
persistentVolumeReclaimPolicy: Retain
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: icn-asperastore
namespace: fncm570
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
volumeName: fncm570-icn-asperastore-pv
storageClassName: gcsfuse
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: fncm570-icn-asperastore-pv
spec:
accessModes:
- ReadWriteMany
capacity:
storage: 1Gi
csi:
driver: gcsfuse.csi.storage.gke.io
volumeHandle: fncm-ce-objectstore-testqa:icn-asperastore
volumeAttributes:
gcsfuseMetadataPrefetchOnMount: "true"
mountOptions:
- implicit-dirs
- gid=1000
- only-dir=icn-asperastore
storageClassName: gcsfuse
persistentVolumeReclaimPolicy: Retain
Task Manager (TM):
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: tm-cfgstore
namespace: fncm570
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
volumeName: fncm570-tm-cfgstore-pv
storageClassName: gcsfuse
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: fncm570-tm-cfgstore-pv
spec:
accessModes:
- ReadWriteMany
capacity:
storage: 1Gi
csi:
driver: gcsfuse.csi.storage.gke.io
volumeHandle: fncm-ce-objectstore-testqa:tm-cfgstore
volumeAttributes:
gcsfuseMetadataPrefetchOnMount: "true"
mountOptions:
- implicit-dirs
- gid=1000
- only-dir=tm-cfgstore
storageClassName: gcsfuse
persistentVolumeReclaimPolicy: Retain
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: tm-logstore
namespace: fncm570
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
volumeName: fncm570-tm-logstore-pv
storageClassName: gcsfuse
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: fncm570-tm-logstore-pv
spec:
accessModes:
- ReadWriteMany
capacity:
storage: 1Gi
csi:
driver: gcsfuse.csi.storage.gke.io
volumeHandle: fncm-ce-objectstore-testqa:tm-logstore
volumeAttributes:
gcsfuseMetadataPrefetchOnMount: "true"
mountOptions:
- implicit-dirs
- gid=1000
- only-dir=tm-logstore
storageClassName: gcsfuse
persistentVolumeReclaimPolicy: Retain
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: tm-pluginstore
namespace: fncm570
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
volumeName: fncm570-tm-pluginstore-pv
storageClassName: gcsfuse
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: fncm570-tm-pluginstore-pv
spec:
accessModes:
- ReadWriteMany
capacity:
storage: 1Gi
csi:
driver: gcsfuse.csi.storage.gke.io
volumeHandle: fncm-ce-objectstore-testqa:tm-pluginstore
volumeAttributes:
gcsfuseMetadataPrefetchOnMount: "true"
mountOptions:
- implicit-dirs
- gid=1000
- only-dir=tm-pluginstore
storageClassName: gcsfuse
persistentVolumeReclaimPolicy: Retain
Credits:
- Author: Jason Kahn, Haresh Gautham S
- Contributor: Jesus Rodriguez