{"id":15056759,"url":"https://github.com/k8ssandra/k8ssandra-operator","last_synced_at":"2025-05-16T03:05:57.577Z","repository":{"id":37467071,"uuid":"376126748","full_name":"k8ssandra/k8ssandra-operator","owner":"k8ssandra","description":"The Kubernetes operator for K8ssandra","archived":false,"fork":false,"pushed_at":"2025-05-05T03:55:43.000Z","size":24888,"stargazers_count":191,"open_issues_count":308,"forks_count":81,"subscribers_count":15,"default_branch":"main","last_synced_at":"2025-05-05T04:31:50.085Z","etag":null,"topics":["cassandra","k8s","kubernetes","rag","vector-database"],"latest_commit_sha":null,"homepage":"https://k8ssandra.io/","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/k8ssandra.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG/CHANGELOG-1.0.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2021-06-11T19:40:31.000Z","updated_at":"2025-05-05T03:43:06.000Z","dependencies_parsed_at":"2023-09-29T03:31:08.490Z","dependency_job_id":"ef068116-76c4-4106-b5ec-d345dcb4aec1","html_url":"https://github.com/k8ssandra/k8ssandra-operator","commit_stats":{"total_commits":762,"total_committers":39,"mean_commits":19.53846153846154,"dds":0.7742782152230971,"last_synced_commit":"159abc520582eb8c5d1219a05dcca4056df81a94"},"previous_names":[],"tags_count":59,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/k8ssandra%2Fk8ssandra-operator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/k8ssandra%2Fk8ssandra-operator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/k8ssandra%2Fk8ssandra-operator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/k8ssandra%2Fk8ssandra-operator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/k8ssandra","download_url":"https://codeload.github.com/k8ssandra/k8ssandra-operator/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254459088,"owners_count":22074605,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cassandra","k8s","kubernetes","rag","vector-database"],"created_at":"2024-09-24T21:56:08.948Z","updated_at":"2025-05-16T03:05:52.568Z","avatar_url":"https://github.com/k8ssandra.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# K8ssandra Operator\n\n\nThis is the Kubernetes operator for K8ssandra.\n\n**[Documentation site](https://docs.k8ssandra.io/)**\n\nk8ssandra-operator is a turnkey solution to manage [Apache Cassandra](https://cassandra.apache.org/_/index.html) and [DSE](https://www.datastax.com/products/datastax-enterprise) on Kubernetes. Apache Cassandra is the premiere wide column NoSQL data store, offering low latency, geo-replication, and the capacity to store petabytes of data. Apache Cassandra is in use in 90% of the Fortune 500 in some capacity. \n\nDataStax Enterprise, DSE, is the DataStax distribution of Apache Cassandra, offering additional features such as advanced security, search, and graph, as well as features not yet available in Cassandra like vector search for generative AI applications.\n\nk8ssandra-operator allows for the deployment of multiple Apache Cassandra datacenters, spanned over multiple Kubernetes clusters. The intention of this architecture is to provide geo-replication to enhance latency (by moving data closer to the end user) and availability (by providing multiple datacenters to serve requests in the event of a datacenter failure or network partition).\n\nApache Cassandra offers rack and failure zone aware data replication which is both replicated and sharded for performance and protection. \n\nIt incorporates the following functionality;\n\n### Deployment\n\nApache Cassandra can be deployed into multiple datacenters in separate regions or availability/failure zones. k8ssandra-operator makes this possible by enabling communication between multiple Kubernetes clusters and deploying Cassandra datacenters into them.\n\nThis distinguishes k8ssandra-operator from [cass-operator](https://github.com/k8ssandra/cass-operator) (which is used internally within k8ssandra-operator) which does not automate multi-region deployments.\n\nA single k8ssandra-operator instance in a control plane cluster can manage many data plane DCs across multiple Kubernetes clusters, and split across multiple Cassandra clusters. Clusters of up to 1000 nodes have been [tested](https://dok.community/blog/1000-node-cassandra-cluster-on-amazons-eks/) and confirmed to perform well.\n\nAdvanced Cassandra features such as Change Data Capture (CDC) are supported and can be configured using Kubernetes manifests.\n\n### Monitoring\n\nMonitoring is a critical service in any distributed system, and k8ssandra-operator provides a rich suite of Apache Cassandra metrics via an [agent](https://github.com/k8ssandra/management-api-for-apache-cassandra) added to the Cassandra JVM. \n\nBy integrating with [Vector](https://vector.dev/), k8ssandra-operator allows metrics to flow to a location of the user's choice, including an existing [Prometheus](https://prometheus.io/) or [Mimir](https://grafana.com/oss/mimir/) instance. A variety of other protocols and systems such as AMQP, Elasticsearch, Kafka, or Redis (see [here](https://vector.dev/docs/reference/configuration/sinks/) for a full list of integrations) are also supported.\n\nMetrics pipelines can be configured using Kubernetes custom resources, allowing for the creation of multiple pipelines to support different use cases across many clusters.\n\nCassandra auditing and monitoring features such as full query logging are supported and can be configured direct from a K8ssandraCluster manifest.\n\n### Repairs and data maintenance\n\nApache Cassandra requires regular maintenance to ensure data is replicated consistently across the cluster. k8ssandra-operator automates this process by running repairs on a regular schedule using [Reaper](https://cassandra-reaper.io/), a widely adopted solution for anti-entropy repairs in Cassandra maintained by the K8ssandra team.\n\nUsing k8ssandra-operator, you can use Kubernetes manifests to configure and monitor the success of repair schedules across many Cassandra datacenters and clusters.\n\n### Backup and restore\n\nk8ssandra-operator uses [Medusa](https://github.com/thelastpickle/cassandra-medusa) to enable backup of Cassandra's SSTables to cloud storage locations such as S3 buckets, GCS and Azure storage.\n\nBackup and restore schedules can be configured using Kubernetes manifests, allowing for declarative, auditable management of backup and restore processes.\n\n### Flexible APIs\n\n[Stargate](https://stargate.io/) for Apache Cassandra offers advanced APIs including integration with the [Mongoose](https://mongoosejs.com/) object modelling framework for node.js, GraphQL, and REST. It can also enhance Cassandra's native CQL performance in some cluster topologies.\n\nUsing k8ssandra-operator, Stargate can be deployed and configured via simple Kubernetes manifests.\n\n### Where to from here?\n\nThis documentation covers everything from install details, deployed components, configuration references, and guided outcome-based tasks. \n\nTo install k8ssandra-operator start [here] ({{\u003c relref \"install/\" \u003e}}).\n\nBe sure to leave us a \u003ca class=\"github-button\" href=\"https://github.com/k8ssandra/k8ssandra\" data-icon=\"octicon-star\" aria-label=\"Star k8ssandra/k8ssandra on GitHub\"\u003estar\u003c/a\u003e on Github!\n\n## Architecture\nThe K8ssandra operator is being developed with multi-cluster support first and foremost in mind. It can be used seamlessly in single-cluster deployments as well.\n\nK8ssandra Operator consists of a control plane and a data plane.\nThe control plane creates and manages object that exist only in the API server. The control plane does not deploy or manage pods. \n\n**Note:** The control plane can be installed in only one cluster, i.e., the control plane cluster. \n\nThe data plane can be installed on any number of clusters. The control plane cluster can also function as the data plane.\n\nThe data plane deploys and manages pods. Moreover, the data plane may interact directly with the managed applications. For example, the operator calls the management-api to create keyspaces in Cassandra.\n\n### Diagram\n\nIn this diagram you can see a small example of a multi-cluster deployment.\n\n![](docs/static/images/k8ssandra-cluster-architecture.png)\n\n### Requirements\nIt is required to have routable pod IPs between Kubernetes clusters; however this requirement may be relaxed in the future.\n\nIf you are running in a cloud provider, you can get routable IPs by installing the Kubernetes clusters in the same VPC.\n\nIf you run multiple kind clusters locally, you will have routable pod IPs assuming that they run on the same Docker network which is normally the case. We leverage this for our multi-cluster E2E tests.\n\n\n\u003c!--\nThis section needs to be moved elsewhere, probably a dedicated page of its own.\n\n## Connecting to remote clusters\nThe control plane needs to establish client connections to remote cluster where the data plane runs. Credentials are provided via a [kubeconfig](https://kubernetes.io/docs/tasks/access-application-cluster/configure-access-multiple-clusters/) file that is stored in a Secret. That secret is then referenced via a `ClientConfig` custom resource.\n\nA kubeconfig entry for a cluster hosted by a cloud provider with include an auth token for authenticated with the cloud provider. That token expires. If you use one of these kubeconfigs be aware that the operator will not be able to access the remote cluster once that token expires. For this reason it is recommended that you use the [k8ssandra-client](https://github.com/k8ssandra/k8ssandra-client) for configuring a connection to the remote cluster.\n--\u003e\n\n## Installing the operator\nSee the install [guide](https://docs.k8ssandra.io/install/).\n\n\n## Contributing\nFor more info on getting involved with K8ssandra, please check out the [k8ssandra community](https://k8ssandra.io/community/) page.\n\nThe remainder of this section focuses on development of the operator itself.\n\n\n## Community\nCheck out the full K8ssandra docs at [k8ssandra.io](https://k8ssandra.io/).\n\nStart or join a forum discussion at [forum.k8ssandra.io](https://forum.k8ssandra.io/).\n\nJoin us on Discord [here](https://discord.gg/YewpWTYP0).\n\nFor anything specific to K8ssandra 1.x, please create the issue in the [k8ssandra](https://github.com/k8ssandra/k8ssandra) repo. \n\n## Development\nSee the development [guide](docs/development/README.md).\n\n\u003cimg referrerpolicy=\"no-referrer-when-downgrade\" src=\"https://static.scarf.sh/a.png?x-pxid=af8bf51c-d84e-43bf-875d-0c8f3b5169b9\" /\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fk8ssandra%2Fk8ssandra-operator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fk8ssandra%2Fk8ssandra-operator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fk8ssandra%2Fk8ssandra-operator/lists"}