
概述
|
13
1.1.2
声明式配置
不可变性不仅限于集群中运行的容器,还包括向
Kubernetes
描述应用程序的
方式。
Kubernetes
中的一切都是声明式的配置对象,它代表系统的所需状态。
Kubernetes
的工作是确保世界的实际状态与所需状态相匹配。
声明式配置和命令式配置的关系就像不可变基础设施与可变基础设施的关系
一样。命令式配置通过执行一系列指令来定义状态,而声明式配置则声明所
需的状态。命令式命令定义动作,而声明式配置定义状态。
为了理解这两种方法,请考虑这样一个任务:生成某个软件的三个副本。如
果使用命令式方法,则配置会说:“运行
A
,运行
B
,再运行
C
。”相应的
声明式配置只需要声明:“副本数等于
3
。”
因为声明式配置描述的是世界状态,因此不必执行就可以理解其中的含义。
声明式配置明确声明了它的影响。由于在声明式配置执行之前人们就明白其
带来的效果,因此这种方式更不容易出错。此外,声明式配置还可以使用源
代码控制、代码检查以及单元测试等传统的软件开发工具,但对于命令式命
令来说就不可能了。将声明式配置存储在源代码管理中的思想通常称为“基
础设施即代码”(
Infrastructure as Code
)。
存储在版本控制系统中的声明式配置,再加上
Kubernetes
将现实与声明状态
相匹配的能力,可以帮助我们轻松地回滚变更:我们只需重新声明系统的前
一个声明式状态即可。对于命令式系统来说,这通常都是不可能的,因为尽
管命令式说明描述了如何从
A
点到
B
点,却很少会说明如何反过来从
B
点回
到
A
点。
1.1.3 ...