DiscordLogin
Planton Documentation

Deployment Components

Swarup Donepudi
CatalogComponentsInfraHub

Deployment Components

Your Infrastructure Building Blocks

Think of Deployment Components as your infrastructure LEGO set—pre-built, tested, and production-ready pieces that snap together to create your cloud architecture. No more starting from scratch or copy-pasting Terraform modules. Just pick, configure, and deploy.

The Deployment Component catalog is Planton Cloud's answer to the question: "Why do we keep building the same infrastructure over and over?" We've captured the patterns, encoded the best practices, and made them one-click deployable.

Component Philosophy: Every piece of infrastructure you commonly need, available as a declarative resource, with batteries included.

The Component Catalog

Our catalog offers 50+ components across major cloud providers. Each component is:

  • Production-ready: Built with security and scalability best practices
  • Highly configurable: Sensible defaults with extensive customization options
  • Multi-tool: Available for both Terraform and Pulumi
  • Continuously updated: Regular updates for new features and security patches

Browse by Provider

AWS Components

Transform your AWS infrastructure with enterprise-grade components:

Networking & Security

  • VPC - Complete network with subnets, routing, and NAT
  • Security Group - Firewall rules with smart defaults
  • Route53 Zone - DNS management with health checks

Compute & Containers

  • EKS Cluster - Managed Kubernetes with addons
  • ECS Service - Container orchestration simplified
  • Lambda Function - Serverless compute with deployment

Storage & Databases

  • RDS Instance - PostgreSQL/MySQL with backups
  • DynamoDB Table - NoSQL with auto-scaling
  • S3 Bucket - Object storage with lifecycle policies

Load Balancing & CDN

  • ALB - Application Load Balancer with SSL
  • CloudFront - CDN with custom origins
  • API Gateway - REST/WebSocket APIs

GCP Components

Google Cloud infrastructure made simple:

Core Infrastructure

  • GKE Cluster - Google Kubernetes Engine
  • Cloud SQL - Managed PostgreSQL/MySQL
  • GCS Bucket - Cloud Storage with versioning

Serverless & Compute

  • Cloud Run Service - Serverless containers
  • Cloud Functions - Event-driven compute
  • Compute Instance - VMs with custom images

Networking

  • VPC Network - Virtual network with peering
  • Cloud Load Balancer - Global load balancing
  • Cloud CDN - Content delivery network

Azure Components

Microsoft Azure resources simplified:

Container & Compute

  • AKS Cluster - Azure Kubernetes Service
  • Container Instance - Serverless containers
  • VM Scale Set - Auto-scaling VMs

Data & Storage

  • Cosmos DB - Globally distributed database
  • Blob Storage - Object storage with tiers
  • SQL Database - Managed SQL Server

Kubernetes Components

Platform-agnostic components for any Kubernetes cluster:

Databases

  • PostgreSQL - HA database with backups
  • MySQL - Replicated MySQL setup
  • MongoDB - Document database cluster

Messaging & Streaming

  • Kafka - Event streaming platform
  • RabbitMQ - Message broker with management
  • NATS - High-performance messaging

Storage & Cache

  • Redis - In-memory cache/database
  • MinIO - S3-compatible object storage
  • Elasticsearch - Search and analytics

Development Tools

  • GitLab - Complete DevOps platform
  • SonarQube - Code quality analysis
  • Nexus - Artifact repository

Component Deep Dive

Let's explore what makes these components special by looking at a popular one—AWS EKS Cluster:

Example: AWS EKS Cluster

apiVersion: infra-hub.planton.cloud/v1
kind: AwsEksCluster
metadata:
  name: prod-api-cluster
  org: acmecorp
  env: production
spec:
  # Kubernetes Configuration
  kubernetesVersion: "1.28"
  
  # Networking
  vpc:
    id: vpc-0123456789abcdef
    subnetIds:
      - subnet-private-1a
      - subnet-private-1b
      - subnet-private-1c
  
  # Node Groups
  nodeGroups:
    - name: general
      instanceTypes: ["t3.large", "t3a.large"]  # Spot-friendly
      minSize: 3
      maxSize: 10
      desiredSize: 5
      labels:
        workload: general
      taints: []
      
    - name: gpu
      instanceTypes: ["g4dn.xlarge"]
      minSize: 0
      maxSize: 5
      desiredSize: 0
      labels:
        workload: gpu
      taints:
        - key: nvidia.com/gpu
          value: "true"
          effect: NoSchedule
  
  # Addons (batteries included!)
  addons:
    - name: vpc-cni
      version: latest
    - name: coredns
      version: latest
    - name: kube-proxy
      version: latest
    - name: aws-ebs-csi-driver
      version: latest
      
  # Security
  encryption:
    enabled: true
    kmsKeyId: alias/eks-cluster
    
  logging:
    enabledTypes:
      - api
      - audit
      - authenticator
      
  # Access
  authentication:
    mapRoles:
      - rolearn: arn:aws:iam::123456789:role/developers
        username: developers
        groups: ["system:masters"]

What you get automatically:

  • ✅ Control plane with high availability
  • ✅ Managed node groups with auto-scaling
  • ✅ IRSA (IAM Roles for Service Accounts) configured
  • ✅ Security groups with least privilege
  • ✅ CloudWatch logging enabled
  • ✅ Cluster autoscaler ready
  • ✅ AWS Load Balancer controller installed
  • ✅ EBS CSI driver for persistent volumes

Example: PostgreSQL on Kubernetes

apiVersion: infra-hub.planton.cloud/v1
kind: PostgresKubernetes
metadata:
  name: orders-db
  org: acmecorp
  env: production
spec:
  # Version and Resources
  version: "15.3"
  replicas: 3  # HA configuration
  
  resources:
    requests:
      cpu: 1000m
      memory: 4Gi
    limits:
      cpu: 4000m
      memory: 16Gi
      
  # Storage
  storage:
    size: 100Gi
    class: fast-ssd
    
  # Configuration
  postgresql:
    parameters:
      max_connections: 200
      shared_buffers: 1GB
      effective_cache_size: 12GB
      
  # Backup
  backup:
    enabled: true
    schedule: "0 2 * * *"
    retention: 30  # days
    destination: s3://backups/postgres
    
  # Monitoring
  monitoring:
    enabled: true
    namespace: monitoring
    
  # Users and Databases
  users:
    - name: app_user
      databases: [orders]
      privileges: ["CREATE", "CONNECT"]

What you get automatically:

  • ✅ Primary + read replicas with streaming replication
  • ✅ Automatic failover with leader election
  • ✅ Connection pooling with PgBouncer
  • ✅ Automated backups to S3/GCS
  • ✅ Prometheus metrics + Grafana dashboards
  • ✅ SSL/TLS encryption enforced
  • ✅ WAL archiving configured
  • ✅ Point-in-time recovery capability

How Components Work

1. Component Definition

Each component is defined as a Protocol Buffer (protobuf) API:

// Located in: project-planton/apis/project/planton/provider/aws/awseks/v1/spec.proto
message AwsEksClusterSpec {
  // Kubernetes version for the EKS cluster
  string kubernetes_version = 1;
  
  // VPC configuration for the cluster
  VpcConfig vpc = 2;
  
  // Node groups configuration
  repeated NodeGroup node_groups = 3;
  
  // Add-ons to install
  repeated Addon addons = 4;
  
  // ... more fields
}

2. IaC Modules

Each component has Terraform AND Pulumi modules:

project-planton/
└── apis/project/planton/provider/aws/awseks/v1/
    ├── spec.proto           # API definition
    ├── iac/
    │   ├── tf/             # Terraform module
    │   │   ├── main.tf
    │   │   ├── variables.tf
    │   │   └── outputs.tf
    │   └── pulumi/         # Pulumi module (Go)
    │       ├── main.go
    │       └── resources.go
    └── examples.md         # Usage examples

3. Module Features

Platform modules include standard features:

Resource Naming

# Consistent naming across all resources
locals {
  name_prefix = "${var.metadata.org}-${var.metadata.env}-${var.metadata.name}"
}

resource "aws_eks_cluster" "main" {
  name = local.name_prefix
  # ...
}

Tagging

# Standard tags plus custom ones
locals {
  common_tags = {
    Organization = var.metadata.org
    Environment  = var.metadata.env
    ManagedBy    = "planton-cloud"
    Component    = "aws-eks-cluster"
    StackJob     = var.stack_job_id
  }
  
  all_tags = merge(local.common_tags, var.spec.tags)
}

Outputs

# Standardized outputs for service discovery
output "cluster_endpoint" {
  value = aws_eks_cluster.main.endpoint
}

output "cluster_certificate_authority_data" {
  value = aws_eks_cluster.main.certificate_authority[0].data
}

output "kubeconfig" {
  value = local.kubeconfig
  sensitive = true
}

Using Deployment Components

Step 1: Browse the Catalog

Explore available components:

# List all components
planton component list

# Filter by provider
planton component list --provider aws

# Search by keyword
planton component search database

# Get component details
planton component describe aws-rds

Step 2: Generate Configuration

Get started with example configs:

# Generate example YAML
planton component example aws-eks-cluster > eks.yaml

# With custom values
planton component example aws-eks-cluster \
  --set name=my-cluster \
  --set nodeGroups[0].instanceTypes=t3.medium

Step 3: Customize and Deploy

Edit the generated YAML and deploy:

# eks.yaml (customized)
apiVersion: infra-hub.planton.cloud/v1
kind: AwsEksCluster
metadata:
  name: my-api-cluster
  org: mycompany
  env: staging
spec:
  kubernetesVersion: "1.28"
  nodeGroups:
    - name: general
      instanceTypes: ["t3.medium"]
      minSize: 2
      maxSize: 6
# Deploy
planton apply -f eks.yaml

# Watch deployment
planton stack-job logs --follow

Component Composition

Components are designed to work together:

Example: Complete Web Application Stack

# 1. Network Foundation
apiVersion: infra-hub.planton.cloud/v1
kind: AwsVpc
metadata:
  name: app-network
spec:
  cidrBlock: "10.0.0.0/16"
  enableNatGateway: true
---
# 2. Kubernetes Cluster  
apiVersion: infra-hub.planton.cloud/v1
kind: AwsEksCluster
metadata:
  name: app-cluster
spec:
  vpc:
    id: ${outputs.app-network.vpc_id}
  kubernetesVersion: "1.28"
---
# 3. Database
apiVersion: infra-hub.planton.cloud/v1
kind: AwsRds
metadata:
  name: app-database
spec:
  engine: postgres
  engineVersion: "15"
  vpcId: ${outputs.app-network.vpc_id}
---
# 4. Cache Layer
apiVersion: infra-hub.planton.cloud/v1
kind: RedisKubernetes
metadata:
  name: app-cache
spec:
  cluster:
    provider: aws
    name: app-cluster
---
# 5. Object Storage
apiVersion: infra-hub.planton.cloud/v1
kind: AwsS3Bucket
metadata:
  name: app-assets
spec:
  versioning: true
  lifecycle:
    - id: archive-old
      status: Enabled
      transitions:
        - days: 90
          storageClass: GLACIER

Custom Components

Bring Your Own Modules

Not finding exactly what you need? Create custom components:

apiVersion: infra-hub.planton.cloud/v1
kind: IacModule
metadata:
  name: custom-redis-cluster
  org: mycompany
spec:
  provisioner: terraform
  cloudResourceKind: redis_kubernetes
  description: "Redis with Sentinel for HA"
  gitRepo:
    cloneUrl: https://github.com/mycompany/redis-module
    branch: main
    projectDir: terraform

Extend Platform Components

Wrap platform components with your customizations:

# your-module/main.tf
module "base_eks" {
  source = "github.com/project-planton/aws-eks//terraform"
  
  # Pass through standard inputs
  metadata = var.metadata
  spec     = var.spec
  
  # Your customizations
  providers = {
    aws = aws.assume_role
  }
}

# Add your custom resources
resource "aws_iam_policy" "custom_policy" {
  name = "${module.base_eks.cluster_name}-custom"
  # ...
}

Component Best Practices

1. Start Simple

Begin with minimal configuration:

# Minimal viable PostgreSQL
apiVersion: infra-hub.planton.cloud/v1
kind: PostgresKubernetes
metadata:
  name: dev-db
spec:
  version: "15"
  storage:
    size: 10Gi

Then add features as needed:

  • Replication
  • Backups
  • Monitoring
  • Custom parameters

2. Use Component Outputs

Reference outputs from other components:

spec:
  # Reference VPC from another component
  vpcId: ${outputs.my-vpc.vpc_id}
  
  # Reference secret created by database
  databaseUrl: ${secrets.my-db.connection_url}

3. Environment-Specific Configs

Use overlays for different environments:

# base/postgres.yaml
apiVersion: infra-hub.planton.cloud/v1
kind: PostgresKubernetes
metadata:
  name: app-db
spec:
  version: "15"
---
# overlays/prod/postgres.yaml
spec:
  replicas: 3
  resources:
    requests:
      memory: 16Gi
  backup:
    enabled: true

4. Component Versioning

Pin component versions for stability:

apiVersion: infra-hub.planton.cloud/v1
kind: AwsEksCluster
metadata:
  annotations:
    module-version: "v2.3.0"  # Pin module version
spec:
  kubernetesVersion: "1.28"  # Pin Kubernetes version

Component Lifecycle

Updates

Components can be updated safely:

# Before
spec:
  kubernetesVersion: "1.27"
  
# After  
spec:
  kubernetesVersion: "1.28"

Stack Job shows the changes:

Plan: 0 to add, 1 to change, 0 to destroy

~ aws_eks_cluster.main
  ~ version: "1.27" -> "1.28"

Deletion Protection

Critical components have deletion protection:

metadata:
  annotations:
    prevent-destroy: "true"
spec:
  deletionProtection: true  # Provider-specific protection

Migration

Migrate between components:

# From EC2 to containers
planton migrate compute \
  --from aws-ec2-fleet \
  --to aws-ecs-service \
  --strategy blue-green

What's Next?

Now that you understand Deployment Components:

Remember: Components are just the beginning. The real power comes from composing them into complete architectures that evolve with your needs.

Next article

Flow Control

Flow Control Your Infrastructure Deployment Governance Remember the anxiety of running terraform apply in production? The careful dance of plan, review, approve, apply? Flow Control takes that manual process and makes it policy—automatic, consistent, and auditable. It's governance without the bottleneck. Flow Control in Planton Cloud lets you define exactly how infrastructure changes should flow through your organization. Want manual approvals for production? Automatic deployments for dev? Skip...
Read next article

©2025 Planton Cloud Inc. All Rights Reserved.