Skip to main content

Basic Usage

See all the available commands and their usage by running furyctl help or see the online version.

tip

Enable command tab autocompletion for furyctl on your shell (bash, zsh, fish are supported). See the instruction on how to enable it with furyctl completion --help

tip

You can follow the Kubernetes Fury Distribution Getting Started guides for cloud and on-premises installations.

Check KFD Compatibility matrix for the furyctl / KFD versions to use.

To install KFD, first identify the provider (here you can find the list of currently supported providers), then create a furyctl.yaml:

furyctl create config --kind <provider> --version <version> --name <cluster-name>

Decide what modules you want to use and customize your config file.

Then run:

furyctl apply

Basic Usage - New Projects

Basic usage of furyctl for a new project consists on the following steps:

  1. Creating a configuration file defining the required infrastructure, Kubernetes cluster details, and KFD modules configuration.
  2. Creating a cluster as defined in the configuration file.
  3. Destroying the cluster and its related resources.

1. Create a configuration file

furyctl provides a command that outputs a sample configuration file (by default called furyctl.yaml) with all the possible fields explained in comments.

furyctl configuration files have a kind that specifies what type of cluster will be created, for example the EKSCluster kind has all the parameters needed to create a KFD cluster using the EKS managed clusters from AWS.

You can also use the KFDDistribution kind to install the KFD distribution on top of an existing Kubernetes cluster or OnPremises kind to install a KFD cluster on VMs.

Additionally, the schema of the file is versioned with the apiVersion field, so when new features are introduced you can switch to a newer version of the configuration file structure.

To scaffold a configuration file to use as a starter, you use the following command:

furyctl create config --version v1.30.0 --kind "EKSCluster"
tip

You can pass some additional flags, like the schema (API) version of the configuration file or a different configuration file name.

See furyctl create config --help for more details.

Open the generated configuration file with your editor of choice and edit it according to your needs. You can follow the instructions included as comments in the file.

Once you have filled your configuration file, you can check that it's content is valid by running the following command:

furyctl validate config --config /path/to/your/furyctl.yaml
note

The --config flag is optional, set it if your configuration file is not named furyctl.yaml

2. Create a cluster

Requirements (EKSCluster):

  • AWS CLI
  • OpenVPN (when filling the vpn field in the configuration file)

In the previous step, you have created and validated a configuration file that defines the Kubernetes cluster and its surroundings, you can now proceed to actually creating the resources.

furyctl divides the cluster creation in four phases: infrastructure, kubernetes, distribution and plugins.

  1. The first phase, infrastructure, creates all the prerequisites needed to be able to create a cluster. For example, the VPC and its networks.
  2. The second phase, kubernetes, creates the actual Kubernetes clusters. For example, the EKS cluster and its node pools.
  3. The third phase, distribution, deploys KFD modules to the Kubernetes cluster.
  4. The fourth phase, plugins, installs Helm and Kustomize plugins into the cluster.
note

You will find these four phases when editing the furyctl.yaml file.

Just like you can validate that your configuration file is well-formed, furyctl let you check that you have all the needed dependencies (environment variables, binaries, etc.) before starting a cluster creation process.

To validate that your system has all the dependencies needed to create the cluster defined in your configuration file, run the following command:

furyctl validate dependencies

Last but not least, you can launch the creation of the resources defined in the configuration file by running the following command:

warning

You are about to create cloud resources that could have billing impact.

note

The cluster creation process, by default, will create a VPN in the infrastructure phase and connect your machine to it automatically before proceeding to the kubernetes phase.

furyctl create cluster --config /path/to/your/furyctl.yaml
tip

You can use the alias furyctl apply instead of furyctl create cluster.

note

The creation process will take a while.

🎉 Congratulations! You have created your production-grade Kubernetes Fury Cluster from scratch and it is now ready to go into battle.

3. Upgrade a cluster

note

This is a quick overview of the process. For a more complete documentation please see the universal upgrade guide.

Upgrading a cluster is a process that can be divided into two steps: upgrading the fury version and running the migrations (if present).

The first step consists in bringing the cluster up to date with the latest version of the Kubernetes Fury Distribution. This is done by:

  1. Identifying the target version to which upgrade to with:

    furyctl get upgrade-paths
  2. Bumping the version in the configuration file to the desired one.

  3. Upgrading the cluster:

furyctl apply --upgrade --config /path/to/your/furyctl.yaml

Once that is done, if you were also planning to move to a different configuration (e.g.: changing from logging type opensearch to loki), you can run the following command to run the migrations as usual:

furyctl apply --config /path/to/your/furyctl.yaml
warning

You must first upgrade the cluster using the old configuration (e.g.: logging type opensearch), update the configuration file to use the new type (e.g.: loki) and then run the command above.

3.1. Advanced upgrade options (OnPremises provider only)

You can also split nodes upgrade process into several steps, for example, you can upgrade the control plane nodes first:

furyctl apply --upgrade --config /path/to/your/furyctl.yaml --skip-nodes-upgrade

And then upgrade the worker nodes, one by one:

furyctl apply --upgrade --config /path/to/your/furyctl.yaml --upgrade-node workerNode1

At the end of the node upgrade process, a check is performed to ensure every pod is either Running or in a Completed state. You can specify a timeout for this check with the --pod-running-check-timeout flag or skip it with the --force pods-running-check flag.

4. Destroy a cluster

Destroying a cluster will run through the four phases mentioned above, in reverse order, starting from distribution.

To destroy a cluster created using furyctl and all its related resources, run the following command:

warning

You are about to run a destructive operation.

furyctl delete cluster --dry-run

Check that the dry-run output is what you expect and then run the command again without the --dry-run flag to actually delete all the resources.

tip

Notice the --dry-run flag, used to check what the command would do. This flag is available for other commands too.