HNHacker News
TopNewBestAskShowJobs

andrewrynhard

92 karma · joined June 10, 2018

[ my public key: https://keybase.io/andrewrynhard; my proof: https://keybase.io/andrewrynhard/sigs/sQzDTpfz8TtirY-DWdk1Iaa1gdLKQ9RIYSM6oHY-0aM ]
submissionscomments
andrewrynhard··on There are only 12 binaries in Talos Linux
With Kubernetes you can schedule workloads in a number of different ways. Let’s say you insisted on having a shell and package manager. Run your favorite distro’s container as a DaemonSet. With the proper mounts and permissions you can do a lot. In other words use Kubernetes to do the things need to do. Then what role does the OS really play? Well in the case of Talos it’s only there to run Kubernetes.
andrewrynhard··on There are only 12 binaries in Talos Linux
In machined (PID1 of Talos).
andrewrynhard··on There are only 12 binaries in Talos Linux
In the case of Talos, Kubernetes can provide the flexibility you want from a more traditional Linux distribution.
andrewrynhard··on Talos Linux
Have you tried our Slack fir support?
andrewrynhard··on Talos Linux
This is correct. You could have a privileged pod that mounts up the host and you can do things from there but even then the OS is read only.
andrewrynhard··on Talos Linux
Oh I am well aware of RH CoreOS.
andrewrynhard··on Talos Linux
I would say that CoreOS is gone because RH destroyed it. Not because people didn't use it.
andrewrynhard··on Talos Linux
We mention CAPI but certainly not 2.0 since the CAPI we are referring to is "Cluster API" and they only have 1.0.
andrewrynhard··on Talos Linux
For folks who are all in on a single cloud provider it might not make sense, but if you run Kubernetes in multiple clouds, on-premise, edge, etc. then it starts to make a lot of sense since you get consistency.
andrewrynhard··on Talos Linux
The same spirit as CoreOS but it is something entirely different. Written from PID1 up solely for the purposes of running Kubernetes.
andrewrynhard··on Talos Linux
It is a 50MB squashfs.
andrewrynhard··on Bottlerocket, an open source Linux distribution built to run containers
Have you guys taken a look at Talos?
andrewrynhard··on Bottlerocket, an open source Linux distribution built to run containers
For a project similar to bottlerocket, checkout https://github.com/talos-systems/talos. It is geared for cloud, VMware, and bare metal users. We have integrations with Cluster API for each, with the bare metal provider being our implementation: https://github.com/talos-systems/sidero. Full disclosure, I am the CTO of Talos Systems.
andrewrynhard··on Talos: OS for Kubernetes
First of all, thank you for taking the time to write this out. The feedback is very valuable. I will do my best to address each comment.

Let me start by laying out our design constraints. We knew we wanted a handful of simple features:

- minimal

- immutable

- and secure

and we approached them with the willingness to do whatever it took to achieve them, no matter how different it would be from any Linux distribution today.

The degree to which we want to obtain minimalism is what I like to call "ultra". Not a single file should be on the image that isn't absolutely needed. Furthermore, not a single process should be allowed to run that isn't required to obtain the goal of running Kubernetes. So we started by creating an image with just enough to run the kubelet and the kubelet only. Obviously, this isn't practical, but it was a place to start.

In implementing our immutability design constraint we decided to:

- make the root filesystem read-only - have no package manager - not allow any generic use of the OS (i.e. it would be only for the purposes of running Kubernetes)

When optimizing for one thing, you often degrade another. In our case, if we optimize for minimalism, then immutability becomes degraded. We need to address a way to manage and debug the node, and we need libraries/binaries to do so. With no package manager, this means everything must be baked into the image, and thus we degrade immutability.

Tacking on yet another design constraint, security, things become even more interesting. The more you add to a system, the higher the risk in vulnerabilities. The more allowed permissions in a system, the higher the risk in vulnerabilities. So minimalism, and immutability actually complement security. In our case, security has the highest priority of all, which means we aren't willing to degrade anything that supports the security of the system. So minimalism, and immutability must be present.

Aside from our design constraints of minimalism, and immutability, we also avoid C as much as possible. We want to build something using a modern language for all the reasons you would choose a modern language over C today, but mostly for security purposes.

Taking all the above into consideration, this meant that we are still left with figuring out how to manage a machine without degrading minimalism, immutability, and security. So without tooling on the rootfs, without a package manager, and without a way to run custom processes, we still need a way to obtain the information we need from a machine. Thus the API was born.

The API doesn't only solve the management issue, it also reenforces all of our design constraints:

- we can keep the image minimal with a single binary serving the API - we can keep the image immutable by building a robust API - we could retain security by using mutual TLS and offering a read-only API - we could write it in a modern language, using modern tooling (golang and gRPC)

At this point what need is there in SSH/console access if the design constraints essentially remove all usefulness in console access? The problem isn't necessarily the need for SSH/console, its the need for a way to get the data to make informed decisions.

There are also additional benefits to an API. There is a reason the concept exists. With an API you get a standarization, strong types, and constistent and well known output formats. The benefits are many.

I'd like to also point you in the direction of an execellent talk given this year at Blackhat: https://swagitda.com/speaking/us-19-Shortridge-Forsgren-Cont.... The section on D.I.E. in particular will add some additional support to the reasons I gave above.

That is my lengthy response to the reasoning behind the removal of SSH. Remember, just because we don't have SSH baked in, nothing is stopping you from running a DaemonSet that has SSH.

As for a custom kernel, we would love to support this. Happy to take in feedback here. We create Talos in containers and our goal is to create the necessary tooling to make this dead simple.

As for node joins, they do not happen with the trustd username and password. We use kubeadm under the hood, so its token based, and possible to have a TTL. We have since moved to token based approach for trustd as well. Note that the trustd token simply gives the node the ability to a worker to request a certficate for OSD, so that you can hit the node's API.

We are currently working on an upgrade operator and it is planned for v0.3. If you would like to have some say in the direction we go, we would be happy to have you in our community meetings!

You make good points about the diagrams. It is clear from this post that we have work to do around the documentation.

And finally, Talos is not based on any distribution. We have a toolchain that we build, and subsequently build our entire distribution from.

I hope I have answered your questions well enough. I look forward to hearing back from you. Your input is valued, and we really would like to use it to turn this into somethi great!

andrewrynhard··on Talos: OS for Kubernetes
The rootfs in stored in the booloader partition and in the initramfs. As for NFS, I can see us adding support for that, but the out of the box experience for Talos in any of clouds will be painful if we exclusively require NFS.

Since we adhere to the KSPP (https://kernsec.org/wiki/index.php/Kernel_Self_Protection_Pr...) guidelines, kexec is not an option unfortunately. We thought about this early on, but opted to follow KSPP over using kexec.

andrewrynhard··on Talos: OS for Kubernetes
Thanks! I haven't heard of Zulip, I will be taking a look!
andrewrynhard··on Talos: OS for Kubernetes
I haven't tested in Virtualbox yet. Would you mind either join our slack or creating a GitHub issue where we could provide better support?
andrewrynhard··on Talos: OS for Kubernetes
I spent a lot of time in v0.2 building Talos for ARM, and it works, but there is a good amount of work to be done to make it official. We need to setup ARM nodes to run our builds from, and refactor our build logic to account for multiple architectures. There is also a bit of work to be done around the boot loader logic since we use syslinux. We are close, just needs a little push.
andrewrynhard··on Talos: OS for Kubernetes
Please file an issue on GitHub and we would be happy to look into this.
andrewrynhard··on Talos: OS for Kubernetes
Interesting. We PXE boot Talos in packet. One user is even go so far as to PXE boot Talos on every boot.
andrewrynhard··on Talos: OS for Kubernetes
You absolutely could. The rootfs is read only so what you can do is limited. Kubernetes also landed support for ephemeral containers in 1.16: https://github.com/kubernetes/enhancements/issues/277. It still needs more work but the idea is that you will be able to attach a debug container (you image of choice) to a pod on the fly.
andrewrynhard··on Talos: OS for Kubernetes
We do support storage volumes. A recent change in Rook seems to have broken how it works with Talos, but we know storage is important and we are working on fixes. We would love to land support for Nvidia GPU containers. Your not the first to ask for GPU support, so I'm certain we will be taking a closer look at that.
andrewrynhard··on Talos: OS for Kubernetes
We have our provider here: https://github.com/talos-systems/cluster-api-provider-talos

Perhaps OS isn't the right thing to call, but I don't know a better alternative :D

andrewrynhard··on Talos: OS for Kubernetes
I agree with this to an extent. There are certainly places where replacing can be expensive. For example, bare metal, or if the machine contains a large amount of data and moving that data to a new node is time consuming.
andrewrynhard··on Talos: OS for Kubernetes
We are taking two approaches to this. The first is that you could roll out a replacement node and shutdown the old one. In bare metal scenarios this is much harder so we implemented in place upgrades, but they work very similar to creating a new node. Since Talos is immutable and runs from RAM, an in place upgrade consists of shutting down all services, and then wiping the disk and performing a fresh install. We then reboot the node and its as if you wiped the machine clean and installed the new version of Talos from the get go. This is all via the API by the way.
andrewrynhard··on Talos: OS for Kubernetes
Yes we do. I personally am working on the channel based approach for our 0.3 release that we just started developing. I would love it if you could make a meeting some time soon to chat some more. User feedback will be really help.

Since Talos is built entirely in containers and we control the entire toolchain, I believe you could achieve the same with Talos.

andrewrynhard··on Talos: OS for Kubernetes
As an engineer I understand this completely. We are already discussing internally how we can improve our site and documentation. Our goal is to create a vibrant community and getting all the sales fluff out of the way is something I support!
andrewrynhard··on Talos: OS for Kubernetes
We have added an API to help with the practical issues in removing SSH. In doing that it has also opened up interesting opportunities in automation that we are currently fleshing out.

The difference here is that Talos is purpose-built for Kubernetes. What that means is that we will pour resources into automated upgrades paths for our users. Tighter integration with Kubernetes, where we envision a self-healing system that makes use of the Kubernetes and Talos APIs to make decisions.

Also the things I mentioned in https://news.ycombinator.com/item?id=21066732

andrewrynhard··on Talos: OS for Kubernetes
Ahh thanks for the feedback. One thing is clear from all this is that we can do a better job in documentation.
andrewrynhard··on Talos: OS for Kubernetes
Very similar but few key differentiators:

- no SSH/console

- has an API

- not for general use

- runs from squashfs in RAM

- has a custom init system

Page 1 of 2Next →