Skip to content

fm kubernetes ​

Reference for the fm kubernetes command group (auto-generated from fm kubernetes --help).

fm kubernetes ​

text
Manage managed Kubernetes clusters.

  fm kubernetes cluster create --name my-cluster --vpc vpc-123 --subnet subnet-456 --node-flavor k8s.gp1.medium
  fm kubernetes cluster list
  fm kubernetes cluster kubeconfig <cluster-id> > ~/.kube/frostmoln
  fm kubernetes node-pool create <cluster-id> --flavor k8s.gp1.large --node-count 3

Discover valid flavors, control-plane tiers, versions, and addons:
  fm kubernetes flavor list
  fm kubernetes tier list
  fm kubernetes version list
  fm kubernetes addon list

Usage:
  fm kubernetes [command]

Aliases:
  kubernetes, k8s

Available Commands:
  addon             View Kubernetes cluster addons
  cluster           Manage Kubernetes clusters
  flavor            View Kubernetes node flavors
  node-pool         Manage cluster node pools
  tier              View Kubernetes control-plane tiers
  version           View Kubernetes versions
  workload-identity Manage Workload Identity Federation for managed Kubernetes

Flags:
  -h, --help   help for kubernetes

Global Flags:
      --config string   config file (default is $HOME/.fm/config.yaml)
  -d, --debug           enable debug/verbose output
      --no-color        disable colored output
  -o, --output string   output format: table, json, yaml, wide (default "table")
  -q, --quiet           suppress non-essential output
      --tenant string   tenant ID to operate on (overrides the active/default tenant; also FM_TENANT)

Use "fm kubernetes [command] --help" for more information about a command.

fm kubernetes addon ​

text
List available cluster addons.

Usage:
  fm kubernetes addon [command]

Aliases:
  addon, addons

Available Commands:
  list        List cluster addons
  versions    List the versions of an addon you can pin

Flags:
  -h, --help   help for addon

Global Flags:
      --config string   config file (default is $HOME/.fm/config.yaml)
  -d, --debug           enable debug/verbose output
      --no-color        disable colored output
  -o, --output string   output format: table, json, yaml, wide (default "table")
  -q, --quiet           suppress non-essential output
      --tenant string   tenant ID to operate on (overrides the active/default tenant; also FM_TENANT)

Use "fm kubernetes addon [command] --help" for more information about a command.

fm kubernetes addon list ​

text
List cluster addons

Usage:
  fm kubernetes addon list [flags]

Flags:
  -h, --help   help for list

Global Flags:
      --config string   config file (default is $HOME/.fm/config.yaml)
  -d, --debug           enable debug/verbose output
      --no-color        disable colored output
  -o, --output string   output format: table, json, yaml, wide (default "table")
  -q, --quiet           suppress non-essential output
      --tenant string   tenant ID to operate on (overrides the active/default tenant; also FM_TENANT)

fm kubernetes addon versions ​

text
List the versions of one addon you can pin, in the platform's order
(newest-published last). RECOMMENDED marks the version a new selection gets.

The order is not a ranking: do not read the last row as the newest software.
End-of-life versions are not listed; a cluster already pinned to one shows it in
'fm kubernetes cluster addons <cluster-id>'.

Examples:
  fm kubernetes addon versions external-dns

Usage:
  fm kubernetes addon versions <addon> [flags]

Flags:
  -h, --help   help for versions

Global Flags:
      --config string   config file (default is $HOME/.fm/config.yaml)
  -d, --debug           enable debug/verbose output
      --no-color        disable colored output
  -o, --output string   output format: table, json, yaml, wide (default "table")
  -q, --quiet           suppress non-essential output
      --tenant string   tenant ID to operate on (overrides the active/default tenant; also FM_TENANT)

fm kubernetes cluster ​

text
Manage managed Kubernetes clusters.

Usage:
  fm kubernetes cluster [command]

Aliases:
  cluster, clusters

Available Commands:
  add-addons      Add addons to a running Kubernetes cluster
  addons          Show a cluster's addon versions (pinned and applied)
  create          Create a Kubernetes cluster
  delete          Delete a Kubernetes cluster
  get             Get Kubernetes cluster details
  kubeconfig      Fetch a cluster's kubeconfig
  list            List Kubernetes clusters
  pin-addons      Pin addons a cluster already has to a version
  proxy           Forward a local port to a cluster's Kubernetes API
  remove-addons   Remove addons from a running Kubernetes cluster
  rename          Rename a Kubernetes cluster
  tags            Read and replace a cluster's resource tags

Flags:
  -h, --help   help for cluster

Global Flags:
      --config string   config file (default is $HOME/.fm/config.yaml)
  -d, --debug           enable debug/verbose output
      --no-color        disable colored output
  -o, --output string   output format: table, json, yaml, wide (default "table")
  -q, --quiet           suppress non-essential output
      --tenant string   tenant ID to operate on (overrides the active/default tenant; also FM_TENANT)

Use "fm kubernetes cluster [command] --help" for more information about a command.

fm kubernetes cluster add-addons ​

text
Add catalog addons to an already-running Kubernetes cluster.

This command only ADDS. Name only the keys you want to add; the cluster's
existing addons are kept and re-sent for you, and this command can never remove
one — even if another operator changes the cluster while it runs. To remove an
addon, use 'fm kubernetes cluster remove-addons'.

NOT IMMEDIATE: the request records the new set and returns; the accepted change
starts its own reconciliation, which typically installs the addon on the cluster
within minutes. If that reconciliation cannot be started the platform says so in
a notice and the addon waits for the next scheduled one instead. Re-run
'fm kubernetes cluster get <cluster-id>' to see the recorded set.

The cluster must be running.

EGRESS: an addon's upstream images are pulled from a public registry when its
pods start, not preloaded onto your nodes, so your worker nodes need outbound
HTTPS to that registry (ExternalDNS: registry.k8s.io — and allowing that
hostname alone is not enough if you filter egress by name, because image
downloads are redirected to backing stores on other domains). The platform
cannot check this — reachability belongs to your VPC at the moment of the pull,
and every new node pulls again — so a cluster that cannot reach the registry
accepts the addon here and then leaves its pods in ImagePullBackOff. While the
addon is not running, any DNS records it manages are neither published nor
cleaned up. Run 'fm kubernetes addon list' to see an addon's prerequisites in
its DESCRIPTION.

VERSIONS: an added addon gets its recommended version unless you pin one with
--version addon=version (repeatable; see 'fm kubernetes addon versions <addon>').
Only the addons you name in --version are re-pinned; every other pin is left alone.

Examples:
  fm kubernetes cluster add-addons <cluster-id> --addons external-dns
  fm kubernetes cluster add-addons <cluster-id> --addons external-dns --version external-dns=<version>
  # <version>: one listed by 'fm kubernetes addon versions external-dns'

Usage:
  fm kubernetes cluster add-addons <cluster-id> [flags]

Flags:
      --addons strings        addon keys to ADD (comma-separated; required — see 'addon list'). Existing addons are kept; use 'remove-addons' to remove one
  -h, --help                  help for add-addons
      --version stringArray   pin an addon to a version, addon=version (repeatable; see 'addon versions <addon>'). Only the named addons are re-pinned

Global Flags:
      --config string   config file (default is $HOME/.fm/config.yaml)
  -d, --debug           enable debug/verbose output
      --no-color        disable colored output
  -o, --output string   output format: table, json, yaml, wide (default "table")
  -q, --quiet           suppress non-essential output
      --tenant string   tenant ID to operate on (overrides the active/default tenant; also FM_TENANT)

fm kubernetes cluster addons ​

text
Show, per addon, the version the cluster is PINNED to and the version the platform
last confirmed it APPLIED, in the platform's order: the current selection first,
then any addon still being removed.

The applied version lags the pin while a change converges, so the two are always
shown together. STATE and PINNED STATUS are shown exactly as the platform reports
them; a pin whose status is deprecated or eol gets a warning — the cluster keeps
running it, but move the pin with 'fm kubernetes cluster pin-addons'.

Examples:
  fm kubernetes cluster addons <cluster-id>
  fm kubernetes cluster addons <cluster-id> -o json

Usage:
  fm kubernetes cluster addons <cluster-id> [flags]

Flags:
  -h, --help   help for addons

Global Flags:
      --config string   config file (default is $HOME/.fm/config.yaml)
  -d, --debug           enable debug/verbose output
      --no-color        disable colored output
  -o, --output string   output format: table, json, yaml, wide (default "table")
  -q, --quiet           suppress non-essential output
      --tenant string   tenant ID to operate on (overrides the active/default tenant; also FM_TENANT)

fm kubernetes cluster create ​

text
Create a managed Kubernetes cluster with an initial node pool.

--version, --tier and --region are optional; when omitted the server applies its
defaults (discover valid values with 'fm kubernetes version list' / 'tier list').

Addons: by default the server applies the catalog's default addons. Use --addons
to select an explicit set, or --no-addons to create the cluster with none. An
addon may need outbound HTTPS from your worker nodes to the public registry its
upstream images come from; 'fm kubernetes addon list' shows an addon's
prerequisites in its DESCRIPTION.

Addon versions: each addon gets its recommended version unless you pin one with
--addon-version addon=version (repeatable). List an addon's pinnable versions with
'fm kubernetes addon versions <addon>' and send one back exactly as listed. Every
addon you pin must be one the cluster gets: those named in --addons, or the
catalog defaults when --addons is omitted. (--version is the Kubernetes version.)

Tags: --tag key=value (repeatable) sets the cluster's resource tags — your own
metadata for search and filtering, never applied to the cluster or its nodes. The
tenant's default tags are merged in (a key you set wins). The initial node pool
gets a one-time COPY of the cluster's merged tags at create; later changes to the
cluster's tags do not reach it. Manage a pool's own tags with
'fm kubernetes node-pool tags set'.

Examples:
  fm kubernetes cluster create --name prod --vpc vpc-123 --subnet subnet-456 --node-flavor k8s.gp1.medium
  # external-dns publishes hostnames to your Frostmoln DNS zones
  fm kubernetes cluster create --name prod --vpc vpc-123 --subnet subnet-456 \
    --node-flavor k8s.gp1.large --node-count 3 --tier production --version 1.35 \
    --addons external-dns --addon-version external-dns=<version>
  # <version>: one listed by 'fm kubernetes addon versions external-dns'

Usage:
  fm kubernetes cluster create [flags]

Flags:
      --addon-version stringArray   pin an addon to a version, addon=version (repeatable; see 'addon versions <addon>'). An addon not named gets its recommended version
      --addons strings              explicit addon keys (comma-separated; see 'addon list'). Omit for catalog defaults
  -h, --help                        help for create
      --name string                 cluster name (required)
      --no-addons                   create the cluster with no addons (mutually exclusive with --addons and --addon-version)
      --no-wait                     return immediately instead of waiting for the cluster to become ready
      --node-count int              number of nodes in the initial node pool (default 1)
      --node-flavor string          flavor ID for the initial node pool (required, e.g. k8s.gp1.medium — see 'flavor list')
      --node-pool-name string       name for the initial node pool (server-generated when empty)
      --region string               region ID (server default when empty)
      --subnet string               subnet ID (required)
      --tag strings                 resource tag in key=value format (repeatable). The initial node pool gets a one-time copy of the cluster's merged tags
      --tier string                 control-plane tier key (server default when empty — see 'tier list')
      --version string              Kubernetes version (server default when empty — see 'version list')
      --vpc string                  VPC ID (required)

Global Flags:
      --config string   config file (default is $HOME/.fm/config.yaml)
  -d, --debug           enable debug/verbose output
      --no-color        disable colored output
  -o, --output string   output format: table, json, yaml, wide (default "table")
  -q, --quiet           suppress non-essential output
      --tenant string   tenant ID to operate on (overrides the active/default tenant; also FM_TENANT)

fm kubernetes cluster delete ​

text
Delete a managed Kubernetes cluster and all of its node pools.

Usage:
  fm kubernetes cluster delete <cluster-id> [flags]

Flags:
      --force   skip the confirmation prompt
  -h, --help    help for delete
      --wait    wait for the deletion to complete before returning

Global Flags:
      --config string   config file (default is $HOME/.fm/config.yaml)
  -d, --debug           enable debug/verbose output
      --no-color        disable colored output
  -o, --output string   output format: table, json, yaml, wide (default "table")
  -q, --quiet           suppress non-essential output
      --tenant string   tenant ID to operate on (overrides the active/default tenant; also FM_TENANT)

fm kubernetes cluster get ​

text
Get detailed information about a specific Kubernetes cluster.

Usage:
  fm kubernetes cluster get <cluster-id> [flags]

Flags:
  -h, --help   help for get

Global Flags:
      --config string   config file (default is $HOME/.fm/config.yaml)
  -d, --debug           enable debug/verbose output
      --no-color        disable colored output
  -o, --output string   output format: table, json, yaml, wide (default "table")
  -q, --quiet           suppress non-essential output
      --tenant string   tenant ID to operate on (overrides the active/default tenant; also FM_TENANT)

fm kubernetes cluster kubeconfig ​

text
Fetch the kubeconfig for a Kubernetes cluster.

By default the raw kubeconfig YAML is written to stdout (redirect it or use
--file). With -o json|yaml the full {endpoint, kubeconfig} object is printed.
The kubeconfig is only available once the cluster is running.

An enclave cluster's API server has no route from your machine (ADR-0103), so it
is reached through a local tunnel. Two flags write one:

  --exec   kubectl starts the tunnel itself, on demand, via an 'fm' credential
           plugin. One terminal, and the file holds no key — the credential is
           fetched per call. Needs kubernetes:write AND sessions:write. The local
           port is derived from the cluster id so two clusters practically never
           share one. If two of yours do, they are stuck with it — the derivation
           is deterministic — and the symptom is a certificate error from the
           second cluster. Pin one of them with --exec=<port>.
  --proxy  the file points at a tunnel you run yourself with
           'fm kubernetes cluster proxy' in a second terminal.

Examples:
  fm kubernetes cluster kubeconfig <cluster-id> > ~/.kube/frostmoln
  fm kubernetes cluster kubeconfig <cluster-id> --file ./kubeconfig.yaml
  fm kubernetes cluster kubeconfig <cluster-id> --exec --file ./kubeconfig
  KUBECONFIG=$(fm kubernetes cluster kubeconfig <cluster-id> --file /dev/stdout) kubectl get nodes

Usage:
  fm kubernetes cluster kubeconfig <cluster-id> [flags]

Flags:
      --exec int[=0]        write a kubeconfig that starts the proxy tunnel itself via an 'fm' credential plugin, so kubectl needs no second terminal (--exec, or --exec=<port> to pin a local port)
      --file string         write the kubeconfig to this file instead of stdout
  -h, --help                help for kubeconfig
      --proxy int[=46443]   point the kubeconfig at a local 'fm kubernetes cluster proxy' tunnel instead of the cluster endpoint (--proxy, or --proxy=<port> to match a non-default proxy port) (default 46443)

Global Flags:
      --config string   config file (default is $HOME/.fm/config.yaml)
  -d, --debug           enable debug/verbose output
      --no-color        disable colored output
  -o, --output string   output format: table, json, yaml, wide (default "table")
  -q, --quiet           suppress non-essential output
      --tenant string   tenant ID to operate on (overrides the active/default tenant; also FM_TENANT)

fm kubernetes cluster list ​

text
List all managed Kubernetes clusters in the active tenant.

--tag key=value (repeatable) lists only the clusters carrying EVERY given tag with
exactly that value; key= matches a tag whose value is empty.

Examples:
  fm kubernetes cluster list
  fm kubernetes cluster list --tag env=prod --tag team=platform

Usage:
  fm kubernetes cluster list [flags]

Flags:
  -h, --help          help for list
      --tag strings   only clusters with this tag, key=value (repeatable; every one must match)

Global Flags:
      --config string   config file (default is $HOME/.fm/config.yaml)
  -d, --debug           enable debug/verbose output
      --no-color        disable colored output
  -o, --output string   output format: table, json, yaml, wide (default "table")
  -q, --quiet           suppress non-essential output
      --tenant string   tenant ID to operate on (overrides the active/default tenant; also FM_TENANT)

fm kubernetes cluster pin-addons ​

text
Move the version pin of addons already selected on a running cluster, without
changing which addons it has.

Name each addon=version with --version (repeatable). Only those addons are
re-pinned; every other addon keeps its current pin. Send a version string exactly
as 'fm kubernetes addon versions <addon>' lists it.

NOT IMMEDIATE: the pin is recorded and applied by the reconciliation the
accepted change starts, typically within minutes. If that reconciliation cannot
be started the platform says so in a notice and the pin waits for the next
scheduled one instead. 'fm kubernetes cluster addons <cluster-id>' shows the
pinned and the applied version side by side while it converges.

Examples:
  fm kubernetes cluster pin-addons <cluster-id> --version external-dns=<version>
  # <version>: one listed by 'fm kubernetes addon versions external-dns'

Usage:
  fm kubernetes cluster pin-addons <cluster-id> [flags]

Flags:
  -h, --help                  help for pin-addons
      --version stringArray   pin an addon to a version, addon=version (repeatable; see 'addon versions <addon>'). Only the named addons are re-pinned (required)

Global Flags:
      --config string   config file (default is $HOME/.fm/config.yaml)
  -d, --debug           enable debug/verbose output
      --no-color        disable colored output
  -o, --output string   output format: table, json, yaml, wide (default "table")
  -q, --quiet           suppress non-essential output
      --tenant string   tenant ID to operate on (overrides the active/default tenant; also FM_TENANT)

fm kubernetes cluster proxy ​

text
Forward a local TCP port to a managed cluster's Kubernetes API server over a
secure session — no public IP, no open port, and no VPN.

The control plane is private (ADR-0103): its API server has no route from the
internet, and this session is the customer-facing way to reach it. The target is
resolved server-side from the cluster you own — there is nothing to point at a
host or a port, by design.

Leave this running and use a second terminal:

  fm kubernetes cluster kubeconfig <cluster-id> --proxy --file ./kubeconfig
  KUBECONFIG=./kubeconfig kubectl get nodes

To skip the second terminal entirely, write the kubeconfig with --exec instead:
kubectl then starts this tunnel itself the first time it needs one.

The local port defaults to 46443, which is what --proxy writes into the
kubeconfig. If you override it here, pass the same port to --proxy.

Sessions are time-limited by the platform: they end after 10 minutes idle or 60
minutes in total, and they do not survive their connection — there is no resume.
If the tunnel drops, run this command again. A dropped tunnel says nothing about
the health of your cluster.

While the proxy runs, 127.0.0.1:<port> is reachable by any process on this
machine, including ones that cannot read your kubeconfig. Such a process cannot
use your cluster credentials — those stay in the kubeconfig and are verified by
the API server, not by this tunnel — but it can read what the API server serves
anonymously, which includes the cluster CA and the server version. Stop the
proxy when you are done, and prefer a machine you trust.

Usage:
  fm kubernetes cluster proxy <cluster-id> [local-port] [flags]

Examples:
  # Default: listen on 127.0.0.1:46443
  fm kubernetes cluster proxy <cluster-id>

  # A different local port (pass the same one to --proxy)
  fm kubernetes cluster proxy <cluster-id> 15443

Flags:
  -h, --help   help for proxy

Global Flags:
      --config string   config file (default is $HOME/.fm/config.yaml)
  -d, --debug           enable debug/verbose output
      --no-color        disable colored output
  -o, --output string   output format: table, json, yaml, wide (default "table")
  -q, --quiet           suppress non-essential output
      --tenant string   tenant ID to operate on (overrides the active/default tenant; also FM_TENANT)

fm kubernetes cluster remove-addons ​

text
Remove catalog addons from an already-running Kubernetes cluster.

DESTRUCTIVE: this DELETES the objects the addon installed in your cluster. Name
the keys you want removed; everything else the cluster has is kept for you.

NOT IMMEDIATE: the request records the new set and returns; the accepted change
starts its own reconciliation, which typically deletes the objects within
minutes. If that reconciliation cannot be started the platform says so in a
notice and the deletion waits for the next scheduled one instead.

NOT EVERY CLUSTER CAN: removal reaches your cluster through the control-plane
image its VMs booted, and images are immutable — so a cluster created before the
platform could remove an addon is refused, and says so. Adding is unaffected.

WHAT IS LEFT BEHIND, because the platform will not delete it for you: the
addon's namespace, and any CustomResourceDefinition, StorageClass or CSIDriver
it created, together with anything YOU put in that namespace. For ExternalDNS
that means the 'external-dns' namespace and the DNS-write credential Secret you
created in it both survive — the platform does not touch credential material you
own, so removing it is yours to do. The DNS records ExternalDNS published also
survive and are no longer managed by anything: if you later delete the load
balancer a record points at, that address can be reallocated while the record
still resolves to it. Re-selecting the addon on the same cluster re-adopts its
own records and resumes managing them.

For External Secrets Operator the CustomResourceDefinitions survive, and every
ExternalSecret keeps a cleanup finalizer that only the ESO controller removes.
Once the controller is gone, an ExternalSecret left in the cluster cannot finish
deleting, and neither can a namespace that contains one. Under the default
creationPolicy: Owner, deleting an ExternalSecret also deletes the Secret it
synced; to keep one, set creationPolicy: Orphan and remove the Secret's owner
reference first, then delete your ExternalSecrets before removing the add-on.
Removing external-secrets therefore asks for confirmation, and needs --yes when
stdin is not a terminal.

Examples:
  fm kubernetes cluster remove-addons <cluster-id> --addons external-dns
  fm kubernetes cluster remove-addons <cluster-id> --addons external-secrets --yes

Usage:
  fm kubernetes cluster remove-addons <cluster-id> [flags]

Flags:
      --addons strings        addon keys to REMOVE (comma-separated; required). DELETES the objects they installed; the addon's namespace and anything you created in it are kept
  -h, --help                  help for remove-addons
      --version stringArray   pin an addon to a version, addon=version (repeatable; see 'addon versions <addon>'). Only the named addons are re-pinned (a kept addon only)
      --yes                   skip the external-secrets removal confirmation (non-interactive use)

Global Flags:
      --config string   config file (default is $HOME/.fm/config.yaml)
  -d, --debug           enable debug/verbose output
      --no-color        disable colored output
  -o, --output string   output format: table, json, yaml, wide (default "table")
  -q, --quiet           suppress non-essential output
      --tenant string   tenant ID to operate on (overrides the active/default tenant; also FM_TENANT)

fm kubernetes cluster rename ​

text
Rename a managed Kubernetes cluster.

Usage:
  fm kubernetes cluster rename <cluster-id> [flags]

Flags:
  -h, --help          help for rename
      --name string   new cluster name (required)

Global Flags:
      --config string   config file (default is $HOME/.fm/config.yaml)
  -d, --debug           enable debug/verbose output
      --no-color        disable colored output
  -o, --output string   output format: table, json, yaml, wide (default "table")
  -q, --quiet           suppress non-essential output
      --tenant string   tenant ID to operate on (overrides the active/default tenant; also FM_TENANT)

fm kubernetes cluster tags ​

text
Read and replace a cluster's resource tags

Usage:
  fm kubernetes cluster tags [command]

Aliases:
  tags, tag

Available Commands:
  get         Show a cluster's resource tags
  set         Replace a cluster's resource tags

Flags:
  -h, --help   help for tags

Global Flags:
      --config string   config file (default is $HOME/.fm/config.yaml)
  -d, --debug           enable debug/verbose output
      --no-color        disable colored output
  -o, --output string   output format: table, json, yaml, wide (default "table")
  -q, --quiet           suppress non-essential output
      --tenant string   tenant ID to operate on (overrides the active/default tenant; also FM_TENANT)

Use "fm kubernetes cluster tags [command] --help" for more information about a command.
fm kubernetes cluster tags get ​
text
Show a cluster's resource tags

Usage:
  fm kubernetes cluster tags get <cluster-id> [flags]

Flags:
  -h, --help   help for get

Global Flags:
      --config string   config file (default is $HOME/.fm/config.yaml)
  -d, --debug           enable debug/verbose output
      --no-color        disable colored output
  -o, --output string   output format: table, json, yaml, wide (default "table")
  -q, --quiet           suppress non-essential output
      --tenant string   tenant ID to operate on (overrides the active/default tenant; also FM_TENANT)
fm kubernetes cluster tags set ​
text
Replace a cluster's resource tags in place with exactly the given set
(replace semantics — any tag not listed is removed). Nothing else about the
cluster changes, and the running cluster is not touched.

The set you pass IS the resulting set. To ADD one tag without disturbing the
others, read the current ones first with 'fm kubernetes cluster tags get' and pass
them all back. Use --clear to remove every tag. The tenant's default tags are not
re-applied.

The cluster's node pools are NOT changed: the initial pool got a copy of the
cluster's tags once, at create. Manage a pool's tags with
'fm kubernetes node-pool tags set'.

Keys beginning frostmoln_ or frostmoln- (any letter case) are reserved and
refused. At most 32 tags; a key is 1-64 bytes, a value at most 256 bytes.

Examples:
  fm kubernetes cluster tags set k8s-123 --tag env=prod --tag owner=team-a
  fm kubernetes cluster tags set k8s-123 --clear

Usage:
  fm kubernetes cluster tags set <cluster-id> --tag <key=value> [--tag <key=value> ...] [flags]

Flags:
      --clear         remove ALL tags (mutually exclusive with --tag)
  -h, --help          help for set
      --tag strings   tag in key=value format (repeatable; replace semantics)

Global Flags:
      --config string   config file (default is $HOME/.fm/config.yaml)
  -d, --debug           enable debug/verbose output
      --no-color        disable colored output
  -o, --output string   output format: table, json, yaml, wide (default "table")
  -q, --quiet           suppress non-essential output
      --tenant string   tenant ID to operate on (overrides the active/default tenant; also FM_TENANT)

fm kubernetes flavor ​

text
List available node flavors (instance sizes) for Kubernetes clusters, or get one by ID.

Usage:
  fm kubernetes flavor [command]

Aliases:
  flavor, flavors

Available Commands:
  get         Get node flavor details
  list        List node flavors

Flags:
  -h, --help   help for flavor

Global Flags:
      --config string   config file (default is $HOME/.fm/config.yaml)
  -d, --debug           enable debug/verbose output
      --no-color        disable colored output
  -o, --output string   output format: table, json, yaml, wide (default "table")
  -q, --quiet           suppress non-essential output
      --tenant string   tenant ID to operate on (overrides the active/default tenant; also FM_TENANT)

Use "fm kubernetes flavor [command] --help" for more information about a command.

fm kubernetes flavor get ​

text
Get detailed information about a specific Kubernetes node flavor.

Usage:
  fm kubernetes flavor get <flavor-id> [flags]

Flags:
  -h, --help   help for get

Global Flags:
      --config string   config file (default is $HOME/.fm/config.yaml)
  -d, --debug           enable debug/verbose output
      --no-color        disable colored output
  -o, --output string   output format: table, json, yaml, wide (default "table")
  -q, --quiet           suppress non-essential output
      --tenant string   tenant ID to operate on (overrides the active/default tenant; also FM_TENANT)

fm kubernetes flavor list ​

text
List node flavors

Usage:
  fm kubernetes flavor list [flags]

Flags:
  -h, --help   help for list

Global Flags:
      --config string   config file (default is $HOME/.fm/config.yaml)
  -d, --debug           enable debug/verbose output
      --no-color        disable colored output
  -o, --output string   output format: table, json, yaml, wide (default "table")
  -q, --quiet           suppress non-essential output
      --tenant string   tenant ID to operate on (overrides the active/default tenant; also FM_TENANT)

fm kubernetes node-pool ​

text
Manage node pools for a Kubernetes cluster.

Usage:
  fm kubernetes node-pool [command]

Aliases:
  node-pool, node-pools, nodepool, np

Available Commands:
  create      Create a node pool
  delete      Delete a node pool
  get         Get node pool details
  list        List a cluster's node pools
  scale       Scale a node pool
  tags        Read and replace a node pool's resource tags (not node labels)

Flags:
  -h, --help   help for node-pool

Global Flags:
      --config string   config file (default is $HOME/.fm/config.yaml)
  -d, --debug           enable debug/verbose output
      --no-color        disable colored output
  -o, --output string   output format: table, json, yaml, wide (default "table")
  -q, --quiet           suppress non-essential output
      --tenant string   tenant ID to operate on (overrides the active/default tenant; also FM_TENANT)

Use "fm kubernetes node-pool [command] --help" for more information about a command.

fm kubernetes node-pool create ​

text
Add a node pool to a Kubernetes cluster.

--tag key=value (repeatable) sets the pool's resource tags — your own metadata for
search and filtering, not Kubernetes node labels. The tenant's default tags are
merged in (a key you set wins). A new pool does not inherit the cluster's tags.

Example:
  fm kubernetes node-pool create <cluster-id> --flavor k8s.gp1.large --node-count 3 --name workers --tag env=prod

Usage:
  fm kubernetes node-pool create <cluster-id> [flags]

Flags:
      --flavor string    flavor ID (required, e.g. k8s.gp1.large — see 'flavor list')
  -h, --help             help for create
      --name string      node pool name (server-generated when empty)
      --no-wait          return immediately instead of waiting for the pool to become active
      --node-count int   number of nodes (default 1)
      --tag strings      resource tag in key=value format (repeatable; not a node label)

Global Flags:
      --config string   config file (default is $HOME/.fm/config.yaml)
  -d, --debug           enable debug/verbose output
      --no-color        disable colored output
  -o, --output string   output format: table, json, yaml, wide (default "table")
  -q, --quiet           suppress non-essential output
      --tenant string   tenant ID to operate on (overrides the active/default tenant; also FM_TENANT)

fm kubernetes node-pool delete ​

text
Delete a node pool from a Kubernetes cluster.

Usage:
  fm kubernetes node-pool delete <cluster-id> <pool-id> [flags]

Flags:
      --force   skip the confirmation prompt
  -h, --help    help for delete
      --wait    wait for the deletion to complete before returning

Global Flags:
      --config string   config file (default is $HOME/.fm/config.yaml)
  -d, --debug           enable debug/verbose output
      --no-color        disable colored output
  -o, --output string   output format: table, json, yaml, wide (default "table")
  -q, --quiet           suppress non-essential output
      --tenant string   tenant ID to operate on (overrides the active/default tenant; also FM_TENANT)

fm kubernetes node-pool get ​

text
Get detailed information about a specific node pool.

Usage:
  fm kubernetes node-pool get <cluster-id> <pool-id> [flags]

Flags:
  -h, --help   help for get

Global Flags:
      --config string   config file (default is $HOME/.fm/config.yaml)
  -d, --debug           enable debug/verbose output
      --no-color        disable colored output
  -o, --output string   output format: table, json, yaml, wide (default "table")
  -q, --quiet           suppress non-essential output
      --tenant string   tenant ID to operate on (overrides the active/default tenant; also FM_TENANT)

fm kubernetes node-pool list ​

text
List all node pools for a Kubernetes cluster.

--tag key=value (repeatable) lists only the pools carrying EVERY given resource tag
with exactly that value; key= matches a tag whose value is empty. Resource tags
only — never Kubernetes node labels.

Usage:
  fm kubernetes node-pool list <cluster-id> [flags]

Flags:
  -h, --help          help for list
      --tag strings   only pools with this resource tag, key=value (repeatable; every one must match)

Global Flags:
      --config string   config file (default is $HOME/.fm/config.yaml)
  -d, --debug           enable debug/verbose output
      --no-color        disable colored output
  -o, --output string   output format: table, json, yaml, wide (default "table")
  -q, --quiet           suppress non-essential output
      --tenant string   tenant ID to operate on (overrides the active/default tenant; also FM_TENANT)

fm kubernetes node-pool scale ​

text
Change the number of nodes in a node pool.

Example:
  fm kubernetes node-pool scale <cluster-id> <pool-id> --node-count 5

Usage:
  fm kubernetes node-pool scale <cluster-id> <pool-id> [flags]

Flags:
  -h, --help             help for scale
      --no-wait          return immediately instead of waiting for the scale to complete
      --node-count int   target number of nodes (required)

Global Flags:
      --config string   config file (default is $HOME/.fm/config.yaml)
  -d, --debug           enable debug/verbose output
      --no-color        disable colored output
  -o, --output string   output format: table, json, yaml, wide (default "table")
  -q, --quiet           suppress non-essential output
      --tenant string   tenant ID to operate on (overrides the active/default tenant; also FM_TENANT)

fm kubernetes node-pool tags ​

text
Read and replace a node pool's resource tags (not node labels)

Usage:
  fm kubernetes node-pool tags [command]

Aliases:
  tags, tag

Available Commands:
  get         Show a node pool's resource tags
  set         Replace a node pool's resource tags

Flags:
  -h, --help   help for tags

Global Flags:
      --config string   config file (default is $HOME/.fm/config.yaml)
  -d, --debug           enable debug/verbose output
      --no-color        disable colored output
  -o, --output string   output format: table, json, yaml, wide (default "table")
  -q, --quiet           suppress non-essential output
      --tenant string   tenant ID to operate on (overrides the active/default tenant; also FM_TENANT)

Use "fm kubernetes node-pool tags [command] --help" for more information about a command.
fm kubernetes node-pool tags get ​
text
Show a node pool's resource tags

Usage:
  fm kubernetes node-pool tags get <cluster-id> <pool-id> [flags]

Flags:
  -h, --help   help for get

Global Flags:
      --config string   config file (default is $HOME/.fm/config.yaml)
  -d, --debug           enable debug/verbose output
      --no-color        disable colored output
  -o, --output string   output format: table, json, yaml, wide (default "table")
  -q, --quiet           suppress non-essential output
      --tenant string   tenant ID to operate on (overrides the active/default tenant; also FM_TENANT)
fm kubernetes node-pool tags set ​
text
Replace a node pool's resource tags in place with exactly the given set
(replace semantics — any tag not listed is removed). Resource tags are your own
metadata; they are not Kubernetes node labels, and changing them touches no node.

The set you pass IS the resulting set. To ADD one tag without disturbing the
others, read the current ones first with 'fm kubernetes node-pool tags get' and
pass them all back. Use --clear to remove every tag.

This is how the initial node pool's tags are managed: it got a one-time copy of
the cluster's tags at create, and later cluster tag changes do not reach it.

Keys beginning frostmoln_ or frostmoln- (any letter case) are reserved and
refused. At most 32 tags; a key is 1-64 bytes, a value at most 256 bytes.

Examples:
  fm kubernetes node-pool tags set k8s-123 np-456 --tag env=prod
  fm kubernetes node-pool tags set k8s-123 np-456 --clear

Usage:
  fm kubernetes node-pool tags set <cluster-id> <pool-id> --tag <key=value> [--tag <key=value> ...] [flags]

Flags:
      --clear         remove ALL tags (mutually exclusive with --tag)
  -h, --help          help for set
      --tag strings   tag in key=value format (repeatable; replace semantics)

Global Flags:
      --config string   config file (default is $HOME/.fm/config.yaml)
  -d, --debug           enable debug/verbose output
      --no-color        disable colored output
  -o, --output string   output format: table, json, yaml, wide (default "table")
  -q, --quiet           suppress non-essential output
      --tenant string   tenant ID to operate on (overrides the active/default tenant; also FM_TENANT)

fm kubernetes tier ​

text
List available control-plane tiers for Kubernetes clusters.

Usage:
  fm kubernetes tier [command]

Aliases:
  tier, tiers

Available Commands:
  list        List control-plane tiers

Flags:
  -h, --help   help for tier

Global Flags:
      --config string   config file (default is $HOME/.fm/config.yaml)
  -d, --debug           enable debug/verbose output
      --no-color        disable colored output
  -o, --output string   output format: table, json, yaml, wide (default "table")
  -q, --quiet           suppress non-essential output
      --tenant string   tenant ID to operate on (overrides the active/default tenant; also FM_TENANT)

Use "fm kubernetes tier [command] --help" for more information about a command.

fm kubernetes tier list ​

text
List control-plane tiers

Usage:
  fm kubernetes tier list [flags]

Flags:
  -h, --help   help for list

Global Flags:
      --config string   config file (default is $HOME/.fm/config.yaml)
  -d, --debug           enable debug/verbose output
      --no-color        disable colored output
  -o, --output string   output format: table, json, yaml, wide (default "table")
  -q, --quiet           suppress non-essential output
      --tenant string   tenant ID to operate on (overrides the active/default tenant; also FM_TENANT)

fm kubernetes version ​

text
List available Kubernetes versions.

Usage:
  fm kubernetes version [command]

Aliases:
  version, versions

Available Commands:
  list        List Kubernetes versions

Flags:
  -h, --help   help for version

Global Flags:
      --config string   config file (default is $HOME/.fm/config.yaml)
  -d, --debug           enable debug/verbose output
      --no-color        disable colored output
  -o, --output string   output format: table, json, yaml, wide (default "table")
  -q, --quiet           suppress non-essential output
      --tenant string   tenant ID to operate on (overrides the active/default tenant; also FM_TENANT)

Use "fm kubernetes version [command] --help" for more information about a command.

fm kubernetes version list ​

text
List Kubernetes versions

Usage:
  fm kubernetes version list [flags]

Flags:
  -h, --help   help for list

Global Flags:
      --config string   config file (default is $HOME/.fm/config.yaml)
  -d, --debug           enable debug/verbose output
      --no-color        disable colored output
  -o, --output string   output format: table, json, yaml, wide (default "table")
  -q, --quiet           suppress non-essential output
      --tenant string   tenant ID to operate on (overrides the active/default tenant; also FM_TENANT)

fm kubernetes workload-identity ​

text
Manage Workload Identity Federation bindings (ADR-0095).

A binding maps a Kubernetes (namespace, serviceAccount) in one of your managed
clusters to a least-privilege Frostmoln grant. A pod running as that
ServiceAccount can then exchange its projected token for a short-lived, scoped
Frostmoln credential — no long-lived secret in the pod.

The grant is either flat scopes on the binding, or an access policy attached to
it with "fm iam policy attach --type workload_identity" (directly or through a
group). Prefer the policy: it can name individual targets, add constraints and
deny explicitly, none of which a flat scope can express.

Usage:
  fm kubernetes workload-identity [command]

Aliases:
  workload-identity, wi

Available Commands:
  binding     Manage workload identity bindings
  token       Exchange a ServiceAccount token for a Frostmoln workload token (debug)

Flags:
  -h, --help   help for workload-identity

Global Flags:
      --config string   config file (default is $HOME/.fm/config.yaml)
  -d, --debug           enable debug/verbose output
      --no-color        disable colored output
  -o, --output string   output format: table, json, yaml, wide (default "table")
  -q, --quiet           suppress non-essential output
      --tenant string   tenant ID to operate on (overrides the active/default tenant; also FM_TENANT)

Use "fm kubernetes workload-identity [command] --help" for more information about a command.

fm kubernetes workload-identity binding ​

text
Manage workload identity bindings

Usage:
  fm kubernetes workload-identity binding [command]

Aliases:
  binding, bindings

Available Commands:
  create      Create a workload identity binding
  delete      Delete a workload identity binding
  list        List workload identity bindings

Flags:
  -h, --help   help for binding

Global Flags:
      --config string   config file (default is $HOME/.fm/config.yaml)
  -d, --debug           enable debug/verbose output
      --no-color        disable colored output
  -o, --output string   output format: table, json, yaml, wide (default "table")
  -q, --quiet           suppress non-essential output
      --tenant string   tenant ID to operate on (overrides the active/default tenant; also FM_TENANT)

Use "fm kubernetes workload-identity binding [command] --help" for more information about a command.
fm kubernetes workload-identity binding create ​
text
Create a workload identity binding.

The binding's grant is either flat --scope values or an access policy attached to
it with "fm iam policy attach". Scopes must be explicit and least-privilege:
wildcards ("*" or "<resource>:*") are rejected for workload identities.

Omit --scope entirely to create a POLICY-GRANTED binding. Prefer that — a flat
scope grants a verb across every resource of a service, while a policy names
individual targets, adds constraints and can deny explicitly. Such a binding is
INERT until a policy is attached: with no grant at all the token exchange refuses
it rather than minting a credential that grants nothing.

Examples:
  fm kubernetes workload-identity binding create \
    --cluster <cluster-id> \
    --namespace default \
    --service-account my-app \
    --scope compute:read --scope storage:read

  # Policy-granted: create the binding, then attach a policy to it.
  fm kubernetes workload-identity binding create \
    --cluster <cluster-id> --namespace ops --service-account reaper
  fm iam policy attach <policy-id> --type workload_identity --id <binding-id>

Usage:
  fm kubernetes workload-identity binding create [flags]

Flags:
      --cluster string           managed cluster id the binding applies to (required)
  -h, --help                     help for create
      --namespace string         Kubernetes namespace (required)
      --scope strings            least-privilege scope (repeatable, e.g. compute:read); wildcards rejected. Omit for a policy-granted binding
      --service-account string   Kubernetes ServiceAccount name (required)

Global Flags:
      --config string   config file (default is $HOME/.fm/config.yaml)
  -d, --debug           enable debug/verbose output
      --no-color        disable colored output
  -o, --output string   output format: table, json, yaml, wide (default "table")
  -q, --quiet           suppress non-essential output
      --tenant string   tenant ID to operate on (overrides the active/default tenant; also FM_TENANT)
fm kubernetes workload-identity binding delete ​
text
Delete a workload identity binding

Usage:
  fm kubernetes workload-identity binding delete <id> [flags]

Flags:
      --force   skip confirmation prompt
  -h, --help    help for delete

Global Flags:
      --config string   config file (default is $HOME/.fm/config.yaml)
  -d, --debug           enable debug/verbose output
      --no-color        disable colored output
  -o, --output string   output format: table, json, yaml, wide (default "table")
  -q, --quiet           suppress non-essential output
      --tenant string   tenant ID to operate on (overrides the active/default tenant; also FM_TENANT)
fm kubernetes workload-identity binding list ​
text
List the current tenant's workload identity bindings.

Results are cursor-paginated: when the output includes a non-empty nextCursor,
pass it back with --cursor to fetch the next page.

Usage:
  fm kubernetes workload-identity binding list [flags]

Flags:
      --all              fetch all pages (auto-follow nextCursor)
      --cluster string   filter by cluster id
      --cursor string    opaque pagination cursor from a previous response's nextCursor
  -h, --help             help for list
      --limit int        maximum bindings per page

Global Flags:
      --config string   config file (default is $HOME/.fm/config.yaml)
  -d, --debug           enable debug/verbose output
      --no-color        disable colored output
  -o, --output string   output format: table, json, yaml, wide (default "table")
  -q, --quiet           suppress non-essential output
      --tenant string   tenant ID to operate on (overrides the active/default tenant; also FM_TENANT)

fm kubernetes workload-identity token ​

text
Debug/support helper: exchange a raw Kubernetes ServiceAccount JWT for a
short-lived Frostmoln workload token and print it.

Pods obtain this automatically via the injected in-guest helper; use this only to
troubleshoot a binding. The subject token is a live credential, so it is read
only from a file or stdin (never a command-line argument, which would leak it to
the process list and shell history):

  fm kubernetes workload-identity token --subject-token-file /var/run/secrets/.../token
  cat token.jwt | fm kubernetes workload-identity token --subject-token-file -

Usage:
  fm kubernetes workload-identity token [flags]

Flags:
  -h, --help                        help for token
      --subject-token-file string   read the ServiceAccount JWT from a file ("-" for stdin)

Global Flags:
      --config string   config file (default is $HOME/.fm/config.yaml)
  -d, --debug           enable debug/verbose output
      --no-color        disable colored output
  -o, --output string   output format: table, json, yaml, wide (default "table")
  -q, --quiet           suppress non-essential output
      --tenant string   tenant ID to operate on (overrides the active/default tenant; also FM_TENANT)