/provider-helm

Crossplane Helm Provider

Primary LanguageGoApache License 2.0Apache-2.0

Build Actions Status GitHub release Go Report Card

provider-helm

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 Release resource type to manage Helm Releases.
  • A managed resource controller that reconciles Release objects and manages Helm releases.

Install

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.upbound.io/crossplane-contrib/provider-helm:v0.17.0

Then 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.

Quick start

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.yaml

Then simply create a ProviderConfig that uses an InjectedIdentity source:

kubectl apply -f ./examples/provider-config/provider-config-incluster.yaml

provider-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.yaml

Design

See the design document.

Developing locally

Pre-requisite: A Kubernetes cluster with Crossplane installed

To run the provider-helm controller against your existing local cluster, simply run:

make run

Since 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=8081

Then 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.yaml

Now you can create Release resources with this ProviderConfig, for example sample release.yaml.

kubectl create -f examples/sample/release.yaml