Quickstart for Helm-based Operators

A simple set of instructions that demonstrates the basics of setting up and running a Helm-based operator.

This guide walks through an example of building a simple nginx-operator powered by Helm using tools and libraries provided by the Operator SDK.

Prerequisites

  • Install operator-sdk and its prequisites.
  • Access to a Kubernetes v1.16.0+ cluster.
  • User authorized with cluster-admin permissions.

Quickstart Steps

Create a project

Create and change into a directory for your project. Then call operator-sdk init with the Helm plugin to initialize the base project layout:

  1. mkdir nginx-operator
  2. cd nginx-operator
  3. operator-sdk init --plugins=helm

Create an API

Create a simple nginx API using Helm’s built-in chart boilerplate (from helm create):

  1. operator-sdk create api --group demo --version v1 --kind Nginx

Build and push the operator image

Use the built-in Makefile targets to build and push your operator. Make sure to define IMG when you call make:

  1. make docker-build docker-push IMG=<some-registry>/<project-name>:<tag>

NOTE: To allow the cluster pull the image the repository needs to be set as public or you must configure an image pull secret.

Run the operator

Install the CRD and deploy the project to the cluster. Set IMG with make deploy to use the image you just pushed:

  1. make install
  2. make deploy IMG=<some-registry>/<project-name>:<tag>

Create a sample custom resource

Create a sample CR:

  1. kubectl apply -f config/samples/demo_v1_nginx.yaml

Watch for the CR to trigger the operator to deploy the nginx deployment and service:

  1. kubectl get all -l "app.kubernetes.io/instance=nginx-sample"

Clean up

Delete the CR to uninstall the release:

  1. kubectl delete -f config/samples/demo_v1_nginx.yaml

Use make undeploy to uninstall the operator and its CRDs:

  1. make undeploy

Next Steps

Read the tutorial for an in-depth walkthough of building a Helm operator.

Last modified August 28, 2020: doc: helm prequierements (#3777) (faa003ec)