Deploy an Application
Applications deploy through two objects: an application profile (picks the target cluster) and an application manifest (describes what to run).
Before You Start
- Complete Deploy a Kubernetes Cluster.
- Confirm your cluster is ready:
astroctl infra k8s get
Note the cluster name — you need it in Step 1.
Step 1: Create an Application Profile
A profile points your application at a cluster. Save this as profile.yaml:
apiVersion: platform.astropulse.io/v1
kind: ApplicationProfile
spec:
profileName: hello-world-profile # unique name for this profile
clusterName: aws-dev-cluster # your cluster name — run: astroctl infra k8s get
Apply it:
astroctl app profile apply -f profile.yaml
Confirm it exists:
astroctl app profile get
Step 2: Create an Application Manifest
Save this as app.yaml:
apiVersion: platform.astropulse.io/v1
kind: Application
spec:
name: hello-world
profileName: hello-world-profile # must match the profile you created above
source:
type: image
image:
registry: docker.io # optional — default: docker.io
repository: astropulse/latency # <registry-user>/<image-name>
tag: v1.0.0 # image tag
namespace: hello-world # optional — auto-generated from name if omitted
syncType: auto # auto (default) | manual
Step 3: Validate and Deploy
Validate without deploying:
astroctl app apply -f app.yaml --dry-run
Deploy:
astroctl app apply -f app.yaml
Step 4: Verify It's Running
Check status:
astroctl app status hello-world
Watch deployment events:
astroctl app events hello-world
Watch Kubernetes events:
astroctl app events hello-world --k8s
View logs:
astroctl app logs hello-world
A healthy application shows Status: Healthy and Sync: Synced.
Deploy from Helm
Use the helm source type for Helm chart deployments:
apiVersion: platform.astropulse.io/v1
kind: Application
spec:
name: nginx
profileName: hello-world-profile # must match your profile
namespace: nginx
syncType: auto
source:
type: helm
helm:
repo:
repoURL: https://charts.bitnami.com/bitnami
chartName: nginx
chartVersion: 15.0.0
Deploy with the same command:
astroctl app apply -f app.yaml
Common Commands
# List all applications
astroctl app get
# Check an app's status
astroctl app status <APP_NAME>
# View application events
astroctl app events <APP_NAME>
# View Kubernetes events
astroctl app events <APP_NAME> --k8s
# View logs
astroctl app logs <APP_NAME>
# Delete an application
astroctl app delete <APP_NAME>
Direct Kubernetes access:
astroctl infra k8s set-context aws-dev-cluster
kubectl get pods
The profileName on an application cannot be changed after the application is deployed. Create a new application with a different name to change the target profile.
Not sure about all the fields? Run the template commands to get fully annotated YAML:
astroctl app profile template # application profile
astroctl app template # application manifest
Add --schema to see field types, required/optional status, and valid values.
Install the GitHub App first so the platform can access your repository:
astroctl integrations github install
See GitHub Integration for details.
You can deploy applications from the AstroPulse Console without writing any YAML.
You can also deploy in plain language, for example "deploy hello-world from this manifest" or "update hello-world to v1.1.0." Nova validates and applies through the same governed flow, then can show you status, logs, and history. The console, the CLI, and Nova all do the same thing — use whichever you prefer.
Made a bad deploy?
Every deploy is recorded as a version you can return to. Roll back to the last good version, diff-first, from the console, the CLI, or Nova:
astroctl app history hello-world # see every version
astroctl app rollback hello-world # preview the plan, then confirm
See Rollback & Deploy History for the full workflow.