Comprehensive guides and references for the OpenFrame platform
Now that you have OpenFrame CLI installed and your first environment bootstrapped, let's explore the key features and workflows. This guide covers the essential first steps to get you productive with OpenFrame.
Get familiar with the command hierarchy:
# See all available commands
openframe --help
# Explore each command group
openframe cluster --help
openframe chart --help
openframe dev --help
openframe bootstrap --help
The CLI is organized into logical groups:
Verify everything is running correctly:
# Overall cluster health
openframe cluster status
# List all running clusters
openframe cluster list
# Check installed charts and applications
openframe chart list
Expected healthy output:
📊 Cluster Status: openframe-local
✅ Cluster is running
✅ ArgoCD is healthy
✅ All core services operational
ArgoCD provides a web interface for GitOps deployments:
# Get admin password
kubectl -n argocd get secret argocd-initial-admin-secret \
-o jsonpath="{.data.password}" | base64 -d; echo
# Port forward to access UI
kubectl port-forward svc/argocd-server -n argocd 8080:443
# Open in browser: https://localhost:8080
# Username: admin
# Password: (from command above)
In the ArgoCD UI, you'll see:
Let's deploy a simple application to test the workflow:
# Create a test namespace
kubectl create namespace hello-world
# Deploy a sample application
kubectl apply -f - <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-world
namespace: hello-world
spec:
replicas: 1
selector:
matchLabels:
app: hello-world
template:
metadata:
labels:
app: hello-world
spec:
containers:
- name: hello-world
image: nginx:alpine
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: hello-world
namespace: hello-world
spec:
selector:
app: hello-world
ports:
- protocol: TCP
port: 80
targetPort: 80
EOF
Verify the deployment:
# Check pods
kubectl get pods -n hello-world
# Check service
kubectl get svc -n hello-world
# Test connectivity
kubectl port-forward svc/hello-world -n hello-world 8081:80 &
curl http://localhost:8081
kill %1 # Stop port forward
Configure kubectl context and helpful aliases:
# Set default context
kubectl config use-context k3d-openframe-local
# Add helpful aliases to your shell profile
cat >> ~/.bashrc << 'EOF'
# OpenFrame aliases
alias of="openframe"
alias ofcs="openframe cluster status"
alias ofcl="openframe cluster list"
alias k="kubectl"
alias kgp="kubectl get pods"
alias kgs="kubectl get svc"
alias kgn="kubectl get nodes"
EOF
# Reload shell configuration
source ~/.bashrc
flowchart TD
A[Create Cluster] --> B[Check Status]
B --> C[Deploy Applications]
C --> D[Monitor Health]
D --> E{Issues?}
E -->|Yes| F[Debug & Fix]
E -->|No| G[Continue Development]
F --> D
G --> H[Scale or Update]
H --> D
# Create a new cluster
openframe cluster create my-new-cluster
# List all clusters
openframe cluster list
# Get detailed status
openframe cluster status my-cluster
# Delete a cluster
openframe cluster delete my-cluster
# Clean up resources
openframe cluster cleanup
sequenceDiagram
participant Dev as Developer
participant CLI as OpenFrame CLI
participant ArgoCD as ArgoCD
participant K8s as Kubernetes
Dev->>CLI: openframe chart install
CLI->>ArgoCD: Create Application
ArgoCD->>K8s: Deploy Resources
K8s-->>ArgoCD: Resource Status
ArgoCD-->>CLI: Sync Status
CLI-->>Dev: Deployment Complete
# Install a chart from repository
openframe chart install my-app \
--repo=https://github.com/my-org/my-app \
--path=charts/my-app
# List installed applications
openframe chart list
# Check application sync status
kubectl get applications -n argocd
# Manually sync an application
kubectl patch application my-app -n argocd \
--type=json \
-p='[{"op": "replace", "path": "/spec/syncPolicy", "value": {"automated": {"selfHeal": true}}}]'
For local development with live Kubernetes integration:
# Start a development intercept
openframe dev intercept my-service \
--namespace=default \
--port=3000:8080
# Generate scaffold for new service
openframe dev scaffold my-new-service \
--template=microservice \
--language=go
Create a configuration file for personalized settings:
mkdir -p ~/.openframe
cat > ~/.openframe/config.yaml << 'EOF'
# OpenFrame CLI Configuration
default:
cluster_name: "openframe-local"
namespace: "default"
log_level: "info"
bootstrap:
mode: "oss-tenant"
interactive: true
timeout: "15m"
cluster:
provider: "k3d"
nodes: 1
chart:
timeout: "10m"
wait: true
dev:
intercept_timeout: "5m"
scaffold_templates_dir: "~/.openframe/templates"
EOF
For ArgoCD to access your repositories:
# Add a Git repository to ArgoCD
kubectl apply -f - <<EOF
apiVersion: v1
kind: Secret
metadata:
name: my-private-repo
namespace: argocd
labels:
argocd.argoproj.io/secret-type: repository
stringData:
type: git
url: https://github.com/my-org/my-private-repo
password: <your-token>
username: <your-username>
EOF
Configure Traefik ingress for external access:
# Create an ingress for your application
kubectl apply -f - <<EOF
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: hello-world-ingress
namespace: hello-world
annotations:
kubernetes.io/ingress.class: traefik
spec:
rules:
- host: hello-world.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: hello-world
port:
number: 80
EOF
# Add to /etc/hosts for local testing
echo "127.0.0.1 hello-world.local" | sudo tee -a /etc/hosts
# Access via: http://hello-world.local
# View all pods across namespaces
kubectl get pods --all-namespaces
# Check node resource usage
kubectl top nodes
# Check pod resource usage
kubectl top pods --all-namespaces
# View cluster events
kubectl get events --sort-by=.metadata.creationTimestamp
# Describe pod to see events
kubectl describe pod <pod-name> -n <namespace>
# Check logs
kubectl logs <pod-name> -n <namespace>
# Check resource constraints
kubectl get resourcequota -n <namespace>
# Check service endpoints
kubectl get endpoints <service-name> -n <namespace>
# Test internal connectivity
kubectl run test-pod --image=busybox -it --rm -- sh
# Inside pod:
wget -q -O- http://<service-name>.<namespace>.svc.cluster.local
# Check application status
kubectl get application <app-name> -n argocd -o yaml
# Force refresh
kubectl patch application <app-name> -n argocd \
--type=json \
-p='[{"op": "replace", "path": "/spec/source/targetRevision", "value": "HEAD"}]'
# Manual sync
kubectl patch application <app-name> -n argocd \
--type=json \
-p='[{"op": "add", "path": "/metadata/annotations/argocd.argoproj.io~1sync", "value": ""}]'
Now that you're familiar with OpenFrame basics, explore advanced topics:
Learn how to set up a complete development environment:
Dive deeper into how OpenFrame components work:
Master sophisticated deployment strategies:
# Quick status check
openframe cluster status
# View all resources
kubectl get all --all-namespaces
# Emergency cluster reset
openframe cluster delete <cluster-name>
openframe bootstrap
# Export current configuration
kubectl get all -o yaml > backup.yaml
# View OpenFrame CLI logs
openframe --verbose <command>
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yamlYou're now ready to be productive with OpenFrame CLI! Explore the features, experiment with deployments, and join the community for support and sharing experiences.