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