OpsLevel Agent

The OpsLevel agent is a multi-facet application that runs in your cloud and connects with OpsLevel to support multiple functionalities for OpsLevel. The current functionalities are:

  • Kubernetes Service Detection (Aliases)

https://github.com/OpsLevel/opslevel-agent

Primer

To see the agent in action you can watch this primer video
https://opslevel.zoom.us/clips/share/A2F3MRZiQkhwOTJDRVJ0ZUYtMnNtMnJUMzBRAQ

Prerequisites

Values.yaml

The bare minimum values file look like this

secret:
  data:
    OPSLEVEL_API_TOKEN: "XXXXX"
helm install opslevel-agent opslevel/opslevel-agent -f values.yaml

Multiple Clusters

If you intend to deploy the agent to multiple clusters you may want to create a unique
integration tile in your OpsLevel account for each cluster so that you know which cluster the recommendations are coming from.
If you do this you'll need to specify the integration's alias in the values file you'll want the agent to submit for like this:

agent:
  integration: "prod-cluster"

Resource Targeting

By default the agent will target the following resources:

  • v1/Service
  • apps/v1/Deployment
  • apps/v1/StatefulSet
  • apps/v1/DaemonSet
  • batch/v1/CronJob

but if you want other resource types to make suggestions you can add configuration so long as the
resource types show up when you use kubectl api-resources --verbs="get,list".

The following restricts the agent to only syncronize Service and APIService resources:

configmap:
  data:
    config.yaml: |
      selectors:
      - apiVersion: "v1"
        kind: Service
      - apiVersion: "apiregistration.k8s.io/v1"
        kind: APIService

Migration from Legacy Integration

Prior to the opslevel-agent the way to integrate OpsLevel with Kubernetes was using the kubectl-opslevel tool. In the interim while we progress to make the opslevel-agent have similar functionality you can run both tools at the same time using the same Kubenetes integration and API token. The key change you'll want to make to your kubectl-opslevel deployment is to turn on the flag --disable-service-create so that it will only "update" services with alias matches.

By doing this you can effectively "gate" which Kubernetes services are synchronized with kubectl-opslevel by first having them show up as "suggestions" in OpsLevel and then only after you accept those suggestions the next time kubectl-opslevel synchronizes it will find the service with that alias and perform a reconciliatory update.

This is only an interim state while opslevel-agent does not have 100% component field parity.