uptimerobot-operator

License Go

The operator creates, updates, deletes uptimerobot monitors for a particular ingress resource. It’s designed to use friendly_name parameter of a monitor and/or alert contact for unique identification.

Description

The operator uses uptimerobot-tooling to handle api requests.

The operator will delete the monitor it creates when the ingress resource is deleted.

Configuration

Environment Variables Supported:

In addition to the environments supplied on the tooling mentioned above, the operator has the following configurations.

Variable Description Default
DOMAIN_PREFIX The domain name to use when specifying the annotations. onaio.github.io

With the DOMAIN_PREFIX as onaio.github.io the configurations will be supplied as follows:

Example 1

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: https-minimal-ingress
  annotations:
      onaio.github.io/uptimerobot-monitor: "true"
      onaio.github.io/uptimerobot-monitor-type: "HTTP"
      onaio.github.io/uptimerobot-monitor-friendly_name: "tester"
      onaio.github.io/uptimerobot-monitor-alert_contacts: "tester opsgenie"
      onaio.github.io/uptimerobot-monitor-interval: "60"
      onaio.github.io/uptimerobot-monitor-timeout: "30"
      # To use more parameters append valid uptimerobot monitor api parameter from https://uptimerobot.com/api/ to the prefix `onaio.github.io/uptimerobot-monitor-`
spec:
  rules:
    - host: test-domain.localhost
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: my-service
                port:
                  number: 80

The operator reads configurations of the monitor from the annotation on the ingress resource.

The first annotation entry onaio.github.io/uptimerobot-monitor enables the ingress resource to be evaluated by the operator. The other annotations supply the parameters of the monitor. The naming convention is: onaio.github.io/uptimerobot-monitor-<parameter>.

To get more parameters refer to the tooling documentation and uptimerobot api documentation.

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

Ensure you have supplied the environment variables here config/manager/manager.yaml.

Deploying on the cluster

To deploy the operator you will need the following manifests:

Create a yaml file and paste the yaml snippet below and update configurations to your preferences.

```yaml (uptimerobot-operator.yaml)

apiVersion: v1 kind: ServiceAccount metadata: labels: app.kubernetes.io/name: serviceaccount app.kubernetes.io/instance: controller-manager app.kubernetes.io/component: rbac app.kubernetes.io/created-by: uptimerobot-operator app.kubernetes.io/part-of: uptimerobot-operator name: uptimerobot-operator — apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: creationTimestamp: null name: uptimerobot-operator rules:

Development

Running on the cluster

Use the latest tag from dockerhub

  1. Build and push your image to the location specified by IMG:
make docker-build docker-push IMG=onaio/uptimerobot-operator:v0.1.0
  1. Deploy the controller to the cluster with the image specified by IMG:
make deploy IMG=onaio/uptimerobot-operator:v0.1.0

Uninstall CRDs

To delete the CRDs from the cluster:

make uninstall

Undeploy controller

UnDeploy the controller to the cluster:

make undeploy

Contributing

// TODO(user): Add detailed information on how you would like others to contribute to this project

How it works

This project aims to follow the Kubernetes Operator pattern

It uses Controllers which provides 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

License

Copyright 2022.

Licensed under the Apache License, Version 2.0 (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.