Feature Spec - stolostron/search-v2-operator GitHub Wiki

Overview

Open Cluster Management makes it easy for users to create and manage a large fleet of Kubernetes clusters. The search feature helps users easily find, access, and edit resources in the managed clusters from a central place. Search creates an API to query which is optimized for management of all these resource sprawl from one central place without having to log into these individual Kubernetes API Servers. We aggregate all information in one place and track relationships between them.

Let's think about a concrete example:
Developers have created an application that spreads across multiple clusters. And they have followed the good Kubernetes practice of labelling them properly. Now you have to manage these applications and want to know about the pods or services etc that comprise this in entirety from one single place. This API helps you do that. And then when you find out that one of the pods is not healthy, you want to look at the related ConfigMaps because you suspect that it may not have the right content. You can do it all in one place using the API.

And what is coming in next the added ability to query what has changed around a service in a given time window. As of now, we can only see what new resources have been created. Capturing change is next. Concretely after you get an alert that a service is not performing, you can query the API and find out what all things changed around this service in that time window. And the answer could be - a secret was changed or replica count of pod was changed.

Architecture

Architecture Diagram

Components

Search Operator (repo)

  • Deploys, configures, and monitors the components.

Database (repo)

Collector (repo)

  • Deployed on each managed cluster.
  • Discovers Kubernetes resources dynamically and watches for updates.
    • CLI equivalent: oc api-resources
    • CLI equivalent: oc get <resource> --all-namespaces --watch
  • Collects and analyze Kubernetes resources and sync with the hub in near-real time.
  • Computes relationships for resources within the cluster.

Indexer (repo)

  • Receives data from the collectors and writes to the database.
  • Synchronize resources in the hub cluster (e.g. clusters, applications, policies).
  • Computes multi-cluster relationships (ie. Applications).
  • Keeps track of activity from connected collectors (heartbeat).

Query API (repo)

  • Provides an API to query the data (GraphQL).
  • Enforces RBAC, each user will only see resources they have been authorized to access.
⚠️ **GitHub.com Fallback** ⚠️