Kubernetes - 什么是命令式和声明式

Nag*_*Nag 5 kubernetes

对于 Kubernetes 的命令式与声明式,我看到了多种不同的解释——比如命令式意味着当我们使用 yaml 文件来创建资源来描述状态,反之亦然。

这两者之间真正而明显的区别是什么。如果您可以将这组命令归入同一组,我将不胜感激-例如在命令式方式下创建等等..

Arg*_*dhu 11

至关重要的

有关使用命令式命令管理 Kubernetes 对象的官方文档。

可以使用 kubectl 命令行工具内置的命令式命令直接快速创建、更新和删除 Kubernetes 对象。

kubectl run nginx  --generator=run-pod/v1 --image=nginx

kubectl create service nodeport <myservicename>

kubectl delete pod
Run Code Online (Sandbox Code Playgroud)

声明式

通过在一个目录中存储多个对象配置文件并使用 kubectl apply 根据需要递归地创建和更新这些对象,可以创建、更新和删除 Kubernetes 对象。此方法保留对活动对象所做的写入,而不将更改合并回对象配置文件中。kubectl diff 还可以让您预览 apply 将进行的更改。

有关使用配置文件对 Kubernetes 对象进行声明式管理的官方文档。

有关使用 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
Run Code Online (Sandbox Code Playgroud)


小智 7

“命令式”是一个命令 - 就像“创建 42 个小部件”一样。

“声明性”是对所需最终结果的声明——例如“我希望存在 42 个小部件”。

通常,您的 yaml 文件本质上是声明性的:它会说您希望存在 42 个小部件。您将把它交给 Kubernetes,它会执行最终拥有 42 个小部件所需的步骤。

“创建”本身是一个命令式命令,但您正在创建的是一个 Kubernetes 集群。集群的外观由 yaml 文件中的声明决定。