Skip to main content

Pulumi components for Pinecone BYOC clusters

Project description

Pinecone BYOC

Deploy Pinecone in your own AWS account with full control over your infrastructure.

asciicast

Quick Start

curl -fsSL https://raw.githubusercontent.com/pinecone-io/pulumi-pinecone-byoc/main/bootstrap.sh | bash

This will:

  1. Check that required tools are installed (Python 3.12+, uv, AWS CLI, Pulumi, kubectl)
  2. Verify your AWS credentials
  3. Run an interactive setup wizard
  4. Generate a complete Pulumi project

Then deploy:

cd pinecone-byoc
pulumi up

Provisioning takes approximately 25-30 minutes.

Prerequisites

Tool Purpose Install
Python 3.12+ Runtime python.org
uv Package manager docs.astral.sh/uv
AWS CLI AWS access AWS docs
Pulumi Infrastructure pulumi.com/docs/install
kubectl Cluster access kubernetes.io

Architecture

┌──────────────────────┐                    ┌───────────────────────────────────────────────┐
│                      │    operations      │              Your AWS Account (VPC)           │
│  Pinecone            │───────────────────▶│                                               │
│  Control Plane       │                    │  ┌─────────────┐  ┌─────────────────────────┐ │
│                      │◀───────────────────│  │  Control    │  │                         │ │
│                      │   cluster state    │  │  Plane      │  │    Cluster Manager      │ │
└──────────────────────┘                    │  └─────────────┘  │                         │ │
                                            │  ┌─────────────┐  └─────────────────────────┘ │
                                            │  │  Heartbeat  │                              │
                                            │  └─────────────┘                              │
┌──────────────────────┐                    │  ┌───────────────────────────────────────────┐│
│                      │◀───────────────────│  │                                           ││
│  Pinecone            │   metrics &        │  │              Data Plane                   ││
│  Observability (DD)  │   traces           │  │                                           ││
│                      │                    │  └───────────────────────────────────────────┘│
└──────────────────────┘                    │  ┌──────────┐  ┌──────────┐  ┌─────────────┐  │
                                            │  │    S3    │  │   RDS    │  │   Route53   │  │
        No customer data                    │  │  Buckets │  │ (Aurora) │  │   + ACM     │  │
        leaves the cluster                  │  └──────────┘  └──────────┘  └─────────────┘  │
                                            └───────────────────────────────────────────────┘

How It Works

Pinecone BYOC uses a pull-based model for control plane operations:

  1. Index Operations - When you create, scale, or delete indexes through the Pinecone API, these operations are queued in Pinecone's control plane
  2. Pull & Execute - Components running in your cluster continuously pull pending operations and execute them locally
  3. Heartbeat & State - Your cluster pushes health status and state back to Pinecone for monitoring
  4. Observability - Metrics and traces (not customer data) are sent to Pinecone's observability platform (Datadog) for operational insights

This architecture ensures:

  • Your data never leaves your AWS account - only operational metrics and cluster state are transmitted
  • Network security policies remain under your control
  • All communication is outbound from your cluster - Pinecone never needs inbound access

Cluster Access

After deployment, configure kubectl:

aws eks update-kubeconfig --region <region> --name <cluster-name>

The exact command is output after pulumi up completes.

Upgrades

Pinecone manages upgrades automatically in the background. If you need to trigger an upgrade manually:

kubectl create job upgrade-$(date +%s) --from=cronjob/pinetools -n pc-control-plane \
  --dry-run=client -o yaml | \
  yq '.spec.template.spec.containers[0].env[0].value = "<new-version>"' | \
  kubectl create -f -

Replace <new-version> with the target Pinecone version (e.g., main-abc1234).

To watch the upgrade progress:

kubectl logs -f job/upgrade-<timestamp> -n pc-control-plane

Configuration

The setup wizard creates a Pulumi stack with these configurable options:

Option Description Default
region AWS region us-east-1
availability_zones AZs for high availability 2 zones
vpc_cidr VPC IP range 10.0.0.0/16
deletion_protection Protect RDS/S3 from deletion true

Edit Pulumi.<stack>.yaml to modify these values.

Programmatic Usage

For advanced users who want to integrate into existing infrastructure:

import pulumi
from pulumi_pinecone_byoc import PineconeAWSCluster, PineconeAWSClusterArgs

config = pulumi.Config()

cluster = PineconeAWSCluster(
    name="my-pinecone-cluster",
    args=PineconeAWSClusterArgs(
        pinecone_api_key=config.require_secret("pinecone_api_key"),
        region="us-west-2",
        availability_zones=["us-west-2a", "us-west-2b"],
        vpc_cidr="10.1.0.0/16",
        deletion_protection=True,
    ),
)

pulumi.export("cluster_endpoint", cluster.cluster_endpoint)

Install from PyPI:

uv add pulumi-pinecone-byoc

Or with pip:

pip install pulumi-pinecone-byoc

Troubleshooting

Preflight check failures

The setup wizard runs preflight checks for AWS quotas. If these fail:

  1. VPC Quota - Request a limit increase via AWS Service Quotas
  2. Elastic IPs - Release unused EIPs or request a limit increase
  3. NAT Gateways - Request a limit increase
  4. EKS Clusters - Request a limit increase

Deployment failures

If pulumi up fails partway through:

pulumi refresh  # Sync state with actual resources
pulumi up       # Retry deployment

Cluster access issues

Ensure your AWS credentials match the account where the cluster is deployed:

aws sts get-caller-identity

Cleanup

To destroy all resources:

pulumi destroy

Note: If deletion_protection is enabled (default), you'll need to disable it first or manually delete protected resources.

Support

License

Apache 2.0

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pulumi_pinecone_byoc-0.1.0.tar.gz (37.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pulumi_pinecone_byoc-0.1.0-py3-none-any.whl (47.0 kB view details)

Uploaded Python 3

File details

Details for the file pulumi_pinecone_byoc-0.1.0.tar.gz.

File metadata

  • Download URL: pulumi_pinecone_byoc-0.1.0.tar.gz
  • Upload date:
  • Size: 37.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pulumi_pinecone_byoc-0.1.0.tar.gz
Algorithm Hash digest
SHA256 69ed7249fabbac471f731b582bb34a21e79209684cd14b154ac13ad5018d6016
MD5 22901d89ff504da0b257c96c0d5ec501
BLAKE2b-256 730a999667a6fbf1e737a8503d8cd15c4f92449020a9e96a38999492639707b0

See more details on using hashes here.

Provenance

The following attestation bundles were made for pulumi_pinecone_byoc-0.1.0.tar.gz:

Publisher: release.yaml on pinecone-io/pulumi-pinecone-byoc

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pulumi_pinecone_byoc-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for pulumi_pinecone_byoc-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 05dabc68d744b1bfda6d5fa60b7e1548dedb49ea52ee2d4802e716c24f27ef92
MD5 0cf533bf6d16840915ea2dabeb9f6bcf
BLAKE2b-256 c9f4c1571d808b2bbb57e43ca84b5af42abcc4be8094d52669c54655d1294c17

See more details on using hashes here.

Provenance

The following attestation bundles were made for pulumi_pinecone_byoc-0.1.0-py3-none-any.whl:

Publisher: release.yaml on pinecone-io/pulumi-pinecone-byoc

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page