Seamless integration of goReplay and Kubernetes
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
cmd
docs
hack
helpers
pkg
sample
vendor
.gitignore
.goreleaser.yml
.travis.yml
Dockerfile.controller
Dockerfile.initializer
Dockerfile.test
Dockerfile.test.base
Gopkg.lock
Gopkg.toml
LICENSE
Makefile
README.md
boilerplate.go.txt

README.md

Build Status Docker Repository on Quay Go Report Card

kubereplay

Kubereplay aims to make integration of Goreplay and Kubernetes as easy and automated as possible.

Current status

This is an early alpha version. It is not meant to run in production yet.

About

Kubereplay is a Kubernetes add-on to automate capturing and redirection of traffic using Goreplay. It consist of 2 parts that need to run in the cluster - controller and initializer.

How it works:

Kubereplay creates and manages 2 CRDs: Harvesters and Refineries.

Refinery - is responsible for managing dedicated GoReplay deployment used for receiving data from workloads (harvesters). It listens to traffic on tcp socket and then sends it to configured output (stdout, elasticsearch, kafka, http).

Harvester - is used to configure which deployments should be controlled by Kubereplay. Based on selector in Harvester spec Kubereplay will add GoReplay-sidecar to matching deployments. More about initialization process is in the docs

Quickstart

# start minikube with Admission capabilities
$ minikube start --extra-config=apiserver.Admission.PluginNames="Initializers,NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,ResourceQuota"

# start kubereplay controller manager in one console
$ go run cmd/controller-manager/main.go --kubeconfig=~/.kube/config

# start initializer controller in the second
$ go run cmd/initializer-controller/main.go --kubeconfig=~/.kube/config

# add initializer config
$ kubectl create -f sample/initializer-configuration.yaml

# create harvester, refinery and test deployment
$ kubectl create -f sample/harvester.yaml
$ kubectl create -f sample/refinery.yaml
$ kubectl create -f sample/echoserver.yaml

Pre-requisites

  • Kubernetes v1.9+ with admission capabilities enabled.

Deploying Kubereplay

The easiest way to deploy Kubereplay to a real cluster is by using Helm chart:

# add charts repository
$ helm repo add lwolf-charts https://charts.lwolf.org

# update the index if needed
$ helm repo update

# install
$ helm install lwolf-charts/kubereplay

Troubleshooting

If you encounter any issues while using Kubereplay, and your issue is not documented, please file an issue.

Contributing

All kinds of contributions are very much welcome!

  • Fork it
  • Create your feature branch (git checkout -b my-new-feature)
  • Commit your changes (git commit -am 'Added some feature')
  • Push to the branch (git push origin my-new-feature)
  • Create new Pull Request

Changelog

The list of releases is the best place to look for information on changes between releases.

Support

If you're using kubereplay and want to support the development, buy me a beer at Beerpay!

Beerpay