Manage add-ons
Once an add-on is installed, its page on the cluster's Add-ons tab is where you run it: its health, its events and logs, its settings, its upgrades, rollbacks and removal. Every change goes through a dry run first, and the console, astroctl, Nova and the API make the same request, so they are checked and refused the same way. To install one: Install add-ons.
Before you start
- An installed add-on on a cluster that reads Ready. One operation runs on a cluster at a time, so a change waits while the cluster is being created, updated or deleted.
In the console
-
Open the cluster from the cluster list and select the Add-ons tab. The list shows each add-on's Version, Health, Availability and Status; Needs attention and Update available narrow it. Select a row to open the add-on.
Open zoom view -
The add-on opens as its own page, on Overview: its version, health checks, availability, resources and the configuration as applied. Ask Nova and Uninstall sit at the top, and All add-ons or the cluster's name in the path goes back to the list. Events, Logs, History, Metrics, Cost, Security and Update are beside it. Update lists Change configuration, Resync, Upgrade (when a newer release is offered) and Roll back, each with its astroctl command.
Open zoom view Open zoom view -
To change its settings, open Update and select Change configuration. The same steps as the install open, without Add-on and Version; change what you need, then go to Review. The dry run runs by itself and answers with the configuration the add-on would run, every setting you left out filled in as the platform reads it. Review compares that with what runs now: each change under its heading as "Setting: before → after", the diff, and the Manifest disclosure with the astroctl lines. When nothing would change, it says so and there is nothing to apply. While you fill in the steps, Your changes so far shows your own edits. Select Continue to apply, type the add-on's name on Apply (such as
nginx-ingress), then select Update nginx-ingress.Open zoom view -
To move to a newer release, select Upgrade on Update. The confirm names the release it moves to, any releases that follow one at a time, and any breaking changes; select Upgrade.
-
To build it again from its saved settings, select Resync on Update, then Resync in the confirm. While a change is being applied, Update offers only Roll back until it finishes.
-
To go back to an earlier revision, open History and select Roll back on a revision marked eligible.
Open zoom view -
To remove it, select Uninstall at the top of its page, type the add-on's name, then Uninstall Permanently. An add-on marked Managed with cluster has no Uninstall: it leaves with the cluster.
You should see
An add-on's status reads the way an application's does: Running once its workload is up, and Deploying or Updating before it has one. Its lifecycle status (Deploying, Updating, Deployed) sits beside it on its page, and Events shows each step. A failing health check reads Health check failed and shows on Overview under a notice headed What is wrong; the list's Needs attention filter shows it. A version leaving support shows as its own mark beside the status.
Cloud access for add-ons
Three add-ons call your cloud from inside the cluster:
| Add-on | Namespace | Service account | Needs |
|---|---|---|---|
| DNS Automation | external-dns | external-dns | Change records in your DNS zone |
| Certificates | cert-manager | cert-manager | Add and remove challenge TXT records in your zone, only with the DNS check (dnsSolver) |
| Vulnerability Scanning | astro-security | trivy-operator | Read images in your private registries |
Each runs as one Kubernetes service account. Your cloud trusts that account and allows it what the add-on does, and nothing else. Other add-ons call no cloud API, or say what they reach on their own page, as Node Autoscaling and Model Serving do.
| Cluster | DNS Automation | Certificates (DNS check) | Vulnerability Scanning |
|---|---|---|---|
| EKS, created by AstroPulse | Automatic. A Route 53 role is created with the cluster | Automatic for a Route 53 zone | Automatic. ECR pull access |
| GKE, created by AstroPulse | You | You | Automatic. Artifact Registry read in the cluster's project |
| AKS, created by AstroPulse | You | You | Automatic. AcrPull on the registries the cluster already pulls from |
| Registered, any cloud | You | You | You, for registries the workloads' own pull secrets do not cover |
Where it is yours to set up, DNS Automation and Certificates' DNS check are refused until you name an identity (DNS Automation also takes a Secret), except DNS Automation on a registered cluster outside AWS, which installs and publishes nothing until it has access. Vulnerability Scanning installs and scans public images; images its registry refuses are reported as not scannable in its health.
identity binds a cloud workload identity to the add-on's service account with the annotations (and on Azure, labels) your cloud reads:
| Cloud | identity |
|---|---|
| EKS | serviceAccountAnnotations: eks.amazonaws.com/role-arn: ROLE_ARN |
| GKE | serviceAccountAnnotations: iam.gke.io/gcp-service-account: GSA_EMAIL |
| AKS | serviceAccountAnnotations: azure.workload.identity/client-id: CLIENT_ID, and serviceAccountLabels: azure.workload.identity/use: "true". Both are required |
secretRef, on DNS Automation only, names a Secret you create in the add-on's namespace, for a zone an identity can't reach. Set one or the other, never both. An identity you write always wins over an automatic one. On GKE the cluster needs Workload Identity, and its node pools the GKE_METADATA workload metadata mode; clusters AstroPulse created have both. Each add-on's page has the steps: DNS Automation, Certificates, Vulnerability Scanning.
Security: with identity no key exists anywhere, so there is nothing to store, leak or rotate. AstroPulse stores only the identity's annotations or the Secret's name, never reads the Secret, and never lends a credential of its own to a cluster it did not create.
Availability and resources
Every add-on takes two settings beyond its own, shown in its steps as Availability (on Advanced) and Resources:
availability:StandardorHigh, how many copies of its components run. UnderStandard, the components whose outage stops traffic or blocks changes already run 2 copies: the ingress controller, the Certificates webhook, Workload Autoscaling's metrics API, the gateway proxy and the Workload Queueing controller.Highadds a second copy of the rest. Two copies run only when the cluster has 2 or more fixed nodes they can be scheduled on; nodes an autoscaler adds don't count. A registered cluster runs one copy, and two withHigh, without a disruption budget.resources: the CPU and memory of the add-on's main component, asrequestsandlimitsthe way Kubernetes sizes any workload.componentssizes the add-on's other components by name. See Advanced: sizing.
A disruption budget and a spread across hosts are applied only when two copies run, so a budget never blocks a node drain.
Clusters without a cloud load balancer
The whole flow works on a local cluster such as kind, or on bare metal:
- Ingress: turn on Enable node port.
addons getthen reports the node ports and node addresses to dial. - Gateway: set
gateway.enableNodePort: true. - Certificates: use the self-signed issuer type. It needs no ACME account or public DNS.
- DNS Automation: skip it. It needs a real cloud DNS zone.
Upgrade and roll back
Upgrade appears when a newer release is offered. It upgrades in place with the current settings, one release at a time. Read the breaking changes the confirm lists before moving an add-on that carries live traffic or CRDs. With astroctl, list the versions, then set spec.version in the manifest and apply it again:
astroctl infra k8s addons versions <cluster> cert-manager
astroctl infra k8s addons history <cluster> cert-manager
astroctl infra k8s addons rollback <cluster> cert-manager --to <revision> --dry-run
astroctl infra k8s addons rollback <cluster> cert-manager --to <revision>
--to takes a revision from history, not a version. Without --to, rollback goes to the previous eligible revision.
Version support
- The two newest minor versions of each add-on are supported, and within a minor only its newest patch.
- A version leaves support with notice: it is marked deprecated with an end-of-support date at least 30 days later for a patch and 90 days later for a minor.
- AstroPulse never upgrades or removes a running add-on for you. Retiring a version only stops new installs and changes at it. Rolling back to an earlier revision is never refused, so you can always recover.
| Version is | An apply | Offered as an upgrade |
|---|---|---|
| Recommended | Installs | Yes |
| Supported | Installs | Yes |
| Deprecated | Installs, with a warning naming the end-of-support date and the version to move to | No |
| Retired | Refused, naming the version to move to | No |
The console shows a deprecated or retired version with its date and the version to move to. addons versions lists every version with its support status, and the API reports it as support on each version and on the installed add-on.
Resync
Resync builds the add-on again from its saved settings, at the version it runs, and deploys it even when nothing changed. Use it to take AstroPulse's latest fix for a running add-on without changing its version or settings, or when it reads Deployed but is not behaving. A resync follows an apply's rules: it waits for another operation on the cluster, cancels a removal still waiting, and is refused for a version that is retired or doesn't run on the cluster's Kubernetes version.
astroctl infra k8s addons resync <cluster> cert-manager
--force also restarts a stuck sync and reapplies every resource; the console never sends it.
Uninstall
The console asks you to type the add-on's name. Uninstall is refused while another add-on depends on this one, for example Certificates while Model Serving or the Gateway is installed. Nova never uninstalls: it reports the impact and gives you the command.
astroctl infra k8s addons delete <cluster> cert-manager
With -o json or -o yaml, delete needs --yes, because standard output is the document and nothing is left to ask on.
How to debug add-ons
Start with the add-on's status and health checks, then its events and logs:
astroctl infra k8s addons get <cluster>
astroctl infra k8s addons get <cluster> <addon> -o yaml
astroctl infra k8s addons events <cluster> <addon> --k8s
astroctl infra k8s addons logs <cluster> <addon> --level Error --include-previous
status is the add-on's lifecycle: one of Pending, Deploying, Deployed, Updating, Failed, Deleting or Deleted. phase is what its workload is doing now, in the same words as an application's (Running, InProgress, Failed and so on), and is absent before the add-on has a workload. displayStatus is set only when a notice changes what to show, such as Health check failed. Health is separate: health.overallStatus, and health.checks[], each with a name, passing, pending and a message that says what to do. With -o json, match on status or phase in a script, never on displayStatus.
Other ways in
- Nova: ask it, for example "is cert-manager healthy on eks-prod?" or "upgrade Ingress on eks-prod". It reads the same health, events and logs, shows a change before it makes it, and applies it after you approve.
- SDK and API: the same operations, in the API reference.
With astroctl
astroctl infra k8s addons get <cluster> nginx-ingress --manifest > nginx-ingress.yaml
astroctl infra k8s addons apply -f nginx-ingress.yaml --dry-run
astroctl infra k8s addons apply -f nginx-ingress.yaml
astroctl infra k8s addons status <cluster> nginx-ingress
apply is declarative: edit spec.version or spec.configuration and apply the same file again to upgrade or reconfigure. events, logs, metrics, cost and history read the same as the console's tabs. Every command: astroctl infra k8s addons.
Settings
The two settings every add-on takes. Each add-on's own are on its page.
availabilityHow many copies of the add-on's components run.
Standard or High.Standard.Advanced: sizing
AstroPulse sizes every add-on for production. Change it only when a component runs out of memory or the cluster is too small for it. In the console it is on the Resources step (the main component) and the Components step (the others): requests can be changed, and limits are shown for reference but cannot be changed there. To read an add-on's current sizing, print its manifest with astroctl infra k8s addons template <cluster> <addon> (reference) rather than copying numbers from here.
In the manifest, sizing sits under spec.configuration:
spec:
configuration:
resources:
requests:
cpu: 250m
memory: 512Mi
resources.requests.cpuThe CPU reserved for the add-on's main component.
10m to 16 cores, such as 250m.resources.requests.memoryThe memory reserved for the add-on's main component.
64Mi, or the component's default where that is lower, to 64Gi, such as 512Mi.resources.limitsThe most CPU and memory the component may use, at least its requests. Where AstroPulse sets a memory limit and you set none, the memory request is also the limit. Set it in the manifest; the console shows it for reference.
components.<name>.resourcesThe same requests and limits for one of the add-on's other components, keyed by its name. A component left out keeps its sizing; a component given as {} returns to AstroPulse's sizing.
If it's refused
A refusal changes nothing, and the dry run refuses the same way. The console's Deploy and Apply steps send the same request as astroctl infra k8s addons apply.
Apply and configure
resources.cpu is no longer accepted; set resources.requests.cpu (and resources.limits.cpu for a limit)"resources.requests, as in Advanced: sizing.resources.requests.memory for <component> of <addon> must be from 64Mi (64 MiB) to 64Gi (64 GiB), got <value>"InvalidArgument; details.fields names the field.CONFLICT.spec.version is not offered for this cluster.astroctl infra k8s addons versions <cluster> <addon>.InvalidArgument.CONFLICT.ClusterOperationInProgressastroctl infra k8s progress stream <cluster>, then apply again.CONFLICT.CONFLICT.CONFLICT.astroctl infra k8s addons status <cluster> <addon>.Retry-After header in seconds.Retry-After time, then send the same request again.Retry-After header in seconds.astroctl infra k8s addons status <cluster> <addon>, then apply again once it is gone.CONFLICT.delete with -o json or -o yaml.--yes.astroctl infra k8s addons history <cluster> <addon> and pick one marked eligible.Health and rollout
astroctl infra k8s addons events <cluster> <addon> --k8s for image pulls, scheduling and probe failures.availability check reads "Add-on availability is not confirmed healthy"; the cause is in the events.logs --level Error --include-previous. Fix the cause, then apply again.astroctl infra k8s addons status <cluster> <addon>.addons get <cluster> <addon> --manifest, review it, then addons apply -f.astroctl infra k8s register agent update --cluster-name <cluster>.status read got no answer in its minute. events says "no events arrived" the same way.Next
- Install add-ons
- Add-ons: which one does what
- Update and upgrade a cluster