<story><title>Reasons Kubernetes is so complex</title><url>https://buttondown.email/nelhage/archive/two-reasons-kubernetes-is-so-complex/</url></story><parent_chain><item><author>carlmr</author><text>&amp;gt;The author contrasts this with K8s by saying that K8s is declarative. This is not the important distinction.&lt;p&gt;I feel like declarative is some kind of technical manual meme for the last few years. I don&amp;#x27;t know at this point how often I&amp;#x27;ve read that something is better because it&amp;#x27;s modern and declarative. Why it&amp;#x27;s easy to understand because it&amp;#x27;s declarative, etc.&lt;p&gt;There&amp;#x27;s a similar thing with &amp;quot;functional&amp;quot;. In that case I at least understand the intuition why it&amp;#x27;s better, which is because if I&amp;#x2F;O behavior is constant and you don&amp;#x27;t have to think of an internal state, like in OOP. It is indeed much easier to divide and conquer when you can understand the parts of the whole individually. And as soon as you understand the parts you can piece them together.&lt;p&gt;With &amp;quot;declarative&amp;quot; I still have to find out what&amp;#x27;s the intuition WHY it&amp;#x27;s supposedly better, until then it&amp;#x27;s kind of like the 90s, where the washing machine was &amp;quot;better&amp;quot; because it had &amp;quot;fuzzy logic&amp;quot;.</text></item><item><author>cturner</author><text>&amp;quot;&amp;quot;&amp;quot;
One could imagine a very imperative “cluster operating system,” like the above, which exposed primitives like “allocate 5 CPUs worth of compute” or “create a new virtual network,” which in turn backed onto configuration changes either in the system’s internal abstractions or into calls into the EC2 API (or other underlying cloud provider).
&amp;quot;&amp;quot;&amp;quot;&lt;p&gt;There is a name for this: Single System Image. There is no need to write the operating system layer - Linux works well.&lt;p&gt;I built a SSI. Each grid can host several apps, &amp;#x27;gridapps&amp;#x27;. As priorities change during the day, an operator can rebalance resources using a bash-like shell. Each gridapp has (1) core nodes, which need to keep running, and (2) scale nodes which can be started and stopped. Nodes can be configured so they are taskset-bound to an individual processor, or sharing a processor between several nodes. There are equivalent primitives for memory and persistent storage. Commercial, 1000 cores.&lt;p&gt;The author contrasts this with K8s by saying that K8s is declarative. This is not the important distinction. My system had declarative configuration, and did a fitting at startup.&lt;p&gt;The key difference is motive. The design above is the natural choice when you build a grid computer from first-principles.&lt;p&gt;K8s is designed to solve a different problem: scaling up the traditional model of programming. Here, a developer writes an algorithm on their workstation. The deployment circumstances and interactions with other systems are an afterthought. Often this developer does not deploy the code themselves, this is done by another team who don&amp;#x27;t understand the internals of the code.</text></item></parent_chain><comment><author>ClumsyPilot</author><text>&amp;gt; I don&amp;#x27;t know at this point how often I&amp;#x27;ve read that something is better because it&amp;#x27;s modern and declarative. Why it&amp;#x27;s easy to understand because it&amp;#x27;s declarative, etc.&lt;p&gt;I feel most comments here miss the point of declerative systems - resillience.&lt;p&gt;You write a script to stand up an Application on a clean system, a declarative system does the same. But what if current state is not a blank slate? A declarative system is meant to be smart enough to achieve target state even if machine crahsed half way through the setup last time, or has a different config already running.&lt;p&gt;Writing a shell script that addresses all edgecases is hard. Now, declarative systems do fail, but that&amp;#x27;s the promice.</text></comment>
<story><title>Reasons Kubernetes is so complex</title><url>https://buttondown.email/nelhage/archive/two-reasons-kubernetes-is-so-complex/</url></story><parent_chain><item><author>carlmr</author><text>&amp;gt;The author contrasts this with K8s by saying that K8s is declarative. This is not the important distinction.&lt;p&gt;I feel like declarative is some kind of technical manual meme for the last few years. I don&amp;#x27;t know at this point how often I&amp;#x27;ve read that something is better because it&amp;#x27;s modern and declarative. Why it&amp;#x27;s easy to understand because it&amp;#x27;s declarative, etc.&lt;p&gt;There&amp;#x27;s a similar thing with &amp;quot;functional&amp;quot;. In that case I at least understand the intuition why it&amp;#x27;s better, which is because if I&amp;#x2F;O behavior is constant and you don&amp;#x27;t have to think of an internal state, like in OOP. It is indeed much easier to divide and conquer when you can understand the parts of the whole individually. And as soon as you understand the parts you can piece them together.&lt;p&gt;With &amp;quot;declarative&amp;quot; I still have to find out what&amp;#x27;s the intuition WHY it&amp;#x27;s supposedly better, until then it&amp;#x27;s kind of like the 90s, where the washing machine was &amp;quot;better&amp;quot; because it had &amp;quot;fuzzy logic&amp;quot;.</text></item><item><author>cturner</author><text>&amp;quot;&amp;quot;&amp;quot;
One could imagine a very imperative “cluster operating system,” like the above, which exposed primitives like “allocate 5 CPUs worth of compute” or “create a new virtual network,” which in turn backed onto configuration changes either in the system’s internal abstractions or into calls into the EC2 API (or other underlying cloud provider).
&amp;quot;&amp;quot;&amp;quot;&lt;p&gt;There is a name for this: Single System Image. There is no need to write the operating system layer - Linux works well.&lt;p&gt;I built a SSI. Each grid can host several apps, &amp;#x27;gridapps&amp;#x27;. As priorities change during the day, an operator can rebalance resources using a bash-like shell. Each gridapp has (1) core nodes, which need to keep running, and (2) scale nodes which can be started and stopped. Nodes can be configured so they are taskset-bound to an individual processor, or sharing a processor between several nodes. There are equivalent primitives for memory and persistent storage. Commercial, 1000 cores.&lt;p&gt;The author contrasts this with K8s by saying that K8s is declarative. This is not the important distinction. My system had declarative configuration, and did a fitting at startup.&lt;p&gt;The key difference is motive. The design above is the natural choice when you build a grid computer from first-principles.&lt;p&gt;K8s is designed to solve a different problem: scaling up the traditional model of programming. Here, a developer writes an algorithm on their workstation. The deployment circumstances and interactions with other systems are an afterthought. Often this developer does not deploy the code themselves, this is done by another team who don&amp;#x27;t understand the internals of the code.</text></item></parent_chain><comment><author>maccard</author><text>&amp;gt; With &amp;quot;declarative&amp;quot; I still have to find out what&amp;#x27;s the intuition WHY it&amp;#x27;s supposedly better,&lt;p&gt;Declarative is better because you write what you want to _have_ not what you want to change, which means you need implicit knowledge of the state of the system, and leave the complexities of figuring out the in between to the tool you&amp;#x27;re using.</text></comment>