【问题标题】:Kubernetes - What exactly is imperative Vs DeclarativeKubernetes——命令式与声明式到底是什么
【发布时间】:2020-02-15 18:50:49
【问题描述】:

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

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

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    “命令式”是一个命令 - 类似于“创建 42 个小部件”。

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

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

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

    【讨论】:

    • 您能否添加更多关于命令的详细信息以及 OP 所期望的内容
    • 类似于interpreter v/s compiler。 “创建第一个小部件”,“创建第 2 个小部件”在命令行上逐一运行 v/s 放入 for 循环并编译一次并运行一次以创建所有 42 个小部件。
    【解决方案2】:

    命令式

    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
    

    【讨论】:

    • 我觉得这应该是可以接受的答案,给出了更明显的区别。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2013-02-04
    • 2021-07-03
    • 1970-01-01
    • 2020-04-08
    • 2012-01-02
    • 1970-01-01
    • 1970-01-01
    • 2014-03-25
    相关资源
    最近更新 更多