Skip to content

Operator to obtain OCP usage data and upload it to koku.

License

Notifications You must be signed in to change notification settings

project-koku/koku-metrics-operator

Repository files navigation

koku-metrics-operator

Build and Publish Images CI CI Manual

About

Operator to obtain OCP usage data and upload it to koku. The operator utilizes Golang to collect usage data from an OCP cluster installation.

You must have access to an OpenShift v.4.5+ cluster.

To submit an issue please visit https://issues.redhat.com/projects/COST/

Development

More specific documentation for local development can be found here.

This project was generated using Operator SDK. For a more in depth understanding of the structure of this repo, see the user guide that was used to generate it.

This project requires Go 1.13 or greater if you plan on running the operator locally. To get started developing against koku-metrics-operator first clone a local copy of the git repository.

git clone https://github.com/project-koku/koku-metrics-operator.git

Run the following command to prevent changes to config/manager/kustomization.yaml from being committed to the repo:

git update-index --assume-unchanged config/manager/kustomization.yaml

Now install and configure pre-commit. You can choose your installation steps for pre-commit by using the pre-commit installation instructions. Configure pre-commit for the local repository with the following command:

pre-commit install

Next, install the Operator SDK CLI using the following documentation. The operator is currently being built with the v0.19 release of the operator-sdk.

To build the manager binary you can execute the following make command:

make manager

To build the docker image you can execute the following make command:

make docker-build

Linting can be performed with the following make commands:

make fmt
make lint

Testing

Execute test by running the following make command:

make test

Deploying the Operator

First, create the koku-metrics-operator project. This is where we are going to deploy our Operator.

Before running the operator, the CRD must be registered with the Kubernetes apiserver:

make install

Once this is done, there are two ways to run the operator:

  • As Go program outside a cluster
  • As a Deployment inside a Kubernetes cluster

Configuring your test environment

Projects are scaffolded with unit tests that utilize the envtest library, which requires certain Kubernetes server binaries be present locally. Installation instructions can be found [here][env-test-setup].

1. Run locally outside the cluster

To run the operator locally execute the following command:

$ make run ENABLE_WEBHOOKS=false

2. Run as a Deployment inside the cluster

Build and push the image

Before building the operator image, ensure the generated Dockerfile references the base image you want. You can change the default "runner" image gcr.io/distroless/static:nonroot by replacing its tag with another, for example alpine:latest, and removing the USER: nonroot:nonroot directive.

To build and push the operator image, use the following make commands. Make sure to modify the IMG arg in the example below to reference a container repository that you have access to. You can obtain an account for storing containers at repository sites such quay.io or hub.docker.com. This example uses quay.

Build the image:

$ export USERNAME=<quay-username>

$ make docker-build IMG=quay.io/$USERNAME/koku-metrics-operator:v0.0.1

Push the image to a repository and make sure to set the repository to public:

$ make docker-push IMG=quay.io/$USERNAME/koku-metrics-operator:v0.0.1

Note: The name and tag of the image (IMG=<some-registry>/<project-name>:tag) in both the commands can also be set in the Makefile. Modify the line which has IMG ?= controller:latest to set your desired default image name.

Branches of the repository are built automaticaly here.

Deploy the operator

$ cd config/default/ && kustomize edit set namespace "koku-metrics-operator" && cd ../..

Run the following to deploy the operator. This will also install the RBAC manifests from config/rbac.

$ make deploy IMG=quay.io/$USERNAME/koku-metrics-operator:v0.0.1

You can optionally build, push, and deploy the image all at the same time by running:

$ make build-and-deploy IMG=quay.io/$USERNAME/koku-metrics-operator:v0.0.1

You can also optionally substitute the USER arg for the IMG arg above for the build & deploy commands. Run make help to see all of the options.

NOTE If you have enabled webhooks in your deployments, you will need to have cert-manager already installed in the cluster or make deploy will fail when creating the cert-manager resources.

If your current branch has been pushed to the origin repository then you can deploy your current branch with the following command.

$ make deploy-branch

Verify that the koku-metrics-operator is up and running:

$ oc get deployment

Create a KokuMetricsConfig CR

Create the CR with the default token authentication:

$ make deploy-cr

Create the CR with basic authentication specifying a username and password:

$ make deploy-cr USER=$YOUR_USERNAME PASS=$YOUR_PASSWORD AUTH=basic

Review the logs for the Koku Metrics operator.

Cleanup

$ oc delete -f config/samples/koku-metrics-cfg_v1beta1_kokumetricsconfig.yaml
$ oc delete deployments,service -l control-plane=controller-manager
$ oc delete role,rolebinding --all