Scylla is an implementation of the Open App Model (OAM) that allow users to deploy and manage applications easily on any Kubernetes cluster with separation of concerns of application developer and operator.
Scylla is currently in alpha. It may reflect the API or features we are vetting before inclusion into the Open App Model spec..
Follow the set up instructions in the Prerequisites section to install Helm 3 and kubectl.
Ensure you have a Kubernetes cluster.
- Azure Kubernetes Service
- Alibaba Kubernetes Service
- Google Kubernetes Engine
- Elastic Kubernetes Service
- Minikube
- Install Scylla on the cluster.
helm install scylla ./charts/scylla --wait
- Install NGINX ingress on your cluster. Currently, Scylla doesn't have any opinions on how to accomplish tasks but rather leverages existing components.
helm install nginx-ingress stable/nginx-ingress
- Register the NGINX component.
kubectl apply -f examples/nginx-component.yaml
- Install your first application. This application is an NGINX server running as a container, exposing port 80 on an ingress route using the hostname
example.com
.
kubectl apply -f examples/first-app-config.yaml
- Hitting the public endpoint of your ingress service should reveal the "Welcome to nginx!" web page.
Users want to focus on describing and building applications easily but achieving this directly with Kubernetes is complex. At the heart of it, container orchestration platform inextricably mixed together application primitives with infrastructure primitives. Different roles like developers and operators have to concern with problems from domains of each other and adjust themselves to understand the whole picture of the underlying infrastructure.
The requirement to deep understand the container infrastructure has introduced the following problems for application deployment and management:
- There is no standard definition for a cloud native application which makes it difficult for users looking for an easier way to modernize.
- There are myriad of tools and ways to accomplish tasks. On one hand, this is positive because it gives users the freedom to choose their own path. However, for users looking for an opinionated way to do things, there is an opportunity.
- It is difficult to have a clear separation of roles between infra operators, app operators and developers. Users are exposed to constructs out of their domain that they have to learn to accomplish day-to-day tasks.
Scylla takes an incremental approach to solving the problems. The current architecture is set of plugins for Kubernetes which allows OAM specifications to be implemented and deployed on Kubernetes clusters using native APIs (and you still use kubectl!).
-
This allows app developers to focus on building OAM components, app operators to focus on operational capabilities through the OAM app config and infra operators to focus on Kubernetes.
-
By leveraging the Open App Model, users now have a framework to define their apps on their Kubernetes clusters.
-
Currently, Scylla will leverage the defined trait to accomplish the task. This gives the freedom to use whatever underlying tool the user wants while providing a trait that focuses on the functionality and not the technology. In the future, Scylla might provide a set of default technologies to provide the functionality desired by a trait.
Get started with the Quick Start guide or read the documentation list for more options.
This project welcomes contributions and suggestions. See CONTRIBUTING.md for more details. Below are links to join the bi-weekly community meetings and our meeting notes. Community Slack channels & mailing lists will be added shortly (~ 10/1).
Item | Value |
---|---|
Mailing List | TBD |
Meeting Information | Bi-weekly (Starting Sept 24th), Tuesdays 10:30AM PST |
Meeting Link | https://zoom.us/j/623691799?pwd=ZWc4SHFNdWpRUVVNYkdJWE9zVHpjZz09 |
Slack Channel | TBD |
Meeting Notes | https://docs.google.com/document/d/1nqdFEyULekyksFHtFvgvFAYE-0AMHKoS3RMnaKsarjs/edit?usp=sharing |
This project follows governance structure of numerous other open source projects. See governance.md for more details.
Scylla is one of the monsters in Homer's Odyssey. Odysseus must steer his ship between Scylla and Charybdis. Scylla is sometimes portrayed as a hydra.
On occasion, we have been asked why Scylla is written in Rust instead of Go. There is no requirement in the Kubernetes world that Kubernetes controllers be written in Go. Many languages implement the Kubernetes API and can be used for creating controllers. We decided to write Scylla in Rust because the language allows us to write Kubernetes controllers with far less code. Rust's generics make it possible to quickly and succinctly describe custom Kubernetes API resources without requiring developers to run code generators. And Rust's Kubernetes library can easily switch between Kubernetes versions with ease. We recognize that Rust might not be to everyone's taste (and neither is Go). However, we are confident that Rust is a solid choice for writing maintainable and concise Kubernetes applications.
This project is available under the terms of the MIT license. See LICENSE.txt.