Deploying Instances
Step-by-step guide to deploying applications using knodex
Overview
Deploying an instance creates Kubernetes resources based on ResourceGraphDefinition (RGD) templates. The deployment process includes:
- Select RGD: Choose application template
- Configure: Fill deployment form
- Preview: Review generated YAML
- Deploy: Submit to Kubernetes
- Monitor: Watch deployment progress
Deployment Methods
Method 1: Via Catalog (Recommended)
- Navigate to Catalog
- Search/filter for desired RGD
- Click Deploy button on RGD card
- Fill deployment form
- Click Deploy Now
Method 2: Via RGD Details Page
- Navigate to Catalog
- Click on RGD card to open details
- Review schema and examples
- Click Deploy button (top right)
- Fill deployment form
- Click Deploy Now
Method 3: From Example Template
- Open RGD details page
- Click Examples tab
- Find example matching your use case
- Click Deploy with this config
- Pre-filled form opens
- Modify as needed
- Click Deploy Now
Deployment Form
Basic Information
Required fields for all deployments:
| Field | Description | Example |
|---|---|---|
| Instance Name | Unique identifier | my-webapp-dev |
| Namespace | Organization namespace | kro-engineering (auto-filled) |
| Labels | Metadata tags | app=webapp, env=dev |
Instance Name Requirements:
- Lowercase letters, numbers, hyphens only
- Must start with letter
- Must end with letter or number
- 3-63 characters
- Unique within namespace
RGD-Specific Parameters
Parameters defined by the RGD schema:
Example: Nginx Web Application
┌─────────────────────────────────────────────────────────┐
│ Deploy Nginx Web Application │
├─────────────────────────────────────────────────────────┤
│ │
│ Instance Name: * │
│ ┌─────────────────────────────────────────────────┐ │
│ │ my-webapp-dev │ │
│ └─────────────────────────────────────────────────┘ │
│ │
│ Replicas: * │
│ ┌───┐ │
│ │ 2 │ (Min: 1, Max: 10) │
│ └───┘ │
│ │
│ Image: * │
│ ┌─────────────────────────────────────────────────┐ │
│ │ nginx:1.25 │ │
│ └─────────────────────────────────────────────────┘ │
│ │
│ Port: │
│ ┌────┐ │
│ │ 80 │ (Default: 80) │
│ └────┘ │
│ │
│ [Advanced Options ▼] │
│ │
│ [◀ Back] [Preview YAML] [Deploy Now] │
└─────────────────────────────────────────────────────────┘Advanced Options
Expandable section with optional parameters:
Resource Requests/Limits
Resources:
Requests:
CPU: ┌──────────┐ (e.g., 100m, 500m, 1)
│ 250m │
└──────────┘
Memory: ┌──────────┐ (e.g., 128Mi, 512Mi, 1Gi)
│ 512Mi │
└──────────┘
Limits:
CPU: ┌──────────┐
│ 1000m │
└──────────┘
Memory: ┌──────────┐
│ 2Gi │
└──────────┘Ingress Configuration
Ingress:
Enabled: [✓] Yes [ ] No
Host: ┌───────────────────────────────┐
│ my-webapp.example.com │
└───────────────────────────────┘
TLS: [✓] Enabled
Certificate: ┌──────────────────────┐
│ letsencrypt-prod │
└──────────────────────┘Environment Variables
Environment Variables:
┌───────────────┬─────────────────────────┐
│ Key │ Value │
├───────────────┼─────────────────────────┤
│ DATABASE_URL │ postgres://db:5432/app │
│ REDIS_URL │ redis://redis:6379 │
│ LOG_LEVEL │ info │
└───────────────┴─────────────────────────┘
[+ Add Variable]Form Validation
Real-time validation indicators:
✅ Valid field - Green checkmark
Instance Name: ┌─────────────────┐ ✓
│ my-webapp-dev │
└─────────────────┘
❌ Invalid field - Red error message
Instance Name: ┌─────────────────┐ ✗
│ MyWebApp │
└─────────────────┘
Must be lowercase
⚠️ Warning - Yellow warning (not blocking)
Replicas: ┌───┐ ⚠
│ 10│
└───┘
High replica count may exceed quota
YAML Preview
Preview Before Deploy
Click Preview YAML to see generated manifest:
apiVersion: kro.run/v1alpha1
kind: WebApplication
metadata:
name: my-webapp-dev
namespace: kro-engineering
labels:
app: webapp
environment: dev
annotations:
knodex.io/deployed-by: "alice@example.com"
knodex.io/deployed-at: "2024-01-20T17:30:00Z"
spec:
replicas: 2
image: nginx:1.25
port: 80
resources:
requests:
cpu: 250m
memory: 512Mi
limits:
cpu: 1000m
memory: 2Gi
ingress:
enabled: true
host: my-webapp.example.com
tls:
enabled: true
secretName: letsencrypt-prod
env:
- name: DATABASE_URL
value: "postgres://db:5432/app"
- name: REDIS_URL
value: "redis://redis:6379"
- name: LOG_LEVEL
value: "info"YAML Editor Features:
- Syntax Highlighting: Keywords, values, errors
- Line Numbers: Easy reference
- Copy Button: Copy YAML to clipboard
- Edit Inline: Modify YAML directly (advanced users)
- Validation: Real-time YAML syntax checking
Edit YAML Directly
For advanced users:
- Click Edit YAML button
- Modify manifest directly
- Changes reflected in form
- Click Apply Changes
Direct YAML editing bypasses form validation. Ensure valid Kubernetes YAML.
Deploying the Instance
Final Checks
Before clicking Deploy Now, verify:
- ✅ Instance name is unique
- ✅ All required fields filled
- ✅ Resource requests are reasonable
- ✅ Image name and tag are correct
- ✅ Environment variables are set
Deploy Button
Click Deploy Now to create instance.
Deployment Progress:
Deploying my-webapp-dev...
✓ Validating manifest
✓ Creating instance resource
✓ Waiting for pods to start
⏳ Pulling container image...
Expected Duration:
| Stage | Time |
|---|---|
| Validation | < 1 second |
| Resource creation | 1-2 seconds |
| Image pull | 10-60 seconds |
| Pod startup | 5-30 seconds |
| Total | ~30-90 seconds |
Success Confirmation
✓ Deployment Successful!
Instance: my-webapp-dev
Status: Running
Pods: 2/2 ready
URL: https://my-webapp.example.com
[View Instance] [Deploy Another]
Deployment Failures
Common Errors:
Error: "Instance name already exists"
Solution: Choose a different name or delete existing instance
Error: "Insufficient resources"
Pod cannot be scheduled: Insufficient cpu (requested 500m, available 200m)
Solution:
- Reduce CPU/memory requests
- Contact Platform Admin to increase quota
Error: "Image pull failed"
Failed to pull image "nginx:invalid-tag": not found
Solution:
- Verify image name and tag
- Ensure registry is accessible
- Check image pull secrets (if private registry)
Advanced Deployment Options
Dry Run
Preview deployment without creating resources:
- Fill deployment form
- Click Dry Run button
- Review what would be created
- No resources are actually deployed
Use Case: Testing manifests, validating configurations
Deploy with Approval
For production deployments with approval workflow:
- Fill deployment form
- Click Request Approval
- Deployment request sent to approvers
- Wait for approval
- Instance deployed after approval
Status: "Pending Approval" until approved/rejected
Deploy from Git
Deploy instance directly from repository:
- Navigate to Repositories tab
- Select repository
- Click Deploy from Git
- Choose file (e.g.,
/deploy/prod.yaml) - Preview manifest
- Click Deploy
Use Case: GitOps workflows, version-controlled deployments
Deployment Templates
Save as Template
Save configuration for reuse:
- Fill deployment form
- Click Save as Template
- Enter template name:
Nginx Dev Template - Template saved to your profile
Use Saved Template
Quick deploy with saved configuration:
- Click My Templates in toolbar
- Select template
- Pre-filled form opens
- Modify if needed
- Deploy
Use Case: Deploying similar instances repeatedly
Next: Managing Instances →