Kubernetes YAML不是而且从来没有声明式编程!- Archis Gore


声明式基础结构的承诺使每个人都感到惊讶,“ 声明您想要的,而不用担心它会如何发生 ”,最终似乎最终陷入了半生熟的 冗长 笨拙的模板中。
我们将“静态配置”与“声明式编程”混淆了,Kubernetes YAML不是,而且从来没有声明式编程!这是不可思议的营销窍门,因为销售推销带来了所有的宏伟之处。
Kubernetes是一个静态配置的系统。80年代的DOS文件 .ini ;90年代的/etc/*.conf文件;现在是Kubernetes的YAML。
当我们使用kubectl apply以富丽堂皇的雄心壮志向KV存储编写一串字符串时,相信我们正在做“声明性”的事情。
在Kubernetes所谓的“汇编语言”之上编写“高级语言”与使用正则表达式编写C一样有意义。
即使Kubernetes是内核,YAML也不是汇编语言,因为它缺少The Language。Kubernetes资源模型将是一种不存在的语言的“ Registers ”。它们实际上只是数据常量,甚至不是寄存器。
您知道可以使用自己喜欢的编程语言(Javascript,C#,Lua,Elm,Ballerina等)编写正则表达式库。您可以用正则表达式编写自己喜欢的编程语言吗?
现在将汇编语言与Java,Javascript,C#,C ++,Elm,Go,Rust等进行比较。您可以使用其他任何一种编写这些语言。
区别在于:汇编语言不是“更小语言”,而是“更低层的语言”。它可以做其他人可以做的所有事情-不多也不少。
在Kubernete所谓的“汇编语言”之上编写“高级语言”与使用正则表达式编写Java一样意义

您想要的是一个声明式系统+语言=>声明式编程!
声明式编程既不是新手,也不是必须解决行星级问题才能使它有用。如果您被Declarative Infra所吸引,希望以可重复,可移植且一站式的方式描述完整的应用程序,那么您想要的就是:纯度/幂等,参数和闭包。
Kubernetes向您保证是一种声明性汇编语言,但是给您了数据寄存器

命令式编程为您提供了比模板更好的抽象,但是它仍然不理解它们-您仍在表达希望生成数据的方式,而不是总体目标。
有一个更好的方法!有一种编写程序的声明式方法,其中谓词是命令式程序中的循环和条件。关系是命令式程序中的功能。事实就是命令式程序中的数据。断言就是命令式语言的测试。可参考Prolog

点击标题见原文,原文提出了真正声明式Kubernetes应该是什么样