Skip to content

Custom Resource Reference

Complete reference for the NexusAICapability Custom Resource Definition (CRD).

Overview

The NexusAICapability CRD defines a complete NexusAI capability deployment including AWS infrastructure and Kubernetes workloads.

apiVersion: nexus.ai/v1
kind: NexusAICapability

Short Names

The CRD supports short names for convenience:

  • tc - NexusAICapability
  • tcap - NexusAICapability
kubectl get tc -A       # List all capabilities
kubectl get tcap -A     # Same as above

Spec Reference

Required Fields

Field Type Description
capabilityName string Name of the capability (e.g., nexus-ai)
version string Semantic version (e.g., 1.0.0)
environment string Target environment: dev, staging, prod, test
region string AWS region (e.g., ap-southeast-1)

Frontend Configuration

spec:
  frontend:
    enabled: true              # Enable frontend deployment (default: true)
    replicas: 2                # Number of replicas (1-20, default: 2)
    image: "repo/frontend:v1"  # Container image
    resources:
      requests:
        cpu: "100m"            # CPU request (default: 100m)
        memory: "128Mi"        # Memory request (default: 128Mi)
      limits:
        cpu: "500m"            # CPU limit (default: 500m)
        memory: "512Mi"        # Memory limit (default: 512Mi)

Backend Configuration

spec:
  backend:
    enabled: true              # Enable backend deployment (default: true)
    replicas: 2                # Number of replicas (1-20, default: 2)
    image: "repo/backend:v1"   # Container image
    resources:
      requests:
        cpu: "250m"            # CPU request (default: 250m)
        memory: "512Mi"        # Memory request (default: 512Mi)
      limits:
        cpu: "1000m"           # CPU limit (default: 1000m)
        memory: "1Gi"          # Memory limit (default: 1Gi)

Data Services Configuration

spec:
  dataServices:
    dynamodb: true   # Provision DynamoDB tables (default: true)
    s3: true         # Provision S3 buckets (default: true)
    glue: true       # Provision Glue database (default: true)

Deletion Policy

spec:
  deletionPolicy: Delete  # Options: Delete, Retain
Policy Behavior
Delete Removes all AWS resources when CR is deleted
Retain Keeps AWS resources, only removes K8s resources

Ingress Configuration

spec:
  ingress:
    enabled: true
    className: "alb"           # Ingress class (default: alb)
    annotations:
      kubernetes.io/ingress.class: alb
    tls:
      enabled: false
      secretName: ""
      certificateArn: ""
    customDomain: ""

Horizontal Pod Autoscaler

spec:
  hpa:
    enabled: false
    minReplicas: 2              # Minimum replicas (default: 2)
    maxReplicas: 10             # Maximum replicas (default: 10)
    targetCPUUtilization: 70    # Target CPU % (default: 70)

Pod Disruption Budget

spec:
  pdb:
    enabled: true
    minAvailable: 1        # Minimum available pods
    maxUnavailable: 1      # Maximum unavailable pods

Status Fields

The operator maintains these status fields:

Field Type Description
phase string Current deployment phase
message string Human-readable status message
frontendUrl string Frontend LoadBalancer URL
backendUrl string Backend LoadBalancer URL
resources array List of provisioned resources
lastReconcileTime datetime Last reconciliation timestamp
observedGeneration integer Generation observed by operator

Phase Values

Phase Description
Pending CR created, not yet processed
ProvisioningDataServices Creating DynamoDB, S3, Glue
ProvisioningSSM Creating SSM parameters
ProvisioningSecrets Creating Secrets Manager secrets
ProvisioningIAM Creating IAM roles
DeployingBackend Deploying backend workloads
DeployingFrontend Deploying frontend workloads
CreatingServices Creating LoadBalancer services
Ready Deployment complete
Failed Deployment failed
Deleting CR being deleted

Complete Example

apiVersion: nexus.ai/v1
kind: NexusAICapability
metadata:
  name: nexus-ai-prod
  namespace: nexus-ai-prod
  labels:
    app.kubernetes.io/name: nexus-ai
    app.kubernetes.io/version: "1.0.0"
    nexus.ai/environment: prod
spec:
  # Required fields
  capabilityName: nexus-ai
  version: "1.0.0"
  environment: prod
  region: ap-southeast-1

  # Frontend deployment
  frontend:
    enabled: true
    replicas: 3
    image: "764119721991.dkr.ecr.ap-southeast-1.amazonaws.com/nexus-ai-ui:v1.0.0"
    resources:
      requests:
        cpu: "200m"
        memory: "256Mi"
      limits:
        cpu: "1000m"
        memory: "1Gi"

  # Backend deployment
  backend:
    enabled: true
    replicas: 3
    image: "764119721991.dkr.ecr.ap-southeast-1.amazonaws.com/nexus-ai-api:v1.0.0"
    resources:
      requests:
        cpu: "500m"
        memory: "1Gi"
      limits:
        cpu: "2000m"
        memory: "2Gi"

  # AWS data services
  dataServices:
    dynamodb: true
    s3: true
    glue: true

  # Ingress configuration
  ingress:
    enabled: true
    className: "alb"
    annotations:
      alb.ingress.kubernetes.io/scheme: internet-facing
      alb.ingress.kubernetes.io/target-type: ip
    tls:
      enabled: true
      certificateArn: "arn:aws:acm:ap-southeast-1:764119721991:certificate/xxx"
    customDomain: "nexus-ai.example.com"

  # Auto-scaling
  hpa:
    enabled: true
    minReplicas: 3
    maxReplicas: 10
    targetCPUUtilization: 70

  # Pod disruption budget
  pdb:
    enabled: true
    minAvailable: 2

  # Deletion policy
  deletionPolicy: Retain

Minimal Example

apiVersion: nexus.ai/v1
kind: NexusAICapability
metadata:
  name: nexus-ai-dev
  namespace: nexus-ai-dev
spec:
  capabilityName: nexus-ai
  version: "1.0.0"
  environment: dev
  region: ap-southeast-1

  frontend:
    image: "nginx:latest"

  backend:
    image: "nginx:latest"

  dataServices:
    dynamodb: true
    s3: true
    glue: true

  deletionPolicy: Delete

Validation Rules

capabilityName

  • Pattern: ^[a-z0-9-]+$
  • Min length: 1
  • Max length: 63

version

  • Pattern: ^[0-9]+\.[0-9]+\.[0-9]+.*$
  • Example: 1.0.0, 2.1.0-beta

environment

  • Allowed values: dev, staging, prod, test

region

  • Pattern: ^[a-z]{2}-[a-z]+-[0-9]+$
  • Example: ap-southeast-1, us-east-1

replicas

  • Min: 1
  • Max: 20
  • Default: 2

Printer Columns

When listing capabilities, these columns are displayed:

$ kubectl get nexuscapabilities -A
NAMESPACE              NAME                   CAPABILITY        VERSION   ENVIRONMENT   PHASE   AGE
nexus-ai-dev    nexus-ai-dev    nexus-ai   1.0.0     dev           Ready   5m
nexus-ai-prod   nexus-ai-prod   nexus-ai   1.0.0     prod          Ready   1h

← Back to Kubernetes Operator | Next: Deployment Guide →