Bundle Lifecycle
A bundle is an internal resource used for the orchestration of resources from git. When a GitRepo is scanned it will produce one or more bundles.
To demonstrate the life cycle of a Fleet bundle, we will use multi-cluster/helm as a case study.
- User will create a GitRepo that points to the multi-cluster/helm repository.
- The
gitjob-controller
will sync changes from the GitRepo and detect changes from the polling or webhook event. With every commit change, thegitjob-controller
will create a job that clones the git repository, reads content from the repo such asfleet.yaml
and other manifests, and creates the Fleet bundle.
Note: The job pod with the image name
rancher/tekton-utils
will be under the same namespace as the GitRepo.
- The
fleet-controller
then syncs changes from the bundle. According to the targets, thefleet-controller
will createBundleDeployment
resources, which are a combination of a bundle and a target cluster. - The
fleet-agent
will then pull theBundleDeployment
from the Fleet controlplane. The agent deploys bundle manifests as a Helm chart from theBundleDeployment
into the downstream clusters. - The
fleet-agent
will continue to monitor the application bundle and report statuses back in the following order: bundledeployment > bundle > GitRepo > cluster.
This diagram shows the different rendering stages a bundle goes through until deployment.
Examining the Bundle Lifecycle With the CLI
Several fleet CLI commands help with debugging bundles.
fleet apply
Apply renders a folder with Kubernetes resources, such as a Helm chart, manifests, or kustomize folders, into a Fleet bundle resource.
git clone https://github.com/rancher/fleet-test-data
cd fleet-test-data
fleet apply -n fleet-local -o bundle.yaml testbundle simple-chart/
More information on how to create bundles with fleet apply
can be found in the section on bundles.
fleet target
Target reads a bundle from a file and works with a live cluster to print out the bundledeployment
& content
resource, which fleetcontroller would create. It takes a namespace as an argument, so it can look in that namespace for e.g. cluster resources. It can also dump the data structure which is used during “targeting”, so decisions taken regarding labels and cluster names can be checked.
fleet deploy
Deploy takes the output of fleet target
, or a dumped bundledeployment/content resource and deploys it to a cluster, just like fleet-agent would. It supports a dry run mode, to print out the resources which would be created, instead of installing them with helm. Since the command doesn’t create the input resources, a running fleet-agent would likely garbage collect the deployment.
The deploy command can be used to bring bundles to air-gapped clusters.
Lifecycle CLI Example
git clone https://github.com/rancher/fleet-test-data
cd fleet-test-data
# for information about apply see https://fleet.rancher.io/bundle-add
fleet apply -n fleet-local -o bundle.yaml testbundle simple-chart/
fleet target --bundle-file bundle.yaml --list-inputs > bd.yaml
fleet deploy --input-file bd.yaml --dry-run