frisbee
Kubernetes-native framework for declarative testing of distributed systems.
Science Score: 44.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
✓CITATION.cff file
Found CITATION.cff file -
✓codemeta.json file
Found codemeta.json file -
✓.zenodo.json file
Found .zenodo.json file -
○DOI references
-
○Academic publication links
-
○Academic email domains
-
○Institutional organization owner
-
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (15.4%) to scientific vocabulary
Keywords
Repository
Kubernetes-native framework for declarative testing of distributed systems.
Basic Info
- Host: GitHub
- Owner: CARV-ICS-FORTH
- License: apache-2.0
- Language: Go
- Default Branch: main
- Homepage: https://frisbee.dev
- Size: 128 MB
Statistics
- Stars: 51
- Watchers: 5
- Forks: 5
- Open Issues: 26
- Releases: 41
Topics
Metadata Files
README.md
Frisbee - A Test Automation Framework For Kubernetes
Website |
Blog |
Docs |
Contact
What is Frisbee ?
Frisbee is the first Kubernetes framework designed to support declarative end-to-end system testing of containerized applications.
:heavycheckmark: Design end-to-end testing scenarios in an intuitive language!
:heavycheckmark: Run the actual production software - no mocks!
:heavycheckmark: Replay complex workloads through automated workflows!
:heavycheckmark: Combine Chaos Engineering with large-scale performance testing!
:heavycheckmark: Verify program behavior through programmable assertions!
To learn more about Frisbee, check the Walkthrough tutorial or visit our Website.
Testing Patterns
In declarative testing, a test scenario focuses on what to accomplish rather than on the imperative details of how to manipulate the state of an application under test and verify the final application state against an expected state.
This approach not make tests more readable, maintainable, and reproducible, but it also help devops in identifying testing patterns.
Here, you can see some testing patterns we have identified across different application domains.
👉 HPC
👉 CI
Getting Started
Step 1 – Prerequsities:
To run Frisbee you must have access to a running Kubernetes cluster and ensure that kubectl and Helm are installed on your system.
For quick testing, you can use microk8s to deploy a local Kubernetes cluster on your machine.
shell
sudo microk8s config > ~/.kube/config
sudo microk8s enable dns
sudo microk8s enable ingress
sudo microk8s enable helm3
sudo snap alias microk8s.kubectl kubectl
sudo snap alias microk8s.helm3 helm
Step 2 – Install Frisbee on K8s cluster:
Firstly, we need to download the Frisbee CLI:
shell
curl -sSLf https://frisbee.dev/install.sh | sudo bash
export PATH=$PATH:/usr/local/bin
Since the majority of Frisbee operations happens through this CLI, it is suggested to enable the autocompletion.
shell
source <(kubectl-frisbee completion bash)
As usual, use
tab twiceto get the CLI fields auto-completed.
The next step is to install Frisbee in your Kubernetes cluster.
shell
kubectl-frisbee install production
kubectl logs -l control-plane=frisbee-operator -n frisbee --follow
Finally, you can download the Frisbee project to get access to the ready-to-use examples.
shell
git clone git@github.com:CARV-ICS-FORTH/frisbee.git
cd frisbee
Step 3 – Submit a testing job:
To submit a testing job, the general syntax is:
shell
kubectl-frisbee submit test <testName> <scenario.yaml> <path to dependent charts>
Conventionally, we separate the test-cases from the templates of the system under evaluation.
- examples: contains a list of test-cases.
- charts: contains Helm charts that provide templates used in the test-cases.
Let's try to run a scenario from the tutorial.
shell
kubectl-frisbee submit test demo- ./examples/tutorial/15.performance-monitoring.yml ./examples/apps/iperf2/ ./charts/system/
* demo-: demo is the naming prefix, and the - indicate an autogenerated postfix (e.g, demo-326)
* ./examples/tutorial/15.performance-monitoring.yml: the scenario executes the iperf benchmark and the monitoring stack for observing its execution.
* ./examples/apps/iperf2: provides the application templates used within the scenario.
* ./charts/system: provides system-wide templates for the telemetry stack, chaos injection, etc.
Inspect Submitted Jobs:
To get a list of submitted tests, use:
shell
kubectl frisbee get tests
Note that every test-case runs on a dedicated namespace (named after the test). To further dive into execution details use:
shell
kubectl frisbee inspect tests demo-326
Step 4 – Live Progress Monitoring:
The last section of inspect provides the URLs for accessing Prometheus/Grafana.
Note that every scenario has its own monitoring stack in order to avoid interfering metrics.
shell
firefox $(kubectl frisbee inspect tests demo-326 | grep grafana- | awk '{print $3'})
In contrast to the vanilla Grafana which plots only the performance metrics, Frisbee
provides Contextualized Visualizations that contain information for:
- Joining nodes (blue vertical lines)
- Exiting nodes (orange vertical lines)
- Fault-Injection (red ranges)
Information like that helps in root-cause analysis, as it makes it easy to correlate
an observed behavior back to a testing event.
For example, in the next figure, it fairly easy to understand that INSERT_ERROR messages (yellow line) are triggered
by a fault-injection event.
Step 5 – Auto-generate test reports:
Finally, Frisbee provides an advanced functionality for auto-generating reports for the tests.
shell
kubectl-frisbee report test demo-326 ~/frisbee-reports --pdf --force
This will create report on ~/frisbee-reports directory including the pdf from Grafana.
Features
👉 Workflow templating to store commonly used workflows in the cluster.
👉 DAG based declaration of testing workflows.
👉 Step level input & outputs (template parameterization).
👉 Conditional Execution (Time-Driven, Status-Driven, Performance-Driven).
👉 Live Progress monitoring via Prometheus/Grafana.
👉 Assertions and alerting of SLA violations.
👉 Placement Policies (affinity/tolerations/node selectors).
👉 Archiving Test results after executing for later access.
👉 Garbage collection of completed resources.
👉 Chaos-Engineering and Fault-Injection via Chaos-Mesh.
👉 On-Demand reliable container attached storage.
👉 CLI applications to test management and test inspection.
Citation
If you publish work that uses Frisbee, please cite Frisbee as follows:
bibtex
@article{nikolaidis2021frisbee,
title={Frisbee: automated testing of Cloud-native applications in Kubernetes},
author={Nikolaidis, Fotis and Chazapis, Antony and Marazakis, Manolis and Bilas, Angelos},
journal={arXiv preprint arXiv:2109.10727},
year={2021}
}
Contributing to Frisbee
We welcome contributions. Please see CONTRIBUTING.md to get started!
Acknowledgements
This project has received funding from the European Union's Horizon 2020 research and innovation programme under grant agreement No. 894204 (Ether, H2020-MSCA-IF-2019).
Owner
- Name: Computer Architecture and VLSI Systems (CARV) Laboratory
- Login: CARV-ICS-FORTH
- Kind: organization
- Location: Heraklion, Greece
- Website: http://www.ics.forth.gr/carv/
- Repositories: 53
- Profile: https://github.com/CARV-ICS-FORTH
Citation (CITATION.cff)
cff-version: 1.1.0 message: "If you use this software, please cite it as below." authors: - family-names: "Nikolaidis" given-names: "Fotis" orcid: "https://orcid.org/0000-0002-9379-6233" title: "frisbee: a Kubernetes-native platform for exploring, testing, and benchmarking distributed applications" version: 1.0.0 doi: 10.5281/zenodo.5566624 date-released: 2021-11-08 url: "https://github.com/CARV-ICS-FORTH/frisbee"
GitHub Events
Total
- Watch event: 4
- Push event: 293
Last Year
- Watch event: 4
- Push event: 293
Issues and Pull Requests
Last synced: 6 months ago
All Time
- Total issues: 56
- Total pull requests: 96
- Average time to close issues: 2 months
- Average time to close pull requests: about 5 hours
- Total issue authors: 2
- Total pull request authors: 2
- Average comments per issue: 0.18
- Average comments per pull request: 0.01
- Merged pull requests: 95
- Bot issues: 0
- Bot pull requests: 0
Past Year
- Issues: 0
- Pull requests: 1
- Average time to close issues: N/A
- Average time to close pull requests: about 8 hours
- Issue authors: 0
- Pull request authors: 1
- Average comments per issue: 0
- Average comments per pull request: 1.0
- Merged pull requests: 1
- Bot issues: 0
- Bot pull requests: 0
Top Authors
Issue Authors
- fnikolai (39)
- kdamaski (8)
Pull Request Authors
- fnikolai (82)
- URunDEAD (2)
Top Labels
Issue Labels
Pull Request Labels
Packages
- Total packages: 2
- Total downloads: unknown
-
Total dependent packages: 0
(may contain duplicates) -
Total dependent repositories: 0
(may contain duplicates) - Total versions: 83
proxy.golang.org: github.com/carv-ics-forth/frisbee
Package embed is used to embed the various required scripts into the Frisbee Terminal. This allows to execute the Terminal from any path. For more info see https://zetcode.com/golang/embed/
- Homepage: https://github.com/carv-ics-forth/frisbee
- Documentation: https://pkg.go.dev/github.com/carv-ics-forth/frisbee#section-documentation
- License: Apache-2.0
-
Latest release: v1.0.43
published over 2 years ago
Rankings
proxy.golang.org: github.com/CARV-ICS-FORTH/frisbee
- Documentation: https://pkg.go.dev/github.com/CARV-ICS-FORTH/frisbee#section-documentation
- License: apache-2.0
-
Latest release: v1.0.43
published over 2 years ago
Rankings
Dependencies
- cloud.google.com/go v0.81.0
- github.com/Azure/go-autorest v14.2.0+incompatible
- github.com/Azure/go-autorest/autorest v0.11.12
- github.com/Azure/go-autorest/autorest/adal v0.9.5
- github.com/Azure/go-autorest/autorest/date v0.3.0
- github.com/Azure/go-autorest/logger v0.2.0
- github.com/Azure/go-autorest/tracing v0.6.0
- github.com/Knetic/govaluate v3.0.0+incompatible
- github.com/Masterminds/goutils v1.1.1
- github.com/Masterminds/semver/v3 v3.1.1
- github.com/Masterminds/sprig/v3 v3.2.2
- github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e
- github.com/beorn7/perks v1.0.1
- github.com/cespare/xxhash/v2 v2.1.1
- github.com/davecgh/go-spew v1.1.1
- github.com/evanphx/json-patch v4.11.0+incompatible
- github.com/form3tech-oss/jwt-go v3.2.2+incompatible
- github.com/fsnotify/fsnotify v1.4.9
- github.com/go-logr/logr v0.4.0
- github.com/go-logr/zapr v0.4.0
- github.com/gogo/protobuf v1.3.2
- github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e
- github.com/golang/protobuf v1.5.2
- github.com/golanghelper/grafana-webhook v0.0.0-20180512191629-e0da26114467
- github.com/google/go-cmp v0.5.5
- github.com/google/gofuzz v1.1.0
- github.com/google/uuid v1.1.2
- github.com/googleapis/gnostic v0.5.5
- github.com/gosimple/slug v1.9.0
- github.com/grafana-tools/sdk v0.0.0-20211015115518-56cdea6a09d6
- github.com/hashicorp/golang-lru v0.5.4
- github.com/huandu/xstrings v1.3.1
- github.com/imdario/mergo v0.3.12
- github.com/json-iterator/go v1.1.11
- github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369
- github.com/mitchellh/copystructure v1.0.0
- github.com/mitchellh/mapstructure v1.4.1
- github.com/mitchellh/reflectwalk v1.0.0
- github.com/moby/spdystream v0.2.0
- github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd
- github.com/modern-go/reflect2 v1.0.1
- github.com/nxadm/tail v1.4.8
- github.com/onsi/ginkgo v1.16.4
- github.com/onsi/gomega v1.13.0
- github.com/orcaman/concurrent-map v0.0.0-20210501183033-44dafcb38ecc
- github.com/pkg/errors v0.9.1
- github.com/prometheus/client_golang v1.11.0
- github.com/prometheus/client_model v0.2.0
- github.com/prometheus/common v0.32.0
- github.com/prometheus/procfs v0.6.0
- github.com/rainycape/unidecode v0.0.0-20150907023854-cb7f23ec59be
- github.com/robfig/cron/v3 v3.0.1
- github.com/shopspring/decimal v1.2.0
- github.com/sirupsen/logrus v1.7.0
- github.com/spf13/cast v1.3.1
- github.com/spf13/pflag v1.0.5
- go.uber.org/atomic v1.7.0
- go.uber.org/multierr v1.6.0
- go.uber.org/zap v1.17.0
- golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83
- golang.org/x/lint v0.0.0-20210508222113-6edffad5e616
- golang.org/x/net v0.0.0-20210525063256-abc453219eb5
- golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c
- golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c
- golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d
- golang.org/x/text v0.3.6
- golang.org/x/time v0.0.0-20210611083556-38a9dc6acbc6
- golang.org/x/tools v0.1.2
- gomodules.xyz/jsonpatch/v2 v2.2.0
- google.golang.org/appengine v1.6.7
- google.golang.org/protobuf v1.26.0
- gopkg.in/inf.v0 v0.9.1
- gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7
- gopkg.in/yaml.v2 v2.4.0
- gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b
- k8s.io/api v0.21.2
- k8s.io/apiextensions-apiserver v0.21.2
- k8s.io/apimachinery v0.21.2
- k8s.io/client-go v0.21.2
- k8s.io/component-base v0.21.2
- k8s.io/klog/v2 v2.8.0
- k8s.io/kube-openapi v0.0.0-20210305001622-591a79e4bda7
- k8s.io/utils v0.0.0-20210527160623-6fdb442a123b
- sigs.k8s.io/controller-runtime v0.9.2
- sigs.k8s.io/structured-merge-diff/v4 v4.1.0
- sigs.k8s.io/yaml v1.2.0
- 854 dependencies
- actions/checkout v3 composite
- actions/setup-go v3 composite
- actions/cache v3 composite
- actions/checkout v3 composite
- trilom/file-changes-action v1.2.4 composite
- actions/cache v3 composite
- actions/checkout v3 composite
- balchua/microk8s-actions v0.2.2 composite
- actions/cache v3 composite
- actions/checkout v3 composite
- docker/login-action v1 composite
- docker/setup-buildx-action v1 composite
- docker/setup-qemu-action v1 composite
- actions/checkout v3 composite
- actions/setup-python v3 composite
- helm/chart-testing-action v2.0.1 composite
- stefanprodan/helm-gh-pages master composite
- actions/cache v3 composite
- actions/checkout v3 composite
- actions/setup-go v3 composite
- goreleaser/goreleaser-action v3 composite
- jgehrcke/github-repo-stats v1.4.0 composite
- actions/cache v3 composite
- actions/checkout v3 composite
- actions/setup-go v3 composite
- balchua/microk8s-actions v0.2.2 composite
- alpine latest build
- golang 1.19 build
- gcr.io/cadvisor/cadvisor v0.46.0 build
- jrei/systemd-ubuntu 22.04 build
- prom/prometheus latest build