A Python DSL for generating Kubernetes manifests with minimal complexity
Project description
Celestra ๐
Transform your application deployments with a simple Python DSL
Celestra is a powerful Domain-Specific Language (DSL) that lets you define cloud-native applications using simple Python code and automatically generates production-ready Kubernetes manifests, Docker Compose files, Helm charts, and more.
โจ Why Celestra?
Before (Traditional YAML):
# 100+ lines of complex YAML for a simple web app
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-app
spec:
replicas: 3
selector:
matchLabels:
app: web-app
template:
metadata:
labels:
app: web-app
spec:
containers:
- name: web-app
image: web-server:latest
ports:
- containerPort: 8080
resources:
requests:
cpu: 500m
memory: 512Mi
limits:
cpu: 1000m
memory: 1Gi
# ... and much more YAML
After (Celestra):
from celestra import App
web_app = (App("web-app")
.image("web-server:latest")
.port(8080)
.resources(cpu="500m", memory="512Mi", cpu_limit="1000m", memory_limit="1Gi")
.replicas(3)
.expose())
# Generate everything
web_app.generate().to_yaml("./k8s/") # Kubernetes manifests
web_app.generate().to_docker_compose("./docker-compose.yml") # Local development
web_app.generate().to_helm_chart("./charts/") # Helm packaging
๐ฏ Key Features
- ๐ Python-First: Write infrastructure as code using familiar Python syntax
- ๐ญ Multi-Format Output: Generate Kubernetes, Docker Compose, Helm, Kustomize from the same code
- ๐ Production-Ready: Built-in security, monitoring, secrets management, and RBAC
- ๐ Zero-Downtime Deployments: Blue-green, canary, and rolling update strategies
- ๐ง Extensible: Plugin system for custom requirements and integrations
- ๐ก Developer Friendly: Start with Docker Compose, deploy to Kubernetes seamlessly
๐ Quick Start
๐ ๐ Full Documentation - Complete guides, tutorials, and API reference
Installation
# install from PyPI
pip install celestra
# Or from source (recommended for development)
git clone https://github.com/sps014/celestra.git
cd celestra
pip install -e src/
Create Your First App
# app.py
from celestra import App, StatefulApp, Secret
# Database with automatic backups
db = (StatefulApp("database")
.image("postgres:15")
.port(5432)
.storage("20Gi"))
# Database credentials
db_secret = (Secret("db-creds")
.add("username", "admin")
.add("password", "secure-password"))
# Web application
app = (App("blog")
.image("webapp:latest")
.port(8080)
.replicas(3)
.expose())
# Generate and deploy
app.generate().to_yaml("./k8s/")
db.generate().to_yaml("./k8s/")
db_secret.generate().to_yaml("./k8s/")
Deploy Locally
# Generate Kubernetes manifests
python app.py
# Deploy to Kubernetes
kubectl apply -f ./k8s/
๐๏ธ Architecture
Celestra abstracts Kubernetes complexity while maintaining full power:
โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ
โ Python DSL โโโโโถโ Celestra Core โโโโโถโ Output Files โ
โ โ โ โ โ โ
โ โข Apps โ โ โข Validation โ โ โข Kubernetes โ
โ โข StatefulApps โ โ โข Templates โ โ โข Docker Composeโ
โ โข Secrets โ โ โข Plugins โ โ โข Helm Charts โ
โ โข Jobs โ โ โข Optimization โ โ โข Kustomize โ
โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ
๐จ Real-World Examples
Microservices Platform
from celestra import AppGroup, App, StatefulApp
platform = AppGroup("ecommerce")
# Shared infrastructure
database = StatefulApp("database").image("postgres:15").port(5432).storage("100Gi")
cache = StatefulApp("cache").image("redis:7").port(6379).storage("10Gi")
# Microservices
user_service = App("users").image("myorg/users:v1.0").port(8080)
product_service = App("products").image("myorg/products:v1.0").port(8081)
order_service = App("orders").image("myorg/orders:v1.0").port(8082)
platform.add([database, cache, user_service, product_service, order_service])
platform.generate().to_yaml("./k8s/")
ML Training Pipeline
from celestra import Job, CronJob
# One-time training job
training = (Job("model-training")
.image("ml-framework:latest")
.resources(cpu="4000m", memory="16Gi")
.timeout("6h"))
# Scheduled retraining
retrain = (CronJob("model-retrain")
.image("ml-framework:latest")
.schedule("0 2 * * 0") # Weekly
.resources(cpu="8000m", memory="32Gi"))
training.generate().to_yaml("./jobs/")
retrain.generate().to_yaml("./jobs/")
Complete Web Application
from celestra import App, StatefulApp, Secret, Service, Ingress
# Database
db_secret = Secret("db-secret").add("password", "secure-password")
database = (StatefulApp("database")
.image("postgres:15")
.port(5432)
.storage("50Gi")
.add_secrets([db_secret]))
# Backend API
api = (App("api")
.image("myapp/api:latest")
.port(8080)
.replicas(3)
.add_secrets([db_secret]))
# Frontend
frontend = (App("frontend")
.image("myapp/frontend:latest")
.port(80)
.replicas(2))
# Services
api_service = Service("api-service").add_app(api)
frontend_service = Service("frontend-service").add_app(frontend)
# Ingress
ingress = (Ingress("app-ingress")
.domain("myapp.com")
.route("/api", api_service)
.route("/", frontend_service))
# Generate all components
for component in [db_secret, database, api, frontend, api_service, frontend_service, ingress]:
component.generate().to_yaml("./k8s/")
๐ Documentation
- ๐ Complete Documentation - Full documentation site
- ๐ Getting Started - Installation and first steps
- ๐ API Reference - Complete API documentation
- ๐ฏ Examples - Real-world examples and tutorials
- ๐ง Components - All available components
- โ๏ธ Configuration - Configuration options
๐ฆ Available Components
Core Components
App- Stateless applications (Deployments)StatefulApp- Stateful applications (StatefulSets)AppGroup- Group multiple applications together
Workloads
Job- One-time tasksCronJob- Scheduled tasksLifecycle- Lifecycle hooks
Networking
Service- Service definitionsIngress- Ingress controllersNetworkPolicy- Network policies
Security
Secret- Secret managementServiceAccount- Service accountsRole/ClusterRole- RBAC rolesRoleBinding/ClusterRoleBinding- RBAC bindingsSecurityPolicy- Security policies
Storage
ConfigMap- Configuration management
Advanced Features
Observability- Monitoring and loggingDeploymentStrategy- Deployment strategiesCostOptimization- Resource optimizationCustomResource- Custom resource definitions
๐ Why Choose Celestra?
For Developers
- No YAML Hell - Write infrastructure in Python
- Fast Iteration - Start local, deploy anywhere
- Type Safety - Catch errors before deployment
- **Familiar Syntax - If you know Python, you know Celestra
For DevOps Teams
- Standardization - Consistent deployments across teams
- Security Built-in - RBAC, secrets, policies by default
- Multi-Environment - Dev, staging, prod from same code
- Observability Ready - Monitoring and logging included
For Organizations
- Reduced Complexity - Abstract Kubernetes details
- Faster Onboarding - Developers focus on business logic
- Cost Optimization - Built-in resource management
- Compliance Ready - Security and governance features
๐งช Running Examples
# Run comprehensive examples
cd src/examples
# Multiple ports showcase
python multiple_ports_showcase.py
# Enterprise validation demo
python enterprise_validation_demo.py
# Complete platform demo
python complete_platform_demo.py
# RBAC security demo
python rbac_security_demo.py
# Kubernetes YAML generation example
python kubernetes_yaml_generation_example.py
โ ๏ธ Format-Specific Methods & Output Awareness
Celestra supports multiple output formats (Kubernetes, Docker Compose, Helm, etc.). Some methods are only meaningful for certain formats. Celestra will automatically warn you if you use a method that is not supported in your chosen output format!
๐ณ Docker Compose-Only Methods
.port_mapping(host_port, container_port, ...)โ Only for Docker Compose (host:container mapping).expose_port(port, ..., external_port=...)โ Only for Docker Compose
โธ๏ธ Kubernetes-Only Methods
.node_selector({...})โ Only for Kubernetes (pod scheduling).tolerations([...])โ Only for Kubernetes (taints/tolerations)
๐ Universal Methods
.port(port)โ Works everywhere (container port).image(image)โ Works everywhere.replicas(n)โ Works everywhere.env(key, value)โ Works everywhere
๐ฆ How It Works
- If you use
.port_mapping()and generate Kubernetes YAML, you will see:โ ๏ธ Method 'port_mapping()' is Docker Compose-specific and will be ignored in Kubernetes output. For Kubernetes, use 'port()' + 'Service' instead of 'port_mapping()'. - If you use
.node_selector()and generate Docker Compose, you will see:โ ๏ธ Method 'node_selector()' is Kubernetes-specific and will be ignored in Docker Compose output.
๐ท๏ธ Decorators for Custom Extensions
You can mark your own methods as format-specific using built-in decorators:
from celestra import docker_compose_only, kubernetes_only, output_formats
@docker_compose_only
def my_compose_method(self, ...): ...
@kubernetes_only
def my_k8s_method(self, ...): ...
@output_formats('kubernetes', 'helm')
def my_multi_format_method(self, ...): ...
๐ก Best Practice
- For Docker Compose: Use
.port_mapping()for host:container mapping - For Kubernetes: Use
.port()and create aServicefor exposure - Universal: Use
.port(),.image(),.replicas(),.env(), etc.
Celestra will always guide you with clear warnings and suggestions if you use a method in the wrong context!
๐ค Contributing
We welcome contributions! Here's how to get started:
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Make your changes and add tests
- Run tests:
python run_tests.py - Submit a pull request
See our Contributing Guide for detailed guidelines.
๐ License
This project is licensed under the MIT License - see the LICENSE file for details.
๐ Get Started Now
# Install Celestra from source
git clone https://github.com/your-org/celestra.git
cd celestra
pip install -e src/
# Create your first application
cat > my_app.py << EOF
from celestra import App
app = (App("hello-world")
.image("nginxdemos/hello:latest")
.port(80)
.replicas(2)
.expose())
app.generate().to_yaml("./k8s/")
print("โ
Kubernetes manifests generated in ./k8s/")
EOF
# Generate and deploy
python my_app.py
kubectl apply -f ./k8s/
Ready to simplify your Kubernetes deployments? Check out the complete documentation and join thousands of developers already using Celestra! ๐
Documentation โข Examples โข API Reference โข Components
Made with โค๏ธ by the Celestra community
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file celestra-0.0.3.tar.gz.
File metadata
- Download URL: celestra-0.0.3.tar.gz
- Upload date:
- Size: 183.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
eaa799c932c3c108e7d2a0326ea5680e84f1278c26db9d672c524197ddbefa8f
|
|
| MD5 |
cc0bdb04d26c4dc10725581f887a7146
|
|
| BLAKE2b-256 |
3ab9fe4364dd44c85080290b1e8a7f6d93adaf8259e7944fb5972263c94ba719
|
Provenance
The following attestation bundles were made for celestra-0.0.3.tar.gz:
Publisher:
publish-pypi.yml on sps014/celestra
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
celestra-0.0.3.tar.gz -
Subject digest:
eaa799c932c3c108e7d2a0326ea5680e84f1278c26db9d672c524197ddbefa8f - Sigstore transparency entry: 402040383
- Sigstore integration time:
-
Permalink:
sps014/celestra@13a06aac1f58ebd1323e185d05b743139278a8d4 -
Branch / Tag:
refs/tags/v-0.0.3 - Owner: https://github.com/sps014
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@13a06aac1f58ebd1323e185d05b743139278a8d4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file celestra-0.0.3-py3-none-any.whl.
File metadata
- Download URL: celestra-0.0.3-py3-none-any.whl
- Upload date:
- Size: 220.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5bbf30ac8a70a08debd033cd630218534b65d868f8ada6746c764370c7259769
|
|
| MD5 |
b6e7617d789f187eace2c4f834858bc2
|
|
| BLAKE2b-256 |
028fc88b662723bb15917c16d123907ee7a287e1425b64dca9387b2b53f9560a
|
Provenance
The following attestation bundles were made for celestra-0.0.3-py3-none-any.whl:
Publisher:
publish-pypi.yml on sps014/celestra
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
celestra-0.0.3-py3-none-any.whl -
Subject digest:
5bbf30ac8a70a08debd033cd630218534b65d868f8ada6746c764370c7259769 - Sigstore transparency entry: 402040394
- Sigstore integration time:
-
Permalink:
sps014/celestra@13a06aac1f58ebd1323e185d05b743139278a8d4 -
Branch / Tag:
refs/tags/v-0.0.3 - Owner: https://github.com/sps014
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@13a06aac1f58ebd1323e185d05b743139278a8d4 -
Trigger Event:
push
-
Statement type: