Git Product home page Git Product logo

kusionstack / karpor Goto Github PK

View Code? Open in Web Editor NEW
411.0 5.0 44.0 6.45 MB

Intelligence for Kubernetes. World's most promising Kubernetes Visualization Tool for Developer and Platform Engineering teams.

Home Page: https://karpor-demo.kusionstack.io

License: Apache License 2.0

Go 92.22% Shell 0.36% Makefile 0.26% JavaScript 0.13% Dockerfile 0.02% HTML 0.07% TypeScript 5.95% CSS 0.01% Less 0.99%
cloud-native k8s-sig-multicluster kubernetes multi-cluster multi-cloud observability kubernetes-dashboard kubernetesdashoard visualization-tool kubernetes-visualization-tool

karpor's Introduction

What is Karpor?

Karpor is Intelligence for Kubernetes. It brings advanced Search,ย Insightย and AI to Kubernetes. It is essentially a Kubernetes Visualization Tool. With Karpor, you can gain crucial visibility into your Kubernetes clusters across any clouds.

We hope to become a small and beautiful, vendor-neutral, developer-friendly, community-driven open-source project!

Current Status: We are iterating v0.5.0 Milestone, welcome to join the discussion.

demo.mp4

Why Karpor?

๐Ÿ” Search

Automatic Syncing
Automatically synchronize your resources across any clusters managed by the multi-cloud platform.

Powerful, flexible queries
Effectively retrieve and locate resources across multi clusters that you are looking for in a quick and easy way.

๐Ÿ’ก Insight

Compliance Governance
Understand your compliance status across multiple clusters and compliance standards.

Resource Topology
Logical and topological views of relevant resources within their operational context.

Cost Optimization
Coming soon.

โœจ AI

Natural Language Operations
Interact with Kubernetes using plain language for more intuitive operations.

Contextual AI Responses
Get smart, contextual assistance that understands your needs.

AIOps for Kubernetes
Automate and optimize Kubernetes management with AI-powered insights.

๐ŸŒˆ Our Vision

The increasing complexity of the kubernetes ecosystem is an undeniable trend that is becoming more and more difficult to manage. This complexity not only entails a heavier burden on operations and maintenance but also slows down the adoption of new technologies by users, limiting their ability to fully leverage the potential of kubernetes.

In general, we wish Karpor to focus on search, insights, and AI, to break through the increasingly complex maze of kubernetes, achieving the following value proposition:

โš™๏ธ Installation

Install with Helm

Karpor can be simply installed by helm v3.5+, which is a simple command-line tool and you can get it from here.

If you are interested, you can also directly view the Karpor Chart Repo.

$ helm repo add kusionstack https://kusionstack.github.io/charts
$ helm repo update
$ helm install karpor kusionstack/karpor

For more information about installation, please check the Installation Guide on official website.

๐Ÿ“– Documentation

Detailed documentation is available at Karpor Website.

๐Ÿค How to contribute

Karpor is still in the initial stage, and there are many capabilities that need to be made up, so we welcome everyone to participate in construction with us.

๐ŸŽ–๏ธŽ Contributors

Thanks to these wonderful people! Come and join us!

elliotxx
elliotxx

๐Ÿ’ป ๐Ÿ“– ๐ŸŽจ
panshuai-ps
panshuai-ps

๐Ÿ’ป ๐Ÿ“–
Forest
Forest

๐Ÿ’ป ๐Ÿ“–
hai-tian
hai-tian

๐Ÿ’ป ๐ŸŽจ
weieigao
weieigao

๐Ÿ’ป
shaofan-hs
shaofan-hs

๐Ÿ’ป
KK
KK

๐Ÿ“–
TonyAdo
TonyAdo

๐Ÿค” ๐Ÿ”
Kan Wu
Kan Wu

๐Ÿค” ๐Ÿ”
Paradiesvogel7
Paradiesvogel7

๐Ÿ’ป
Stray
Stray

๐Ÿ“– ๐Ÿ’ป
ZhaoRuquan
ZhaoRuquan

๐Ÿ’ป ๐Ÿ“–
Dayuan
Dayuan

๐Ÿ“–
huadongxu
huadongxu

๐Ÿ“–
Peter Wang
Peter Wang

๐Ÿ’ป
jiaxin
jiaxin

๐Ÿ’ป
rajeshkio
rajeshkio

๐Ÿ’ป
Chen Chen
Chen Chen

๐Ÿ’ป
JasonHe-WQ
JasonHe-WQ

๐Ÿ’ป
EduardoQian
EduardoQian

๐Ÿ’ป
xiao.wu
xiao.wu

๐Ÿ’ป
iamryanchia
iamryanchia

๐Ÿ’ป
cheny-alf
cheny-alf

โš ๏ธ

โ˜Ž๏ธ Contact

If you have any questions, feel free to reach out to us in the following ways:

  • Slack | Join

  • DingTalk Group: 42753001 (Chinese)

  • WeChat Group (Chinese): Add the WeChat assistant to bring you into the user group.

karpor's People

Contributors

allcontributors[bot] avatar cheny-alf avatar cirillaql avatar dependabot[bot] avatar elliotxx avatar ffforest avatar healthjyk avatar iamryanchia avatar jasonhe-wq avatar panshuai-ps avatar paradiesvogel7 avatar peter-wangxu avatar rajeshkio avatar regend avatar ruquanzhao avatar solarhell avatar sparkyuan avatar virtually-stray avatar wolfcode111 avatar z1cheng 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

karpor's Issues

feat: Provide a search API for retrieving multi-cluster resources from storage

What would you like to be added?

Provide a search API, this API's handler invoke storage layer interfaces to search multi-cluster resources from underlying storage.

Topological relationship:

flowchart TB
  subgraph "Karbour"
    A[Search API] --> B[Storage Layer]
  end
  B[Storage layer] --> C[Strorage Backend 1]
  B[Storage layer] --> D[Strorage Backend 2]
  B[Storage layer] --> E[Strorage Backend 3]
  style A stroke-width:4px
Loading

Why is this needed?

No response

Add uniresource type to obtain multi-cluster resources from storage

What would you like to be added?

Add uniresource type to obtain multi-cluster resources from storage

e.g.

curl -k  https://127.0.0.1:7443/apis/search.karbour.com/v1beta1/uniresources?query=name%3Dtest
{
  "kind": "UniResource",
  "apiVersion": "search.karbour.com/v1beta1",
  "objects": [
    {
      "apiVersion": "v1",
      "kind": "Namespace",
      "metadata": {
        "name": "test1",
        "namespace": ""
      }
    },
    {
      "apiVersion": "v1",
      "kind": "Namespace",
      "metadata": {
        "name": "test2",
        "namespace": ""
      }
    },
    {
      "apiVersion": "apps.cafe.cloud.alipay.com/v1alpha1",
      "kind": "CafeDeployment",
      "metadata": {
        "name": "test1",
        "namespace": "test1"
      }
    },
    {
      "apiVersion": "apps.cafe.cloud.alipay.com/v1alpha1",
      "kind": "CafeDeployment",
      "metadata": {
        "name": "test2",
        "namespace": "test2"
      }
    },
    {
      "apiVersion": "v1",
      "kind": "Pod",
      "metadata": {
        "name": "test1",
        "namespace": "test1"
      }
    },
    {
      "apiVersion": "v1",
      "kind": "Pod",
      "metadata": {
        "name": "test2",
        "namespace": "test2"
      }
    }
  ]
}

Why is this needed?

No response

ClusterSyncer: ResourceSyncer design

What would you like to be added?

The design for the resource syncing component that collects data on resources in the member cluster and store them into Karbour's storage layer.
User should be able to customize the rules for the resource sync.

Why is this needed?

This is the design doc for implementing ClusterSyncer.
Customized resource sync rules are to give user some flexibility in terms of configuring Karbour's behavior.

ClusterSyncer: Transformer design

What would you like to be added?

The design for the data transforming component that transforms resource data before storing them into Karbour's storage layer. The transformation should happen based on user's customized configuration.

Why is this needed?

This is the design doc for implementing the Transformer.
Transformers are to enrich the data being collected into Karbour's storage so it can provide additional, advanced search and insight capabilities.

Insight: Add issue-based scanning using kubeaudit

What would you like to be added?

Add an issue-based score to insight details which appears on the:

  • resource detail page
  • cluster detail page

Source of the issues is kubeaudit: https://github.com/Shopify/kubeaudit#auditors
Design is located here (will move to github eventually): https://yuque.antfin-inc.com/antcloud-paas/ar858o/uyxg590vqsba8xfa
Should also include the list of issues if found any.

Why is this needed?

This implements one of the core insight functionalities that Karbour presents.
Karbour provides resource scores (for each individual resource) and a cluster score, which represent the extent the resource or the cluster complies with security policies and best practices.
In the future Karbour should also provide capabilities to address the issues identified.

Frontend: Integration with search and insight APIs

What would you like to be added?

This work should happen after the search/insight APIs are properly designed.
This tracks work to have the Karbour portal properly integrated with the search/insight APIs mentioned in #64 #65 #66

Why is this needed?

This completes the product and customer-facing layer of Karbour Search and Insight capabilities.

Insight: Aggregated topology API

What would you like to be added?

Apart from the topology API for a single resource (#65), aggregated topology (Cluster/Namespace) should include GVK and its count

Why is this needed?

So that aggregated topology are displayed properly by frontend

Support setting cross-domain options

What would you like to be added?

support setting cross-domain options.
e.g.

--cors-allowed-origins=.*

Why is this needed?

Frontend cross domain call server reporting error

Insight: Add resource topology to resource details

What would you like to be added?

Add a relationship topology graph to resource detail page, which describes all the resources that are related to the current one.
User should be able to define custom relationships between resources to accommodate CRDs.
Without any customization, Karbour should have a built-in topology graph describing relationships between Kubernetes-native resources such as (but not limited to):

  • Deployments and ReplicaSets and Pods
  • Services and Pods
  • Ingresses and service
  • PVCs and Pods
  • PVCs and PVs
  • etc

Why is this needed?

This implements one of the core insight functionalities that Karbour presents.
For each resource in the cluster, Karbour provides the ability to locate all the relevant Kubernetes resources and display them on a single graph for user to navigate.

Cluster Management: CRUD for Cluster CR

What would you like to be added?

APIs for user to create/read/update/delete Cluster CR in order to create/modify/delete registered clusters

Why is this needed?

Cluster can be added, modified or deleted

Installation: End to end install verification

What would you like to be added?

End to end verification of Karbour installation including a working ResourceSyncer

Why is this needed?

So that installation works as expected. Installation is step 0 of Karbour adoption.

Documentation: Cluster registration

What would you like to be added?

Documentations that describes how to register an existing cluster so that it's managed by Karbour.
The content should include:

  • What information is needed when registering a cluster
  • What connectivity does Karbour need when registering the cluster
  • The RBAC requirements (read-only) when registering the cluster
  • Examples

Why is this needed?

Users should be able to refer themselves to the documentation when they need to register an existing cluster to Karbour.

Insight: Resource and Aggregated Scoring API

What would you like to be added?

A unified scoring API for single or multiple (aggregated) resources that takes the list of issues as input, and produces a score as output

Why is this needed?

Resource score is properly calculated both for a single resource and for aggregated resources

Add search api group

What would you like to be added?

add search api group

Why is this needed?

No response

Design: Core user workflow

What would you like to be added?

Create a design for the core workflows of Karbour

Why is this needed?

No response

Cluster Management: KubeConfig upload API

What would you like to be added?

an API that accepts a kubeconfig file upload and respond with the content of the kubeconfig to the frontend

Why is this needed?

The frontend will display a diff based on the response

Logistics: Karbour website

What would you like to be added?

Create the Karbour website
Discussion:

  • Does it live under Kusionstack.io?

Including but not limited to:

  • Product overview
  • Product introduction
  • User stories
  • Documentations
  • Quickstart example
  • etc

Why is this needed?

This provides the channels for end users to understand the product and find samples.

Run without kube-apiserver

What would you like to be added?

Make it possible for Karbour to run without relying on a kube-apiserver.

Why is this needed?

Currently, karbour relies on a kube-apiserver for delegate authentication and authentication at startup, we hope that karbour to be able to run independently.

Search: DSL Design

What would you like to be added?

The design documentation for the query language Karbour is using when searching for resources.
Karbour need to provides a full Search DSL (Domain Specific Language) based on JSON to define queries.

flowchart TB
  subgraph Karbour
    subgraph SearchAPI
      DSL[Search DSL] --> Convert[DSL Converter: DSL to Query]
    end 
    subgraph StorageLayer
      Query[Query Converter:  Query to ES/ZinC/... DSL]
    end
    Dashboard --> SearchAPI[Search API]
    SearchAPI[Search API] --> StorageLayer[Storage layer]
  end
  StorageLayer[Storage layer] --> C[Search Engine 1]
  StorageLayer[Storage layer] --> D[Search Engine 2]
  StorageLayer[Storage layer] --> E[Search Engine 3]
  style DSL stroke-width:4px
Loading

Why is this needed?

So that Karbour can provide advanced search capabilities.

Initialize the code, github action configurations, makefile, configuration files, etc of repository

What would you like to be added?

Initialize the code, github action configurations, makefile, configuration files, etc of repository.

TODO:

  • Repository Settings
    • Issue Labels
    • Security Settings
    • Code Review Settings
      • Allow squash merging
      • Allow auto-merge
      • Automatically delete head branches
  • Configurations
    • CodeOnwers, SECURITY.md, CONTRIBUTING.md, CODE_OF_CONDUCT.md files
    • PRใ€Issue templates
    • EditorConfig
    • GolangciLint Configuration
    • GoReleaser Configuration
    • Licenserc Configuration
  • CICD
    • CI
      • UnitTest
      • GolangLint
      • CommitLint
      • ClaCheck
      • LicenseCheck
    • CD
      • Automation build and push image
      • Automation generate release note and push to github release
      • Automation build and push artifacts

Why is this needed?

  1. Standardize the R&D process
  2. Automation
  3. Consistency

The cluster's status field can only be modified by accessing the status subresource of the cluster.

What happened?

The cluster's status field can only be modified by accessing the status subresource of the cluster.

What did you expect to happen?

No response

How can we reproduce it (as minimally and precisely as possible)?

No response

Anything else we need to know?

No response

Karbour version

$ karbour -V
# paste output here

OS version

# On Linux:
$ cat /etc/os-release
# paste output here
$ uname -a
# paste output here

# On Windows:
C:\> wmic os get Caption, Version, BuildNumber, OSArchitecture
# paste output here

Install tools

Add the storage layer interface and provide the implementation of elasticsearch type.

What would you like to be added?

Add the storage layer interface and provide the implementation of elasticsearch type.

Topological relationship:

flowchart TB
  subgraph "Karbour"
    A[Search API] --> B[Storage Layer]
  end
  B[Storage layer] --> C[Strorage Backend 1]
  B[Storage layer] --> D[Strorage Backend 2]
  B[Storage layer] --> E[Strorage Backend 3]
  style B stroke-width:4px
Loading

Storage Layer Interface:

type Storage interface {
	Get(ctx context.Context, cluster string, obj runtime.Object) error
	Create(ctx context.Context, cluster string, obj runtime.Object) error
	Update(ctx context.Context, cluster string, obj runtime.Object) error
	Delete(ctx context.Context, cluster string, obj runtime.Object) error
}

type Searcher interface {
	Search(ctx context.Context, queries []Query) (*SearchResult, error)
}

Why is this needed?

The Karbour server supports various types of storage, including ES, and provides search api users. To enable unified access to the storage layer, an interface for the storage layer is provided to shield the differences between different types of storage.

Insight: Add basic information to resource and cluster details

What would you like to be added?

Add the essential information to the resource and cluster details page, including but not limited to:
For resource:

  • Name
  • Namespace
  • Cluster
  • Health Status (when applicable)
  • CPU and memory usage (when applicable)
  • YAML
  • etc

For cluster:

  • Cluster health status
  • Node status
  • Node count
  • Node CPU and memory usage
  • etc

Why is this needed?

This implements one of the core insight functionalities that Karbour presents.
For each resource in the cluster, Karbour displays the essential information for user to read from.

ClusterSyncer: Transformer implementation

What would you like to be added?

The implementation for the transforming component that transforms the data (based on user customization) before store them into Karbour's storage layer.

Why is this needed?

So that user can perform certain data transformation activities during resource sync to provide advanced search and insight capability.

Insight: Get YAML for resource

What would you like to be added?

Provide an API that returns the YAML of a given resource

Why is this needed?

The yaml should be available to the user

Cluster Management: Cluster registration workflow design

What would you like to be added?

Currently Karbour registers/updates/deletes new cluster by installing a CR that looks like this in the Karbour apiserver:

apiVersion: cluster.karbour.com/v1beta1
kind: Cluster
metadata:
  name: [local-cluster-nickname]
spec:
  provider: [local-cluster-provider] #optional
  access:
    endpoint: [local-cluster-endpoint]
    caBundle: [local-cluster-CABundle]
    credential:
      type: ServiceAccountToken #SAToken or x509
      serviceAccountToken: [local-cluster-credential]

This is a very manual process. The ability to register/update/delete clusters should be exposed to the end user with a recommended workflow.

Why is this needed?

User should be able to register new cluster via a consistent workflow without having to install Custom Resources manually.

The search homepage and cluster management page of the `karbour dashboard`

What would you like to be added?

We need to develop the Karbour Dashboard component to provide a user-friendly interface. The first step is to develop the search homepage and cluster management page.

TODO:

  • search page
    • homepage
    • search result page
  • cluster management page
    • cluster list page

Why is this needed?

Provide a user-friendly interface.

Search: Homepage and search result page design

What would you like to be added?

Properly designed search homepage and result page.

Why is this needed?

So that user can easily find what they are looking for when performing a search using Karbour.

Search: DSL design

What would you like to be added?

The design documentation for the query language Karbour is using when searching for resources.

Why is this needed?

So that Karbour can provide advanced search capabilities.

Documentation: Concepts

What would you like to be added?

Karbour concepts and overview

Why is this needed?

Part of Karbour documetations

Documentation: Search

What would you like to be added?

Detailed documentation on how to perform basic and advanced search using Karbour, including examples.

Why is this needed?

Users can self-service based on the documentation when using Karbour to search for resources.

Design: Karbour Page design draft

What would you like to be added?

Draft for what Karbour product page looks like.

Why is this needed?

This is a pre-requisite before the Karbour frontend pages can be developed.

Syncer: Add a page to configure cluster syncer and transformer in the Karpor portal

What would you like to be added?

A page that lets user configure cluster syncer and transformer behavior.
User should be able to customize the kind of resource to sync, the specific fields to include/exclude, the kind of transformation to perform on raw data, etc.

Why is this needed?

To enrich the data being collected into Karpor's storage so it can provide additional, advanced search and insight capabilities.
Also to give user some flexibility in terms of configuring Karpor's behavior.

Support the `all-in-one` of karbour(server) and dashboard(ui) usage

What would you like to be added?

Support the all-in-one of kabrour(server) and dashboard(ui) usage.

Old usage:

$ docker run -p 8080:8080 -d kusionstack/karbour:v0.1.2
$ docker run -p 9871:9871 -d kusionstack/karbour-dashboard:v0.1.2

New usage:

$ docker run -p 8080:8080 -d kusionstack/karbour:v0.1.2

or:

Why is this needed?

Simpify user usage.

Installation: ResourceSyncer configuration

What would you like to be added?

Provide an out-of-the-box configuration for the centralized ResourceSyncer

Why is this needed?

So that ResourceSyncer can collect data from registered clusters

Search: SQL-based search

What would you like to be added?

The ability to search for resources based on specific keywords.
Should also consider the case where the key is not provided, for example instead of providing "Name=hello-world-abcde,Kind=pod", simply providing "hello-world-abcde" should also return similar results.

Why is this needed?

So that Karbour can perform basic search capability.

Support automated build and release of `karbour dashboard`

What would you like to be added?

The main feature of the current version is the addition of a Karbour Dashboard component, which includes code, CICD, build targets, etc. The Karbour Dashboard provides a user-friendly frontend interface that makes it easy for users to search for and gain insights into Kubernetes resources.

Usage

$ docker pull kusionstack/karbour-dashboard:v0.1.2
$ docker run -p 9871:9871 -d kusionstack/karbour-dashboard:v0.1.2

You can visit to http://127.0.0.1:9871, enjoy!

Why is this needed?

No response

Cluster Management: Add cluster health check

What would you like to be added?

All local clusters managed by Karbour should have their health status checked on a regular basis.
Any failure to reach the cluster should be reported to the user.
This includes but not limited to:

  • Permission issues due to invalid/expired credential
  • Network connectivity issues when Karbour tries to reach the APIServer endpoint
  • Local cluster issues that cause /healthz or /readyz endpoint to return an error
  • etc

Why is this needed?

Users should be aware when one or some of the clusters managed by Karbour has service interruptions

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.