Basic Usage
See all the available commands and their usage by running furyctl help
or see the online version.
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
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:
- Creating a configuration file defining the required infrastructure, Kubernetes cluster details, and KFD modules configuration.
- Creating a cluster as defined in the configuration file.
- 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"
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
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
.
- The first phase,
infrastructure
, creates all the prerequisites needed to be able to create a cluster. For example, the VPC and its networks. - The second phase,
kubernetes
, creates the actual Kubernetes clusters. For example, the EKS cluster and its node pools. - The third phase,
distribution
, deploys KFD modules to the Kubernetes cluster. - The fourth phase,
plugins
, installs Helm and Kustomize plugins into the cluster.
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:
You are about to create cloud resources that could have billing impact.
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
You can use the alias furyctl apply
instead of furyctl create cluster
.
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
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:
-
Identifying the target version to which upgrade to with:
furyctl get upgrade-paths
-
Bumping the version in the configuration file to the desired one.
-
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
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:
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.
Notice the --dry-run
flag, used to check what the command would do. This flag is available for other commands too.