Plugins
The plugin phase provides a way to manage the installation of custom manifests and Helm charts with furyctl. This is intended to customize the cluster to your needs, for example you could add your CSI here. It's NOT intended as a way to install actual workload inside the cluster.
This phase gives you two ways to install additional resources, which can also be used together:
- Helm: you can specify a list of Helm chart and relative values files. 
furyctlwill executehelmusing those parameters. - Kustomize: if you prefer to have more control over the manifests, or if your required software does not provide a Helm chart, you can use a list of Kustomize projects, which will be built by 
furyctlto be applied inside the cluster as akappapplication. 
The plugins phase is defined inside the .spec of the configuration file, like so:
...
spec:
  ...
  plugins:
    kustomize:
    ...
    helm:
    ...
Helm
Installation
To create Helm releases within a SD cluster, you can create the .spec.plugins.helm object and use the following parameters:
repositories: a list of repositories to be added to Helm. For each repository you want to add, you must provide:name: the name of the repository.url: the url of the repository.
releases: a list of releases to be applied inside the SD cluster. For each of them, you can provide the following options:name: the name of the release.disableValidationOnInstall: disables runninghelm diffvalidation when installing the plugin, it will still be done when upgrading.set: If you want to provide single variables instead of avaluesfile, you can do so here. For each variable, you must provide:name: the name of the variable.value: the value of the variable.
namespace: the namespace in which to install the releasechart: the Chart to be used.values: a list of paths tovaluesfiles to be appliedversion: the version of the Chart to be used.
Uninstallation
To uninstall a helm-based plugin from the cluster, first remove it from the configuration file and then use the helm CLI to uninstall it from the cluster:
helm uninstall -n <namespace> <release name>
You can find the helm binary at the path <outdir>.furyctl/bin/helm/<version>/helm, where <outdir> is furyctl's outidr (by default the user's home directory if not specified).
Kustomize
Installation
To create Kustomize installation within a SD cluster, you can create the .spec.plugins.kustomize array and use the following parameters for each object you want to insert:
name: a user-friendly name for this Kustomize projectfolder: the path to a folder that contains the root Kustomize project
Uninstallation
To remove a kustomize-based plugin from the cluster, first remove it from the configuration file and then uninstall it with the kapp CLI:
kapp delete -n kube-system -a kfd-plugin-<name>
You can find the kapp binary at the path <outdir>.furyctl/bin/kapp/<version>/kapp, where <outdir> is furyctl's outidr (by default the user's home directory if not specified).
Example
As an example, if you wanted to insert the kubernetes-dashboard inside your SD cluster, you can use the following snippet inside the furyctl.yaml file:
...
spec:
  ...
  plugins:
    helm:
      repositories:
        - name: kubernetes-dashboard
          url: https://kubernetes.github.io/dashboard/
      releases:
        - name: kubernetes-dashboard
          namespace: kubernetes-dashboard
          chart: kubernetes-dashboard/kubernetes-dashboard
          values:
            - "/path/to/values.yaml"
Another example, this time using Kustomize, can be the installation of Local Path Provisioner. Create a kustomization.yaml inside a folder named plugins/local-path-provisioner at the same level as your furyctl.yaml file:
# plugins/local-path-provisioner/kustomization.yaml
---
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
  - https://github.com/rancher/local-path-provisioner/master/deploy
Use the following snippet inside furyctl.yaml:
...
spec:
  ...
  plugins:
    kustomize:
      - name: local-path-provisioner
        folder: "./plugins/local-path-provisioner"