provider-helm is a Crossplane Provider that enables deployment and management of Helm Releases on Kubernetes clusters typically provisioned by Crossplane, and has the following functionality:
- A
Releaseresource type to manage Helm Releases. - A managed resource controller that reconciles
Releaseobjects and manages Helm releases.
If you would like to install provider-helm without modifications, you may do so using the Crossplane CLI in a Kubernetes cluster where Crossplane is installed:
crossplane xpkg install provider xpkg.crossplane.io/crossplane-contrib/provider-helm:v0.20.0Then you will need to create a ProviderConfig that specifies the credentials to connect to the Kubernetes API. This is commonly done within a Composition by storing a kubeconfig into a secret that the ProviderConfig references. An example of this approach can be found in configuration-aws-eks.
An alternative, that will get you started quickly, is to reuse existing credentials from within the control plane.
First install provider-helm with additional configuration to bind its service account to an existing role in the cluster:
kubectl apply -f ./examples/provider-config/provider-incluster.yamlThen simply create a ProviderConfig that uses an InjectedIdentity source:
kubectl apply -f ./examples/provider-config/provider-config-incluster.yamlprovider-helm will then be installed and ready to use within the cluster. You can now create Release resources, such as sample release.yaml.
kubectl create -f examples/sample/release.yamlSee the design document.
Pre-requisite: A Kubernetes cluster with Crossplane installed
To run the provider-helm controller against your existing local cluster, simply run:
make runSince the controller is running outside of the local cluster, you need to make the API server accessible (on a separate terminal):
sudo kubectl proxy --port=8081Then we must prepare a ProviderConfig for the local cluster (assuming you are using kind for local development):
KUBECONFIG=$(kind get kubeconfig | sed -e 's|server:\s*.*$|server: http://localhost:8081|g') kubectl -n crossplane-system create secret generic cluster-config --from-literal=kubeconfig="${KUBECONFIG}" kubectl apply -f examples/provider-config/provider-config-with-secret.yamlNow you can create Release resources with this ProviderConfig, for example sample release.yaml.
kubectl create -f examples/sample/release.yaml