GithubHelp home page GithubHelp logo

intuit / katlas Goto Github PK

View Code? Open in Web Editor NEW
209.0 18.0 28.0 3.38 MB

A distributed graph-based platform to automatically collect, discover, explore and relate multi-cluster Kubernetes resources and metadata.

Home Page: https://katlas.io

License: Apache License 2.0

Dockerfile 0.26% Shell 0.16% JavaScript 29.14% HTML 4.32% CSS 3.37% Go 57.91% Makefile 3.23% Ruby 1.61%
kubernetes observability k8s kubernetes-cluster discover graphical enterprise

katlas's Introduction

K-Atlas

Build Status codecov Go Report Card Slack Chat

What It Does?

K-Atlas (pronounced Cutlass), is a distributed graph based platform to automatically collect, discover, explore and relate multi-cluster Kubernetes resources and metadata. K-Atlas's rich query language allows for simple and efficient exploration and extensibility.

It addresses following problems in a large scale enterprise environment of Kubernetes.

  • Discoverability
    • Find K8s objects across multiple distributed K8s clusters
    • Real-time view of discovered objects
    • Streaming APIs and UI for both programmatic and human interactions
  • Advanced Exploration
    • Identify similarities and differences between objects from pods to clusters
    • Correlate different objects by performing advanced join operations
  • Federated Application View
    • Applications take center stage. K-Atlas provides a unique, application-centric view, with metadata from multiple clusters
    • Single pane of glass view of the entire application - from edge to database, across all clusters, regions etc.
  • Reporting
    • Provide advanced reporting on compliance, security and other organizational policies
  • Policy Enforcement
    • Allow for organizational policies to be enforced across the fleet in a consistent manner

Check out more details on Motivation and Use Cases that K-Atlas is addressing.

It provides a Web Viewer that can be used to search the Kubernetes cluster data and view graphical results in real time.

Click on the thumbnail below to see a demo video.

KAtlas Demo Video

Core Components

Collector

The collector is responsible for discovery of Kubernetes assets in Kubernetes Clusters. For details on the Collector design, please refer Design Concepts

K-Atlas Service

The K-Atlas Service exposes APIs that can be used to get details about Kubernetes entities and run queries to help diagnose issues in Kubernetes clusters. For details , please refer K-Atlas APIs

K-Atlas Browser

The Web Application exposes UI search capability to search clusters based on several criteria and provide a real time graphical view of entities. For details on usage, please Click here to see a demo

Graph Database

Dgraph is used as the graph database. To know more about our motivation to choose Dgraph, please refer Design Concepts

Deploying to a Cluster

Technical Requirements

Make sure you have the following prerequisites:

  • A local Go 1.7+ development environment.
  • Access to a Kubernetes cluster.

Setup Steps

How to Set Up.

Releases

Latest version (v0.6)

  • QSL query support
  • Dynamic search result layout based on QSL
  • Graph view based on QSL query required objects & relationships
  • Pagination support for both API and UI
  • Custom metadata definition via new API

More details about specific K-Atlas features are at Release Notes.

Contributing

We encourage you to get involved with K-Atlas, as users or contributors and help with code reviews.

Read the contributing guidelines to learn about building the project, the project structure, and the purpose of each package.

katlas's People

Contributors

davemasselink avatar dependabot[bot] avatar dwding18 avatar formuzi avatar fzxu avatar kevinli11 avatar kianjones4 avatar lucy911 avatar seeekr avatar srivathsanvc avatar ssmails avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

katlas's Issues

Refine metadata API

  1. separate metadata and schema creation
  2. support json array and single josn input when create metadata and schema
  3. initial create schema and metadata while server start

Get page parameter from URL

The page param is stored in the state which will be kept after filing a new search. Better to put in the parameter. The other benefit of doing that is when sharing the URL, it will directly dive into the right page.

Graph should not flash/reset when new data is added to network

Following the extend-graph-navigation work, the graph currently flashes and re-sets when data is added to the rendered network.

This should be able to be mitigated, even with new store data objects per change since that data only feeds the visjs.org network data object which can remain in place. currently, the network object is being cleared and re-built upon data changes. This task is to fix the issue to improve UX

allow QSL projection into graph view for entities other than the first

following #98, only the first entity in an array is shown in the graph when using "feeling graphy" concept

but this means there is no good way to see the items, other than the first. so we should allow the user, on the results list view, to flow into the graph while using that item in the QSL response array

metadata API should support mixed case queries

currently, querying the metadata API with object types including upper-case chars, leads to nearly empty response objects

the UI can't use these as it expects and this can lead to later UI issues in the results list view

here is an example of an expected request/response:

/v1/metadata/cluster

{"uid":"0x25b1ea","name":"cluster","fields":[{"fieldname":"name","fieldtype":"string","mandatory":true,"cardinality":"one"},{"fieldname":"resourceid","fieldtype":"string","mandatory":false,"cardinality":"one"},{"fieldname":"resourceversion","fieldtype":"string","mandatory":true,"cardinality":"one"},{"fieldname":"creationtime","fieldtype":"string","mandatory":true,"cardinality":"one"},{"fieldname":"k8sobj","fieldtype":"string","mandatory":true,"cardinality":"one"},{"fieldname":"objtype","fieldtype":"string","mandatory":true,"cardinality":"one"}]}

and unexpected:

/v1/metadata/Cluster

{"uid":"","name":""}

Graph should not focus/blur upon mouse over/out

Currently, the graph DOM node has a blue outline when the mouse is over the diagram.

This is a small but awkward behavior which catches the eye.

I'll add a screenshot or video of the behavior soon.

Graph view should be able to be loaded with a structured network of data (more than just root UID)

Based on meeting with @fzxu, @formuzi, @ssmails, @kianjones4

extending graph view such that it can be initialized with more than just a root UID

instead a specific QSL response or similarly structured data used in certain circumstances:

  • object type is Application

this allows for a QSL request put together by the user to be immediately "projected" into a graph view with all of the nested child (chained in query) objects included

Graph view requesting `undefined` entity UID

Once the user loads the graph view, an async request is made to retrieve entity data by UID. The UI is currently requesting undefined value from the API. This likely means that a recent change caused an issue where the root node UID is not being correctly registered and maintained.

Here is an example API request URI: https://example.com/v1/entity/uid/undefined

The user experience of this bug is that the orange notifier banner appears and indicates the following error: "rpc error: code = Unknown desc = Some variables are used but not defined Defined:[] Used:[undefined]"

I am seeing this behavior in all deployed environments.

QSL pagination does not work properly

For query like: http://localhost:8011/v1/qsl/Namespace[$$first=10,offset=0]{*}.Deployment{*}.Application[@name="config-service"]{*} returns count 7, result 0

draft JS styleguide

ideally most of the style guide will be a community contribution or standard

create a markdown file to document those we'll adhere to

then we'll want to draft out extenstions to that base due to specifics of this project or other reasons

where possible, also add this to an eslint rc file and add that file, along with dox to project

Graph should reset data after leaving and re-entering view

Currently, if a user drill-down navigates in the graph view and then goes back to home/results views and finally back to the graph by way of a different scoped UID, the graph can be polluted/optimistic with data the user hasn't yet requested (this time).

A sequence of screen shots will explain this best:
screen shot 2019-01-08 at 10 38 54 am
screen shot 2019-01-08 at 10 39 16 am
screen shot 2019-01-08 at 10 39 33 am
screen shot 2019-01-08 at 10 39 49 am
screen shot 2019-01-08 at 10 41 09 am

Graph nodes should have hover tooltip with full name and details

Currently, graph nodes often have long names and this makes for messy graphs when there are many of them.

Instead, the graph could show only a shortened (capped at 20-30 chars - ex: first14chars...last14chars) name and all info in a tooltip overlay

  • name
  • assoc. clustername and/or namespace
  • status
  • more?

Or perhaps no label at all

or the label is + or similar fonticon and acts as expand (contract?) button

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.