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.

Useful References