NooBaa
What is NooBaa
A NooBaa resource in NooBaa is the main custom resource that represents the deployment and management of the NooBaa system within a Kubernetes cluster. It acts as the central controller, orchestrating all NooBaa components, including object buckets, backing stores, namespace stores, and bucket classes. The NooBaa resource is responsible for the lifecycle, configuration, and overall health of the NooBaa deployment.
By managing the NooBaa resource, administrators can deploy, upgrade, and monitor the entire NooBaa data management platform in Kubernetes.
NooBaa CRD Concept
The NooBaa Custom Resource Definition (CRD) in NooBaa is used to manage the deployment, configuration, and status of the NooBaa system. It includes settings for storage, networking, resource allocation, and integration with other NooBaa CRDs.
Key Features
- Central management of NooBaa components and resources
- Handles deployment, upgrades, and scaling
- Integrates with BackingStore, NamespaceStore, BucketClass, and ObjectBucket resources
- Provides health and status monitoring for the NooBaa system
- Supports multi-cloud and hybrid deployments
NooBaa Spec
A NooBaa CRD has the following spec:
The .spec field of a NooBaa resource defines the desired state of the NooBaa system. It includes configuration options for various components and behaviors. Below are some of the key fields within the spec:
- affinity: Affinity (optional) passed through to noobaa’s pods
- annotations: The annotations-related configuration to add/set on each Pod related object.
- bucketNotifications: BucketNotifications (optional) controls bucket notification options
- cleanupPolicy: CleanupPolicy (optional) Indicates user’s policy for deletion
- coreResources: CoreResources (optional) overrides the default resource requirements for the server container
- dbConf: DBConf (optional) overrides the default postgresql db config
- dbImage: DBImage (optional) overrides the default image for the db container
- dbResources: DBResources (optional) overrides the default resource requirements for the db container
- dbSpec: DBSpec (optional) DB spec for a managed postgres cluster
- dbStorageClass: DBStorageClass (optional) overrides the default cluster StorageClass for the database volume.
- dbType: DBType (optional) overrides the default type image for the db container. The only possible value is postgres
- dbVolumeResources: DBVolumeResources (optional) overrides the default PVC resource requirements
for the database volume. For the time being this field is immutable and can only be set on system
creation. This is because volume size updates are only supported for increasing the
size, and only if the storage class specifies
allowVolumeExpansion: true, - debugLevel:
enum: all, nsfs, warn, default_level. DebugLevel (optional) sets the debug level. - disableLoadBalancerService:DisableLoadBalancerService (optional) sets the service type to ClusterIP instead of LoadBalancer.
- disableRoutes: DisableRoutes (optional) disables the reconciliation of openshift route resources in the cluster.
- endpoints: Endpoints (optional) sets configuration info for the noobaa endpoint deployment.
- externalPgSSLRequired: ExternalPgSSLRequired (optional) holds an optional boolean to force ssl connections to the external Postgres DB
- externalPgSSLSecret: ExternalPgSSLSecret (optional) holds an optional secret with client key and cert used for connecting to external Postgres DB
- externalPgSSLUnauthorized: ExternalPgSSLUnauthorized (optional) holds an optional boolean to allow unauthorized connections to external Postgres DB
- externalPgSecret: ExternalPgSecret (optional) holds an optional secret with a url to an extrenal Postgres DB to be used
- image: Image (optional) overrides the default image for the server container
- imagePullSecret: ImagePullSecret (optional) sets a pull secret for the system image
- joinSecret: JoinSecret (optional) instructs the operator to join another cluster and point to a secret that holds the join information
- labels: <map[string]map[string]string> The labels-related configuration to add/set on each Pod related object.
- loadBalancerSourceSubnets:LoadBalancerSourceSubnets (optional) if given will allow access to the
NooBaa services only from the listed subnets. This field will have no effect if
DisableLoadBalancerServiceis set to true - logResources: LogResources (optional) overrides the default resource requirements for the noobaa-log-processor container
- manualDefaultBackingStore: ManualDefaultBackingStore (optional - default value is false) if true the default backingstore/namespacestore will not be reconciled by the operator and it should be manually handled by the user. It will allow the user to delete DefaultBackingStore/DefaultNamespaceStore, user needs to delete associated buckets and update the admin account with new BackingStore/NamespaceStore in order to delete the DefaultBackingStore/DefaultNamespaceStore.
- pvPoolDefaultStorageClass: PVPoolDefaultStorageClass (optional) overrides the default cluster StorageClass for the pv-pool volumes. This affects where the system stores data chunks (encrypted). Updates to this field will only affect new pv-pools, but updates to existing pools are not supported by the operator.
- region: Region (optional) provide a region for the location info of the endpoints in the endpoint deployment
- tolerations <[]Object> Tolerations (optional) passed through to noobaa’s pods
NooBaa Status
The status section provides information about the health, phase, and readiness of the NooBaa system, including:
- phase: Current phase of the NooBaa system (e.g.,
Ready,Failed). When the system is fully operational, the phase will beReady. - conditions: A list of status conditions that provide more detailed information about the state of the system. Each condition includes:
type: The type of condition (e.g.,Available,Progressing,Degraded).status: The status of the condition (True,False, orUnknown).message: A human-readable message describing the condition.reason: A brief reason for the condition’s last transition.
- readme: A welcome message and initial instructions for interacting with the NooBaa S3 service.
- services: Information about the services created by NooBaa, including their internal and external endpoints. This includes services for S3, management, and STS.
- accounts: Information about the created accounts, including the admin account and its corresponding secret.
- endpoints: Details about the S3 endpoint, including the number of ready endpoints and the virtual hosts.
NooBaa CRD Specifications
Here is an example of a NooBaa custom resource:
apiVersion: noobaa.io/v1alpha1
kind: NooBaa
metadata:
name: noobaa
namespace: noobaa
spec:
dbType: postgres
externalPgSSLUnauthorized: true
externalPgSecret:
name: noobaa-external-pg-db
namespace: noobaa
image: ghcr.io/kubeobj/noobaa-core:5.20-ac
manualDefaultBackingStore: true
status:
accounts:
admin:
secretRef:
name: noobaa-admin
namespace: noobaa
actualImage: ghcr.io/kubeobj/noobaa-core:5.20-ac
conditions:
- lastHeartbeatTime: "2025-09-24T11:42:27Z"
lastTransitionTime: "2025-09-24T11:42:27Z"
message: noobaa operator completed reconcile - system is ready
reason: SystemPhaseReady
status: "True"
type: Available
- lastHeartbeatTime: "2025-09-24T11:42:27Z"
lastTransitionTime: "2025-09-24T11:42:27Z"
message: noobaa operator completed reconcile - system is ready
reason: SystemPhaseReady
status: "False"
type: Progressing
- lastHeartbeatTime: "2025-09-24T11:42:27Z"
lastTransitionTime: "2025-09-19T06:10:09Z"
message: noobaa operator completed reconcile - system is ready
reason: SystemPhaseReady
status: "False"
type: Degraded
- lastHeartbeatTime: "2025-09-24T11:42:27Z"
lastTransitionTime: "2025-09-24T11:42:27Z"
message: noobaa operator completed reconcile - system is ready
reason: SystemPhaseReady
status: "True"
type: Upgradeable
- lastHeartbeatTime: "2025-09-24T11:42:26Z"
lastTransitionTime: "2025-09-19T06:10:09Z"
status: k8s
type: KMS-Type
- lastHeartbeatTime: "2025-09-24T11:42:26Z"
lastTransitionTime: "2025-09-19T06:10:09Z"
status: Sync
type: KMS-Status
endpoints:
readyCount: 1
virtualHosts:
- s3.noobaa.svc
observedGeneration: 2
phase: Ready
readme: |
Welcome to NooBaa!
-----------------
NooBaa Core Version: 5.20.0-11e425a
NooBaa Operator Version: 5.20.0
Lets get started:
Test S3 client:
kubectl port-forward -n noobaa service/s3 10443:443 &
NOOBAA_ACCESS_KEY=$(kubectl get secret noobaa-admin -n noobaa -o json | jq -r '.data.AWS_ACCESS_KEY_ID|@base64d')
NOOBAA_SECRET_KEY=$(kubectl get secret noobaa-admin -n noobaa -o json | jq -r '.data.AWS_SECRET_ACCESS_KEY|@base64d')
alias s3='AWS_ACCESS_KEY_ID=$NOOBAA_ACCESS_KEY AWS_SECRET_ACCESS_KEY=$NOOBAA_SECRET_KEY aws --endpoint https://localhost:10443 --no-verify-ssl s3'
s3 ls
services:
serviceMgmt:
internalDNS:
- https://noobaa-mgmt.noobaa.svc:443
internalIP:
- https://10.43.246.52:443
nodePorts:
- https://10.2.0.162:0
podPorts:
- https://10.42.0.106:8443
serviceS3:
externalIP:
- https://10.2.0.162:443
internalDNS:
- https://s3.noobaa.svc:443
internalIP:
- https://10.43.125.228:443
nodePorts:
- https://10.2.0.162:32250
podPorts:
- https://10.42.0.107:6443
serviceSts:
internalDNS:
- https://sts.noobaa.svc:443
internalIP:
- https://10.43.235.107:443
nodePorts:
- https://10.2.0.162:31884
podPorts:
- https://10.42.0.107:7443
serviceSyslog: {}







