【发布时间】:2020-02-15 18:50:49
【问题描述】:
对于 Kubernetes 的命令式与声明式,我看到了多种不同的解释——比如命令式意味着当我们使用 yaml 文件创建资源来描述状态时,反之亦然。
这两者之间真正明确的区别是什么。如果您可以将这组命令归为同一组,我将不胜感激-例如在命令式方式下创建等..
【问题讨论】:
标签: kubernetes
对于 Kubernetes 的命令式与声明式,我看到了多种不同的解释——比如命令式意味着当我们使用 yaml 文件创建资源来描述状态时,反之亦然。
这两者之间真正明确的区别是什么。如果您可以将这组命令归为同一组,我将不胜感激-例如在命令式方式下创建等..
【问题讨论】:
标签: kubernetes
“命令式”是一个命令 - 类似于“创建 42 个小部件”。
“声明性”是对期望最终结果的陈述——例如“我希望存在 42 个小部件”。
通常,您的 yaml 文件本质上是声明性的:它会说您希望存在 42 个小部件。您将把它交给 Kubernetes,它会执行必要的步骤,最终拥有 42 个小部件。
“创建”本身是一个命令式命令,但您创建的是一个 Kubernetes 集群。集群的外观由 yaml 文件中的声明决定。
【讨论】:
命令式
Official docs 关于使用命令式命令管理 Kubernetes 对象。
可以使用 kubectl 命令行工具内置的命令式命令直接快速创建、更新和删除 Kubernetes 对象。
kubectl run nginx --generator=run-pod/v1 --image=nginx
kubectl create service nodeport <myservicename>
kubectl delete pod
声明性
Kubernetes 对象可以通过将多个对象配置文件存储在一个目录中,并根据需要使用 kubectl apply 递归地创建和更新这些对象来创建、更新和删除。此方法保留对活动对象的写入,而不会将更改合并回对象配置文件。 kubectl diff 还可以让您预览将应用的更改。
Official docs 关于使用配置文件对 Kubernetes 对象进行声明式管理。
Official docs 关于使用 Kustomize 对 Kubernetes 对象进行声明式管理
在 yaml 文件中定义您想要的内容并使用 kubectl apply
kubectl apply -f app.yaml
kubectl apply -f <directory>/
kubectl apply -f https://k8s.io/examples/application/simple_deployment.yaml
【讨论】: