Install and Upgrade
krateoctl install plan and krateoctl install apply cover the main install and upgrade workflows for Krateo.
planpreviews whatkrateoctlwould do, without talking to the cluster.applyexecutes the workflow against the cluster.
Secrets must be managed separately. krateoctl does not bootstrap production secrets. Use Vault or create the required Kubernetes Secrets manually before running install or upgrade commands.
See the Secrets Spec for the required names, keys, and namespace rules.
Table Of Contents​
When To Use Them​
Use these commands when you want to:
- install Krateo from a local
krateo.yaml - upgrade to a tagged release version
- compare the computed plan with the last stored installation snapshot
- run type-specific workflows for
nodeport,loadbalancer, oringress
Release Source​
When you pass --version, krateoctl switches to remote mode and fetches files from the releases repository instead of the local filesystem.
The default repository is:
This repository is used as a versioned source of installation assets. krateoctl builds raw GitHub URLs from it and looks for files such as:
krateo.yamlkrateo.<type>.yaml(e.g.,krateo.nodeport.yaml)krateo-overrides.yamlkrateo-overrides.<profile>.yamlpre-upgrade.yamlpre-upgrade.<type>.yamlpost-upgrade.yamlpost-upgrade.<type>.yaml
If you maintain your own release repository, you can point --repository at a GitHub repo with the same layout.
Profile Resolution​
When you specify --profile (e.g., --profile dev or --profile dev,aws-lb-hostname):
- In remote mode (
--versionset): krateoctl searches forkrateo-overrides.<profile>.yamlin the remote repository first, then falls back to local files if not found. - In local mode (no
--version): krateoctl searches forkrateo-overrides.<profile>.yamlin local files only. - If the profile is not found in either location (or both), krateoctl returns an error and stops execution.
This allows profiles to be overridden locally even when using a remote release, but requires at least one source to contain the profile file.
Profiles persist across upgrades — Changing replaces values, omitting reverts to defaults. Always include your profiles in both plan and apply. Use plan --diff-installed before apply to verify changes.
Installation Snapshot​
krateoctl saves the resolved installation state as an Installation custom resource in the krateo.io/v1 API group.
The snapshot contains:
- the resolved
componentsDefinition - the computed
steps - the
installationVersionused to build it
By default, the snapshot is stored with the name krateoctl in the install namespace.
How It Is Used​
krateoctl install applysaves the snapshot after a successful apply.krateoctl install plan --diff-installedloads the stored snapshot and compares it with the newly computed plan.krateoctl install migrate-fullalso saves the snapshot as part of the automatic migration flow.
Why It Exists​
The snapshot gives krateoctl a durable record of what was last computed and applied. That makes it easier to:
- compare a new release against the current state
- detect drift between the installed workflow and the newly computed one
- keep a versioned record of the installation logic that produced the cluster state
Notes​
- The snapshot resource is namespaced.
- The CRD is installed automatically by
krateoctl install applyand the migration flow if it is missing. - If the snapshot is not present,
plan --diff-installedreports that it could not find one and continues without a diff.
Secrets​
Secrets are managed separately from the install workflow. The recommended approach is to store them in Vault and sync them into Kubernetes.
See the full Secrets Spec for the required names, keys, and namespace rules.
Plan Command​
krateoctl install plan is the command that loads the configuration, computes the workflow, and prints the result as multi-document YAML or as a diff summary.
Always run plan before apply to inspect the changes and avoid unexpected configuration modifications.
Usage​
krateoctl install plan [FLAGS]
Key Flags​
--versionrelease tag to fetch from the releases repository--repositorycustom GitHub repository URL for release assets, defaulthttps://github.com/krateoplatformops/releases--configlocal configuration file, defaultkrateo.yaml--profileoptional profile name, such asdevorprod--namespacenamespace where the installation snapshot is stored--typefile variant to use, such asnodeport,loadbalancer, oringress--diff-installedcompare the computed plan against the stored installation snapshot--diff-formatchoose how diffs are rendered; usetablefor a per-step summary view--outputemit the computed plan as YAML to stdout--skip-validationskip configuration validation--debugenable debug logging, or setKRATEOCTL_DEBUG
How It Works​
- Resolve Main Config: Loads the configuration file. If
--typeis specified (e.g.,nodeport), it looks forkrateo.nodeport.yaml. If not found, or if no type is specified, it falls back tokrateo.yaml. - Apply Overrides: Applies
krateo-overrides.yamland any profile-specific overrides (krateo-overrides.<profile>.yaml) if--profileis present.- When
--profileis used (e.g.,--profile dev,test), krateoctl looks forkrateo-overrides.<profile>.yamlfiles. - In remote mode (
--versionset): searches the releases repository first, then falls back to local files if not found. - In local mode (no
--version): searches only local files.
- When
- Resolve Hooks: Selects type-specific pre/post upgrade hooks (e.g.,
pre-upgrade.nodeport.yaml) with a fallback to generic ones (e.g.,pre-upgrade.yaml). - Compute Workflow: Processes all gathered definitions and computes the execution plan.
- Diff (Optional): If
--diff-installedis used, compares the computed plan against the last saved installation snapshot.
Understanding --diff-installed​
The --diff-installed flag controls the output mode of the plan command:
-
Without
--diff-installed(Default): Generates and displays the execution plan (the sequence of steps) thatkrateoctlwould perform based on the resolved configuration (including overrides and profiles).- Use this to preview the installation workflow.
- Useful for verifying that your configuration, profiles, and flags (like
--type) are correctly interpreted.
-
With
--diff-installed: Performs a diff between the newly computed plan and the stored installation snapshot (the state of the last successfulapply).- Use this to see exactly what will change in the cluster if you run
apply. - Useful for understanding the impact of an upgrade or a configuration change relative to the current cluster state.
- Use this to see exactly what will change in the cluster if you run
Examples​
# Preview the local installation config
krateoctl install plan
# Preview a specific release version from the default releases repository
krateoctl install plan --version 3.0.0
# Preview from a custom releases repository
krateoctl install plan --version 3.0.0 --repository https://github.com/myorg/krateo-releases
# Compare the plan against the stored snapshot (what changed since last apply)
krateoctl install plan --version 3.0.0 --diff-installed
# Show a step-by-step diff summary in a table
krateoctl install plan --diff-format table
# Preview with a profile from local files
krateoctl install plan --profile dev
# Preview with a profile from a release version (searches repository first, then local)
krateoctl install plan --version 3.0.0 --profile dev
# Preview with multiple profiles (all profiles use remote-first, local-fallback)
krateoctl install plan --version 3.0.0 --profile dev,aws-lb-hostname
Apply Command​
krateoctl install apply is the command that executes the computed workflow against the cluster.
Profiles and Versions Affect Your Configuration
When you run apply, the combination of --version, --type, and --profile flags directly determines which configuration values are applied:
-
Changing profiles or versions replaces values — If you used
--profile dark-themein one apply and--profile light-themein the next apply, all values from the previousdark-themeprofile will be replaced withlight-themevalues. -
Omitting a profile removes its configuration — If you used
--profile dark-themeinitially and then runapplywithout it, the dark-theme configuration is lost and reverts to defaults. -
Always use
planto inspect changes — Always runkrateoctl install plan(with the same flags you'll use forapply) before actually runningapply, so you can review the changes and confirm they are expected.
Usage​
krateoctl install apply [FLAGS]
Key Flags​
--versionrelease tag to fetch from the releases repository--repositorycustom GitHub repository URL for release assets, defaulthttps://github.com/krateoplatformops/releases--configlocal configuration file, defaultkrateo.yaml--namespacetarget namespace--typefile variant to use, such asnodeport,loadbalancer, oringress--profileoptional profile name--skip-validationskip configuration validation--debugenable debug logging, or setKRATEOCTL_DEBUG
What apply Does​
- Loads the configuration in local or remote mode.
- Ensures the Installation CRD exists.
- Applies any
pre-upgrademanifests first. - Runs the main workflow steps.
- Applies any
post-upgrademanifests after the workflow completes. - Saves the resulting installation snapshot.
Examples​
# Apply from the local configuration
krateoctl install apply
# Apply a tagged release from the default releases repository
krateoctl install apply --version 3.0.0
# Apply a tagged release and use a custom repository
krateoctl install apply --version 3.0.0 --repository https://github.com/myorg/krateo-releases
# Apply with a type-specific layout
krateoctl install apply --config ./krateo.yaml --type ingress
# Apply with a profile (preview first with: krateoctl install plan --version 3.0.0 --profile dark-theme)
krateoctl install apply --version 3.0.0 --profile dark-theme
Upgrade Flow​
For a safe upgrade workflow, always follow this sequence:
Recommended Safe Upgrade Workflow
-
Run
krateoctl install plan --version <tag> --diff-installedto compare the target release with the stored installation snapshot.- This shows you exactly what changed since your last
apply - Review the diff carefully before proceeding
- This shows you exactly what changed since your last
-
Verify your
--profileand--typeflags are correct- If you previously used
--profile, include it again or the profile configuration will be lost - If you're changing profiles, understand that existing values will be replaced
- If you previously used
-
Run
krateoctl install apply --version <tag>with the same flags you used inplan- This ensures the configuration matches what you previewed
-
Verify the upgrade succeeded
- Check pod status and events in your namespace
General Upgrade Guidelines:
- Keep
--repositorypointed athttps://github.com/krateoplatformops/releasesunless you mirror the release assets elsewhere - Use
--typeto match the target environment layout, such asnodeport,loadbalancer, oringress - Use
--diff-installedwhen you want to compare against the stored snapshot (what changed since last apply) - Omit
--diff-installedif you want to see the diff against the configuration file instead
Profile Best Practices:
- Document which profiles you are using in your environment
- Always include
--profilein bothplanandapplycommands if you're using profiles - Never omit a profile in
applyif it was used in previous applies, or the configuration will revert to defaults - When changing profiles, use
plan --diff-installedto see the full impact before applying
Notes​
- Local mode uses files from disk and is the right fit when you are developing or testing a config change.
- Remote mode uses the releases repository and is the right fit when you are upgrading to an existing tagged release.