Skip to main content

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

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:

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:

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:

app.yaml
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
Profile is immutable

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.


Generate YAML from scratch

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.

Deploying from a private GitHub repo?

Install the GitHub App first so the platform can access your repository:

astroctl integrations github install

See GitHub Integration for details.

Prefer a web UI?

You can deploy applications from the AstroPulse Console without writing any YAML.

Or just ask Nova

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.

Useful References