13 ms·
Acorn: A simple application deployment framework for Kubernetes
- ofrzeta 4y agoThat has been posted three times in the last 30 days. One time with comments: https://news.ycombinator.com/item?id=32331892 https://news.ycombinator.com/item?id=32331892
- deleted 4y ago[deleted]
- deleted 4y ago[deleted]
- bandrade2020 4y agoIs it a copy of https://github.com/theketchio/ketch https://github.com/theketchio/ketch ?
- rektide 4y agoThe New Stack had a writeup that actually covered it's usage nicely. It looks like it's a pretty fast/convenient way to package apps & declare some dependencies (DBs) qyickly, & get a nice managed namespace of everything one would expect. https://thenewstack.io/acorn-a-lightweight-portable-paas-for-kubernetes/ https://thenewstack.io/acorn-a-lightweight-portable-paas-for...
- mellosouls 4y agoGood luck to them and all that but given the significant legacy of the Acorn name in computing history, they could maybe have dug deeper for a title.
- liftm 4y agoHow do you run Flink on it anyway?
- deleted 4y ago[deleted]
- javier2 4y agoHow does Rancher have any money left?
- qbasic_forever 4y agoRancher the company was acquired by Suse: https://www.suse.com/c/suse-acquires-rancher/ https://www.suse.com/c/suse-acquires-rancher/ It looks like Acorn is not related to Rancher at all beyond the creators being former Rancher founders.
- didip 4y agoTwo thoughts when reading the Acornfile: 1. Ugh, yet another DSL. Why not just use Lua? 2. The config file still looks complicated. What makes this better than writing your own Helm chart or Docker Compose?
- deleted 4y ago[deleted]
- v3ss0n 4y agoYAML should be fine if it is not badly designed like Kubernetes helms .
- linuxdude314 4y agoOverall it looks pretty hacked together. For instance, instead of using an object model or tuples to represent ports, acorn uses a list of strings where each string holds multiple delimited values. Ex. ports: [ "80/http", "8080/http", ] While a stylistic choice, it also makes it a PITA for others to write parsers for their DSL, and generally isn’t as readable as say the vanilla Kubernetes port model. Next let’s take a look at the level of abstraction provided. Typically with a PaaS you are at a higher level of abstraction than an IaaS platform. args: { // defines arguments the consumer can provide } profiles: { // defines a set of default arguments for different deployment types } containers: { // defines the containers to run the application } volumes: { // defines persistent storage volumes for the containers to consume } jobs: { // defines tasks to run on changes or via cron } acorns: { // other Acorn applications that need to be deployed with your app (databases, etc.) } secrets: { // defines secret bits of data that are automatically generated or passed by the user } localData: { // default data and configuration variables } Looking at the list above of what we need (or can) provide for a deployment, it doesn’t seem we are at any higher a level of abstraction than we are when just using Kubernetes. It’s incredibly easy to have the same artifact deployed in multiple environments using Kubernetes with no additional tooling. So all this leaves me with the question, why?
- V99 4y ago> Ex. ports: [ "80/http", "8080/http", ] > While a stylistic choice, it also makes it a PITA for others to write parsers for their DSL, and generally isn’t as readable as say the vanilla Kubernetes port model. These are CLI shorthands. There is a canonical expanded-out object that you would use if you were scripting something or talking to the API. > Looking at the list above of what we need (or can) provide for a deployment, it doesn’t seem we are at any higher a level of abstraction than we are when just using Kubernetes. Of course the same basic concepts of what to run, where to store output and how to take input are needed to describe computing. But there's two ways to run things ("containers" stay running, "jobs" finish) instead of 8 to choose from (bare pod, deployment, replicationcontroller, replicaset, daemonset, statefulset, cronjob, job) with all slightly varying syntaxes. The args/volumes/secrets aren't just things that will be created, but also documentation and first-class objects that can be configured/overridden by the consumer of the Acorn. Without you adding dozens of lines of values.yaml and golang template soup to a helm chart to allow every possible configuration a user might want (and never quite the same way in two different helm charts from 2 different people). You can create an image with reasonable defaults to work for dev/toying around on a laptop; run a local database, generate the secret for it automatically, etc. With the tools needed to ship and run that same artifact in production but pointed at a real DB in RDS. Packaged up as one OCI image so there's one artifact to manage from one source, instead of a helm chart + n images from n containers from n registries. (Acorn cofounder)
- ttymck 4y agoAcornfiles? I feel like when you introduce a new config format, a common expectation will be having a prominent "Why Acornfiles?" page where you explain why this new format is necessary. Without it, I personally groan and look away. With it, you are still wasting time explaining your config format, time that should be spent explaining the benefits of the larger system you're offering.
- dhsysusbsjsi 4y agoExactly this. I groan every time there’s a new yaml config format to learn, develop for and support. It feels like: https://xkcd.com/927/ https://xkcd.com/927/
- ianbutler 4y agoWhat would you suggest as an alternative? Legitimately curious what people think here.
- 0xBAADA555 4y agoJust use the Deployment YAMLs we already have.
- stingraycharles 4y agoYAML or JSON, mainly just any format that already exist. I don’t understand why a new syntax is required, especially when the ecosystem they operate in (k8s) is already dominated by YAML.
- cturner 4y agoInterface Script http://songseed.org/post/20200607.aa.interface_script.html http://songseed.org/post/20200607.aa.interface_script.html (n-dimension csv)
- rockostrich 4y agoIt's JSON with some syntactical sugar. Is that really so bad?
- CSSer 4y agoI have good evidence to believe one of the PaaS we use at work uses K8s for deployments under the hood but it’s not like that provides any portability to us; and they certainly don’t advertise that. How is this any different? I guess my point is that at this level of abstraction k8s seems almost irrelevant.
- deleted 4y ago[deleted]
- gtirloni 4y agoRio undead?
- darren0 4y agoIn some ways. The same team that created Rio created Acorn.
- eric4smith 4y agoThis is nice. But the real problem is Kubernetes. What do I mean by that? I mean the setup, care and feeding of K8s. It's nice to have a tool that you can quickly push stuff to K8s. There are other tools out there that do that too. The thing is this, the majority of people who use K8s, don't need to use K8s. Those people could easily get by with something like Dokku or even just start containers by hand to deploy. Acorn is just perpetuation the cycle of recommending the over-engineering of K8s for small workloads and small companies that really and truly don't need it. I'll say it again people. Spin up a few giant servers and call it a day. Save thousands of dollars in hosting costs and tens of thousands if not hundreds of thousands of dollars in engineer hiring costs. Bonus side effect? 10x performance than a passel of wimpy VPS's. P.S. I'm coming from using K8s in both Google Cloud and on Bare Metal.
- V99 4y ago(Acorn cofounder) We largely agree ourselves (so much we wrote Rancher 1.x with its own simpler runtime, before k8s took over the world). But that's the obvious runtime the market is interested in right now. So what we are focusing on is let the infrastructure/ops team do their k8s thing, but insulate the devs/people that just want to run apps from it. If real demand for it appears, with that abstraction we could write an alternate backend that talks to say Nomad or a-fancy-shell-script-that-runs-docker-cli instead of k8s. And then your app's Acornfile could now run on a totally different runtime, with no (or maybe minimal) changes.
- sergey4brin 4y ago
- vbezhenar 4y agoI’m migrating from few giant servers to k8s. So far I like it.
- ianbutler 4y agoYou're missing the point of Kubernetes. Kubernetes is so organizations can have a standard way to deploy infrastructure that makes talent and knowledge portable between organizations. Everyone building their infrastructure from a kluge of their own scripts is not the way forward for the industry imo. You're fair to argue then we should have a less complicated tool that's being standardized on but Kubernetes is where the industry is congregating now and that less complicated tool, that satisfies the most use cases and a high level of standardization, has yet to emerge, there have been multiple that have tried but never gained traction or outright proved to actually be more complex to manage once you go beyond small businesses. Personally as a maturing profession we should stop reinventing the wheel for much of our tooling, adopt common tooling across as much of the industry as we can and then draft and produce standards engineers can work by so we stop having so much slop across the industry.
- ianbutler 4y agoI don't understand why everyone is using their own OCI compatible image formats for PaaS, it seems anti user, and likely decreases portability. Adding your own image format over complicates this when you can rely on docker images or nixpacks or whatever. Having 10 competing image formats is anything but useful.
- qbasic_forever 4y agoMost things are storing more than just container images in OCI registries. This stores images plus metadata like kubernetes manifests, configuration, etc. all in the registry (I assume, I only skimmed the docs). People do this because the registry is the source of truth for what their production can talk to, for example if they use a managed registry or deploy their own like Harbor it simplifies access control and locking down your service.
- the_duke 4y agoI don't really see the big value proposition here. Sure, deploying a single app config is much more awkward than it should be. (Build config: Helm, Jsonnet, Cue, kustomize,...? How to deploy: Gitops/CI, manually , Octopus, Tekton, Argo, ... ?) But the real difficulty is in connecting different parts of your architecture. The Getting Started example is extremely flawed: for local development you want a local Postgres and Redis, but in production those will either be provided by the environment (RDS etc) or self-managed,but as a separate deployment because the authorization/lifetime/scaling/upgrade requirements are very different. Local, staging and production are so diverse that you will always need extensive customization. And there is no way around that, because the needs are fundamentally different. There definitely is an opportunity to make this easier. It would have to either be done with tooling that has extensive integrations with cloud providers, or with a distinct end to end platform. But I don't see how Acorn helps with that all.
- darren0 4y agoThis exact use case is built into acorn. In the getting starting guide redis/postgres are included in the acorn, but in production those services can easily be overwritten with any k8s service and the embedded containers will not be ran. This is referred to as linking: https://docs.acorn.io/running/linking-acorns https://docs.acorn.io/running/linking-acorns The docs only refer to linking acorns but the exact same thing works with linking a k8s service to an acorn. Disclosure: acorn creator.
- jiggawatts 4y agoAt $dayjob someone complained that all of the deployments I had done were inconsistent, and that I wasn’t using repeatable patterns. I said: until you give me two consistent applications I can’t give you consistent patterns! Literally everything is unique and special and has distinct requirements for each environment. The orgs that can get the economies of scale are doing some combination of: - developing everything in house for the same platform in the same langue with the same tooling. - deploying thousands of apps, which means even rare configurations will have dozens of identical examples. - never deploying weird proprietary apps with quirky licensing or crazy pricing models for non-production. - don’t care about the cost of non-production and are happy to overpay for hardware to ensure consistency with production. Even at large government departments none of the above is true. This results in many unique deployments and no cost savings from templating or automation.
- cheriot 4y agoA proprietary wrapper around a few k8s objects? Where's the big win? It's not clear what problem Acorn is solving.
- heywoodlh 4y ago> A proprietary wrapper Forgive me if this is obvious, but isn't Acorn open source[1]? How is it proprietary? [1] https://github.com/acorn-io/acorn https://github.com/acorn-io/acorn
- derefr 4y agoThey were probably reaching for the opposite of “is defined by a standard with an open-membership standards body”, found that there isn’t really a word for that, and so used the next-closest thing in concept-space. (Though also, they’re technically correct — “proprietary” just means “controlled by one party.” Open-source things can still be proprietary: namely, if you’re free to fork, but the original upstream can only be merged to by employees of a corporation. I believe e.g. most of Apple’s “open source” is proprietary in this sense.)
- heywoodlh 4y ago> Though also, they’re technically correct — “proprietary” just means “controlled by one party.” Open-source things can still be proprietary Awesome, thanks for this explanation -- this is why I asked. I had always equated proprietary to closed source. Good to have my definition expanded. Thank you!
- neilwilson 4y agoYes Kubernetes YAMLs are a PITA. But you can just wrap them in a scripting language like Ruby that makes it easy to create a DSL. [0]: https://www.brightbox.com/blog/2020/02/12/rubynetes-kubernetes-config-the-easy-way/ https://www.brightbox.com/blog/2020/02/12/rubynetes-kubernet... Use a language rather than a tool if you need the flexibility.
- sofixa 4y ago> Use a language rather than a tool if you need the flexibility The problem with a fully fledged language is the flexibility. There is enough of it to make a mess unless you and your teammates are highly skilled and disciplined. Messy code sucks to deal with, debug, modify; let alone when it's infrastructure code where a wrong logical loop can delete your database or persistent volume. Infrastructure as code, not with code. DSLs, with their limitations, ensure there's a lot less you can shoot yourself in the foot with, and that everyone vaguely familiar with that DSL can read your code and be absolutely sure what it does, worst case scenario with a Google search or two. No such thing is possible with code in a language as complex and as flexible as Ruby, Python or JavaScript. Disclaimer: i work at Hashicorp that happens to have one of the most popular IaC DSLs out there, but i have believed that tools like Pulimi are little more than a disaster waiting to happen long before joining.
- KronisLV 4y agoWhat about when you just want things to work, rather than running into some weird abstraction related issues along the way, that you cannot solve due to any such solution not being popular enough for your use case to be covered? That's kind of why personally I'd just go for Helm or something of that variety - popular enough to have plenty of tutorials and answers about it, simple enough to just be viewed as a bunch of templating, going from values.yaml to your filled out template files that can be applied against a Kubernetes cluster. It even generates a lot of what you might need (deployment, service etc.) as a part of the base set of templates, thus you don't have to waste your time trying to write manifests from scratch and have plenty of workable examples for setting env values etc.
- lloydatkinson 4y agoOh dear, also the name of a JS parser https://github.com/acornjs/acorn https://github.com/acornjs/acorn
- yewenjie 4y agoWhat does the following refer to in their GitHub readme? > Caution: Consuming this project can expose you to chemicals, which are known to the State of California to cause cancer and birth defects or other reproductive harm. https://github.com/acorn-io/acorn/blob/8a474b9e593956c2ad56b0ecf248af49994fa8fb/README.md https://github.com/acorn-io/acorn/blob/8a474b9e593956c2ad56b...
- BoppreH 4y agoA warning[1] that is present in so many items in California that including it in spurious labels is it's own in-joke. [1] https://www.nytimes.com/wirecutter/blog/what-is-prop-65/amp/ https://www.nytimes.com/wirecutter/blog/what-is-prop-65/amp/
- smetj 4y agoLooks nice and it's open source. What is your business model?
- deleted 4y ago[deleted]
- ForHackernews 4y agoHow does this compare against https://porter.run/ https://porter.run/ ?