Skip to content

Latest commit

 

History

History
165 lines (92 loc) · 8.26 KB

dev-guide.md

File metadata and controls

165 lines (92 loc) · 8.26 KB

K8ssandra Developer Guide

Ready to write some code? Jump straight to the one of our other guides:

Overview

K8ssandra is a series of projects orchestrated to deliver a cloud-native Apache Cassandra deployment on Kubernetes. To learn more about the project in general jump over to the project's main README.

This guide is aimed at introducing developers to the various technologies and sub-projects involved in K8ssanrdra as well as some of the processes that the project uses to plan and prioritize our work.

Learning Resources

To develop within the K8ssandra ecosystem there are some high-level topics that you'll want to gain experience with:

  • Kubernetes
  • Kind
  • Helm
  • Kubernetes Operator Development
  • Go
  • Apache Cassandra
  • Medusa for Apache Cassandra
  • Reaper for Apache Cassandra
  • Git/GitHub

There are a lot of great learning resources out there related to all of these topics. Here is a small collection of resources that our team has found useful over time.

(If you have any you'd like to add here, we'd love to have the contribution!)

Running K8ssandra

The best way to get into developing parts of K8ssandra is by running it and learning about how it works. We have a ton of great resources for just that in the project Get Started Guide and Documentation.

One of the best ways to run K8ssandra locally is using kind.

If you're using Docker Desktop it's important to properly tune the resources allocated to Docker. Check out this blog for some background on configuring a development type environment.

Development Tools

Depending on the project in which you're working a different set of tools might be used.

Source Control

Git

GitHub CLI

Runtime Envrionment

Docker Desktop

Kind

kubectl

Language Support

Go

Python

Visual Studio Code

GoLand

Project Planning & Management

Within the core K8ssandra team we use a combination of tools to plan and track our roadmap and development process.

The project roadmap is maintained in a GitHub project which can be found here. This roadmap will give a high-level idea of where the project is planning to go in the coming months.

That higher-level roadmap ultimately feeds into the shorter term planning of the core K8ssandra engineering team.

The direct work to be done is captured in GitHub issues - those issues get spread amongst the various projects under the K8ssandra umbrella, described below.

We work on a 2-week sprint cadence - going through the typical ceremonies you'd likely expect from a scrum project: grooming, planning, review, retrospective, etc.

The core development team uses Jira to organize and manage work. Jira issues are synced automatically with GitHub issues, so that both systems contain the same content and discussion on all issues.

The Jira project used is also publicly available (although you will need an Atlassian account) and can be found here.

Projects & Code Repositories

There are a number of projects involved in the K8ssandra ecosystem.

The majority of the projects developed and contributed to through K8ssandra can be found within the k8ssandra GitHub Organization.

k8ssandra/k8ssandra

k8ssandra/k8ssandra represents the high-level umbrella project for the ecosystem. This is primarily a packaging of Helm charts and testing capabilities. This is the project from where K8ssandra is assembled and deployed.

GitHub Repository

k8ssandra/k8ssandra-operator

k8ssandra/k8ssandra-operator represents the next generation of the K8ssandra implementation. This project implements a Kubernetes operator that is responsible for managing the full deployment of K8ssandra across multiple clusters.

GitHub Repository

k8ssandra/cass-operator

k8ssandra/cass-operator is the Kubernetes operator responsible for managing the deployment of Apache Cassandra within a K8ssandra cluster. This project was originally developed under datastax/cass-operator and migrated to the K8ssandra organization.

Github Repository

Docker Hub Repository

k8ssandra/management-api-for-apache-cassandra

k8ssandra/management-api-for-apache-cassandra is a sidecar service layer that attempts to build a well supported set of operational actions on Apache Cassandra nodes that can be administered centrally. This is the layer through which the Apache Cassandra cluster nodes are managed.

GitHub Repository

Docker Hub Repository

k8ssandra/medusa-operator

k8ssandra/medusa-operator is the Kubernetes operator responsible for managing backup and restore capabilities for Apache Cassandra using Medusa.

GitHub Repository

Docker Hub Repository

k8ssandra/reaper-operator

k8ssandra/reaper-operator is the Kubernetes operator responsible for managing repair capabilities for Apache Cassandra using Reaper.

GitHub Repository

Docker Hub Repository

thelastpickle/medusa

thelastpickle/medusa is the tool that K8ssandra has chosen to manage backup and restore capabilities for the Apache Cassandra within the stack. Medusa itself has a vibrant project community that the K8ssandra team regularly contributes to - both to help improve Medusa in general and also to provide features within K8ssandra.

GitHub Respository

thelastpickle/reaper

thelastpickle/reaper is the tool that K8ssandra has chosen to manage repair capabilities for Apache Cassandra within the stack. Like Medusa, Reaper itself has a large project community and has a large basis of usage outside of K8ssandra. The K8ssandra team also regularly contributes to Reaper.

Documentation Site

GitHub Repository

K8ssandra Chart Development Quick Start

Ready to get started working on the helm charts that support the overall K8ssandra deployment? Head over to the K8ssandra Chart Development Quick Start to learn more about setting up to develop, test, and contribute to the K8ssandra charts.

Contributing to Cass Operator

Looking to contribute to Cass Operator? Check out the Contributing guide to learn a bit more about how to develop and test Cass Operator.