Skip to content

deliveryhero/field-exporter

Repository files navigation

field-exporter

dh

Description

This controller is used to fill the gap in k8s-config-connector for exporting value from Config Connector managed resources into Secrets and ConfigMaps.

Currently supported Config Connector resources:

Here is an example resource for the controller:

apiVersion: gdp.deliveryhero.io/v1alpha1
kind: ResourceFieldExport
metadata:
  name: myapp-redis
spec:
  from:
    apiVersion: redis.cnrm.cloud.google.com/v1beta1
    kind: RedisInstance
    name: myapp-redis
  outputs:
    - key: endpoint
      path: .status.host
    - key: port
      path: .status.port
  requiredFields:
    statusConditions:
      - status: "True"
        type: Ready
  to:
    name: myapp-redis-config
    type: ConfigMap

Which will update a ConfigMap with data that can be used to add environment variables to your Kubernetes pod:

apiVersion: v1
kind: ConfigMap
metadata:
  name: special-config
  namespace: default
data:
  endpoint: 10.111.1.3
  port: 6379

The controller can also update a Secret.

Getting Started

You’ll need a Kubernetes cluster to run against. You can use KIND to get a local cluster for testing, or run against a remote cluster. Note: Your controller will automatically use the current context in your kubeconfig file (i.e. whatever cluster kubectl cluster-info shows).

Installation via Helm Chart

Follow chart doc to install Field Exporter with CRDs

Running on the cluster manually

  1. Install Instances of Custom Resources:
kubectl apply -k config/samples/
  1. Build and push your image to the location specified by IMG:
make docker-build docker-push IMG=<some-registry>/field-exporter:tag
  1. Deploy the controller to the cluster with the image specified by IMG:
make deploy IMG=<some-registry>/field-exporter:tag

Uninstall CRDs

To delete the CRDs from the cluster:

make uninstall

Undeploy controller

UnDeploy the controller from the cluster:

make undeploy

How it works

This project aims to follow the Kubernetes Operator pattern.

It uses Controllers, which provide a reconcile function responsible for synchronizing resources until the desired state is reached on the cluster.

Test It Out

  1. Install the CRDs into the cluster:
make install
  1. Run your controller (this will run in the foreground, so switch to a new terminal if you want to leave it running):
make run

NOTE: You can also run this in one step by running: make install run

Modifying the API definitions

If you are editing the API definitions, generate the manifests such as CRs or CRDs using:

make manifests

NOTE: Run make --help for more information on all potential make targets

More information can be found via the Kubebuilder Documentation

Contributing

To contribute, please read our contributing docs.

License

Copyright © 2023 Delivery Hero SE

Contents of this repository is licensed under the Apache-2.0 License.