All Projects → AmadeusITGroup → kubervisor

AmadeusITGroup / kubervisor

Licence: other
The Kubervisor allow you to control which pods should receive traffic or not based on anomaly detection.It is a new kind of health check system.

Programming Languages

go
31211 projects - #10 most used programming language
shell
77523 projects

Projects that are alternatives of or similar to kubervisor

Mobileproject
一个基于MVC的项目框架,并集成一些常用的功能(不断更新中)
Stars: ✭ 2,054 (+5768.57%)
Mutual labels:  pod
Dgr
Container build and runtime tool
Stars: ✭ 249 (+611.43%)
Mutual labels:  pod
transfertools
Python toolbox for transfer learning.
Stars: ✭ 22 (-37.14%)
Mutual labels:  anomaly-detection
Modernavplayer
ModernAVPlayer is a persistence AVPlayer wrapper
Stars: ✭ 179 (+411.43%)
Mutual labels:  pod
K8s Diagrams
A collection of kubernetes-related diagrams
Stars: ✭ 227 (+548.57%)
Mutual labels:  pod
out-of-distribution-detection
The Ultimate Reference for Out of Distribution Detection with Deep Neural Networks
Stars: ✭ 117 (+234.29%)
Mutual labels:  anomaly-detection
Uiimage Imagecompress
An iOS library to compress images and optimize uploads
Stars: ✭ 155 (+342.86%)
Mutual labels:  pod
anomaly-detection-models
some anomaly detection models and experiments.
Stars: ✭ 19 (-45.71%)
Mutual labels:  anomaly-detection
Xhwebimageautosize
网络图片尺寸、高度自适应/适配 - 支持异步缓存imageSize , 支持动态刷新界面
Stars: ✭ 245 (+600%)
Mutual labels:  pod
GMRPD
A Ground Mobile Robot Perception Dataset, IEEE RA-L & IEEE T-CYB
Stars: ✭ 30 (-14.29%)
Mutual labels:  anomaly-detection
Rnloadingbutton Swift
An easy-to-use UIButton subclass with an activity indicator
Stars: ✭ 181 (+417.14%)
Mutual labels:  pod
Iosdebugdatabase
make it easy to debug databases in iOS applications iOS debug database
Stars: ✭ 219 (+525.71%)
Mutual labels:  pod
understory.garden
Understory is a digital garden, a micro-publishing space for you to plant the seeds of your ideas and grow them into bi-directionally linked web portals. It's a social zettelkasten that lets users use Web Monetization to get paid when people spend time with their content.
Stars: ✭ 27 (-22.86%)
Mutual labels:  pod
Xhnetworkcache
一行代码将网络数据持久化 - 支持数据同步/异步写入及更新、缓存数据读取、获取缓存数据大小、缓存数据清除.
Stars: ✭ 178 (+408.57%)
Mutual labels:  pod
drama
Main component extraction for outlier detection
Stars: ✭ 17 (-51.43%)
Mutual labels:  anomaly-detection
Zztools
包括: StarView星星评价(支持半星, 整星, 任意星, 支持拖动, 支持自定义星星图片, 数量, 大小, 间距, 最低分值). 瀑布流(垂直, 浮动, 混合模式瀑布流)等.
Stars: ✭ 175 (+400%)
Mutual labels:  pod
kenchi
A scikit-learn compatible library for anomaly detection
Stars: ✭ 36 (+2.86%)
Mutual labels:  anomaly-detection
Hyperspectral-Anomaly-Detection-LSUNRSORAD-and-LSAD-CR-IDW-
This is the code for the paper nemed 'Anomaly Detection for Hyperspectral Imagery Based on the Regularized Subspace Method and Collaborative Representation'
Stars: ✭ 22 (-37.14%)
Mutual labels:  anomaly-detection
backblaze
Backblaze.Agent is a high-performance .NET Core implementation of the Backblaze B2 Cloud Storage API.
Stars: ✭ 32 (-8.57%)
Mutual labels:  pod
anompy
A Python library for anomaly detection
Stars: ✭ 13 (-62.86%)
Mutual labels:  anomaly-detection

kubervisor

Build Status

Build Status Go Report Card codecov

Presentation

The Kubervisor allow you to control which pods should receive traffic or not based on anomaly detection.It is a new kind of health check system.

Unlike readiness probe, the Kubervisor can be configured to remove pods from endpoints based on a global view of the health of the pod fleet. This guarantees that if all pods (or a majority) are under SLA, the system stability is not getting worse because of pod local decisions to "eliminate" itself.

Unlike a service mesh circuit breaker, the Kubervisor can act as a circuit breaker triggered by servers internal KPIs. The anomaly detection can be based on analysis done on external data source such as Prometheus. It allows to easily build complex analysis by leveraging external system capabilities such as PromQL in the case of Prometheus.

Kubervisor comes with its own resource (CRD) to configure the system:

  • define the service to monitor
  • define the anomaly detection mechanism and configure it
  • define the grace period and retry policies
  • activation/deactivation/dryrun operation
  • display the current health check of the service

Presentation done during the KubeCon Europe 2018: https://youtu.be/HIB_haT1z5M

architecture

architecture diagram

  • The KubervisorService is the CRD (Kubernetes Custom Resource Definition). It is used to configure the kubervisor for a given Service. It also contains the status for the health of the service.
  • The Controller reads the KubervisorService to configure Breaker and Activator workers for the given service. It also monitors the service changes to adapt the configuration of the system. It also monitors the pods to build a cache for all the workers and to compute the health status of each service under control of the Kubervisor. The health of the serivce is persisted inside the status of the associated *BreakConfig
  • The Breaker is in charge of invoking the configured anomaly detection. Ensuring that it is not going bellow defined threshold or ratio, the Breaker will relabel some pods to prevent them to receive traffic.
  • The Activator is in charge of restablishing traffic on pods after the defined period of inactivity (equivalent to open state in a circuit breaker pattern). Depending on the configured policy and the numbers of retries performed on a pod, the Activator can decide to kill the pod or put it in pause (out of traffic forever) for further investigation.
  • The Anomaly detector part (all the blue part in the diagram) is where the data analysis is really performed. Depending on the KPI that you are working on (discrete value, continuous value) or the type of anomaly (ratio, threshold, trend ...) you can select an integrated implementation or delegate the to an external system that would return the list of pods that are out of policy. The proposed internal implementations used data from Prometheus.

more information in the developper documentation page

System Operations

Admin side

CRD

When the Kubervisor controller starts it register automatically the kubervisorservices.kubervisor.k8s.io CRD.

Scope

The Kubervisor is an operator that can run in a dedicated namespace and cover the resource of that namespace only, or as a global operator taking action in all namespace that it had been granted access. The used service account will determine the scope on which the Kubervisor will work.

It requires to be given the following roles:

  • get: pod, service
  • list: pod, service
  • update: pod, service
  • watch: pod, service
  • delete: pod

Deployment

An easy way to install the Kubervisor controller, in your Kubernetes cluster, is to use the helm chart present in this repository

$ helm intall -n kubervisor --wait charts/kubervisor
NAME:   kubervisor
LAST DEPLOYED: Fri Apr 27 21:35:03 2018
NAMESPACE: default
STATUS: DEPLOYED

RESOURCES:
==> v1beta2/Deployment
NAME        DESIRED  CURRENT  UP-TO-DATE  AVAILABLE  AGE
kubervisor  1        1        1           0          3s

==> v1beta1/ClusterRole
NAME        AGE
kubervisor  3s

==> v1beta1/ClusterRoleBinding
NAME        AGE
kubervisor  2s

==> v1/ServiceAccount
NAME        SECRETS  AGE
kubervisor  1        2s

kubectl plugin

kubervisor provides a kubectl plugin in order to show in a nice way the KubervisorService status information

To install the plugin juste run: make plugin

To run the plugin:

  • kubectl plugin kubervisor will list all the KubervisorService present in the current namespace.
  • kubectl plugin kubervisor -k <kubervisorservice-name> will display only the KubervisorService corresponding to the -k argument.

User side

To configure the system a user would have to complete the following steps:

  • Create the KubervisorService CRD in the namespace of the associated service
    • Select the service (by name)
    • Define the BreakConfiguration to configure the Anomaly Detection mechanism
    • Configure the Activator
  • Once the CRD status is Ready activate the system by adding the following label in the Selector of the service: kubervisor/traffic=yes
    • TODO: Alternativelly use the command kubectl .....

To deactivate any effect of the Kubervisor for a given service, simply delete from the Selector the label with key kubervisor/traffic

If you know that some pods are going to be under control of the Kubervisor, it is advised to directly add a label kubervisor/traffic=yes inside the pod template. This label must not be part of template only, not the selector!

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapplication
  labels:
    app: myapplication
spec:
  replicas: 3
  selector:
    matchLabels:                       # <-- kubervisor labels must not appear in the selector!
      app: myapplication
  template:
    metadata:
      labels:
        app: myapplication
        kubervisor/traffic: yes        # <-- add label for kubervisor
    spec:
      containers:
      - name: myapp
        image: myapp:1.7.9
        ports:
        - containerPort: 80

This label is automattically added by the controller on the pods if it is missing. But this happens once the resources are synchronized in the controller (every couple of seconds in theory) and of course if the controller is running. Having the label already preset in the pod template prevent so corner case in case the controller is missbehaving or absent.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].