aurae-runtime / architecture Goto Github PK
View Code? Open in Web Editor NEWDesign Docs and Decisions. Where the magic happens.
License: Apache License 2.0
Design Docs and Decisions. Where the magic happens.
License: Apache License 2.0
So here is a strong opinion that is weakly held. I would like for us to discuss this in detail.
I believe that auraed
should only start by exposing gRPC server a unix domain socket, as well as a server bound to the special loopback interface lo
man. Additionally I think auraed
should reserve TCP port 57 for its default port.
I believe we should be able to start auraed
and pass configuration to the daemon at runtime to provision gRPC servers attached to various devices.
Some syntax such as this.
sudo -E auraed --listen="lo:127.0.0.1:57" --listen="lo:::1:57" --listen="eth0:10.0.0.100:57"
However we expose the network devices should be uniform and there should be no different between configuring a network device via the command line, or via the gRPC server APIs.
To be clear, I'm not advocating for k8s, I just think we will be asked this question and we should have robust answer. This is supposed to be more "food for thought" kind of issue. I hope we can gather good list of gaps that actually prevents us from achieving things we want on Kube, and help us ensure that we won't fall into same traps with Aurae.
According to #4, Auraes main difference to Kubernetes is an app manifest that's actually programming language (as opposed to yaml). That provides flexibility to dynamically define app runtime. It allows logic like "get this image and push it to core docker registry". All that is wonderful utility for users. Aurae value, as of today, is on client and user experience side, which sucks for k8s.
I also think this could be achieved with very opinionated deployment of k8s (setup registry with all the certificates for image pushing, setup storage both block and object etc.) and well crafted client library that would understand these components and be able to communicate with them.
Imagine client library (in any programming language) that would query k8s api, pull addresses and certificates for docker registry and setup port forwarding or network tunnel. With that and few other components like that, add some magic executor inside pod for dynamic changes to pod apps etc. Kubernetes becomes under-the-hood state machine that handles all the infra (runtime, networking, storage) and Aurae becomes a platform that takes it, other components on top of it and gives user coherent and convenient experience.
Pros of this approach would be:
helm install aurae
+ brew install aurae-client
and we're off to races. We could focus on providing opinionated set of tools + fill gaps where they don't exist, and focus on designing wonderful client library.Now, let me start with things that I, personally, see being potential gaps in Kube that can't be solved by simple wrappers/operators/admission controllers/clients:
#[derive(Pod)]
struct CronDaemonset {}
impl Cron for CronDaemonset {
fn crontab(&self) -> CronTab {
CronTab{"0 8 * * *"}
}
}
impl Scheduling for CronDaemonset {
fn select_nodes(nodes: Vec<Node>) -> Vec<Node> {
nodes
}
}
requiredDuringSchedulingIgnoredDuringExecution
is very clear about what it does, doesn't it? /s). I think we can do better with logic.I'm sure there are other examples of these, let's think on them a bit please.
From GLOSSARY.md
:
Aurae Node is the set of services that provide an Aurae service that exist as a single fault domain
I take the ambiguity of "single fault domain" as a conviction for auraed to work well in multiple production scenarios:
Is this a correct read on the definition of an Aurae Node?
Nomad seems to be built on similar promise as Aurae. I don't know much about it but I think we should compare notes and make sure we know how it relates to Aurae.
We can replace the architecture repository with GitHub discussions for the active decision making.
After a decision has been made we can capture it in the main repository or in an issue.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.