【问题标题】:Difference between Kubernetes Objects and ResourcesKubernetes 对象和资源的区别
【发布时间】:2019-02-17 22:33:57
【问题描述】:

Kubernetes 世界中的对象和资源有什么区别?

我在 https://kubernetes.io/docs/concepts/ 找不到它。我想知道他们没有区分它们,但似乎他们将对象视为资源的高级概念。

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    特定组+版本+种类的表示是一个对象。例如,v1 Pod 或 apps/v1 部署。这些定义可以存在于清单文件中,也可以从 apiserver 获取。

    用于获取对象的特定 URL 是资源。例如,可以从/api/v1/pods 资源中获取 v1 Pod 对象的列表。可以从/api/v1/namespaces/<namespace-name>/pods/<pod-name> 资源中获取特定的 v1 Pod 对象。

    API 发现文档(如在 /api/v1 上发布的文档)可用于确定与每种对象类型对应的资源。

    通常,可以从多个资源中检索和提交同一个对象。例如,v1 Pod 对象可以提交到以下资源 URL:

    1. /api/v1/namespaces/<namespace-name>/pods/<pod-name>
    2. /api/v1/namespaces/<namespace-name>/pods/<pod-name>/status

    不同的资源允许不同的服务器端行为和访问控制。第一个 URL 只允许更新部分 pod 规范和元数据。第二个 URL 只允许更新 pod 状态,并且访问权限通常只授予 kubelet。

    授权规则基于特定请求的资源。

    【讨论】:

    • 感谢您的明确答复。顺便说一句,自定义资源/自定义资源定义怎么样?它显然是 kubernetes 实体 Object 的表示。它们应该是自定义对象吗...?
    • 它们导致特定资源端点的定义,以及资源接受/返回的对象
    【解决方案2】:

    Kubernetes 对象 - 类似于餐厅的订单。您定义最终想要获得的集群状态,就像给服务员的订单一样。 kubectl 定义您的订单并将其交付给厨师,就像服务员一样。 API 服务器就像厨师一样准备您的订单。您在 .yaml 或 .json 文件中定义对象。

    因此,资源类似于菜单项。想象一下 Pod 是一块肉。肉可以用不同的方法烹制:例如油炸或煮,但最终在这两种情况下都是肉。与 Kubernetes 资源类似。 StatefulSet 将创建具有从 0 到 N 的固定名称的 Pod,而 Deployment 不会。 DaemonSet 将在您的每个节点上创建 Pod,而 DeploymentStatefulSet 将创建尽可能多的 Pod,就像您指向副本一样。但无论您选择什么,最终都会是 Pod。你可能想点炸肉,但芥末是中等稀有的。如果您的订单不在项目列表中,餐厅将如何处理?欢迎您使用 Kubernetes CRD 或 CustomResourceDefinition

    P.S:这是一个非常抽象的描述,实际上StatefulSet/DaemonSets/DeploymentsIngress 也是对象,但它们通常被称为“资源”

    【讨论】:

    • 感谢您的评论。实际上,我是在清单的实物字段中搜索实体的通用术语时写了这个问题。我想使用 Object 但 Resource 在 Kubernetes 文档中经常使用。
    【解决方案3】:

    对象

    Kubernetes 使用这些实体来表示集群的状态。
    具体来说,他们可以描述:

    • 正在运行哪些容器化应用程序(以及在哪些节点上)
    • 这些应用程序可用的资源
    • 有关这些应用程序行为方式的策略,例如重启策略、升级和容错

    Kubernetes 对象是“意图记录”——一旦您创建了对象,Kubernetes 系统就会不断工作以确保该对象存在。
    通过创建一个对象,您可以有效地告诉 Kubernetes 系统您希望集群的工作负载是什么样的;这是您的集群所需的状态。

    注意:commentedVASャ

    对象通常不会自行从集群中消失,但有一个例外:

    如果你手动创建一个 Pod 对象,并且它被调度在一个节点上:

    • 它会在一段时间后从集群中完全消失,以防节点故障或关闭,并且
    • Pod 不会像您预期的那样在另一个节点上重新创建

    资源

    资源是 declarative API 的一部分,由 Kubernetes 客户端库和 CLI 或 kubectl 使用。
    它可能导致“自定义资源”,即 Kubernetes API 的扩展,在默认 Kubernetes 安装中不一定可用。

    【讨论】:

    • 对象通常不会自行从集群中消失,但有一个例外:如果你手动创建一个 Pod 对象,并且将它调度到一个节点上,之后它会完全从集群中消失有时,如果节点发生故障或关闭,Pod 将不会像您预期的那样在另一个节点上重新创建。
    • @VASャ 好点,谢谢。我已将您的评论包含在答案中以提高知名度。
    【解决方案4】:

    正如我们在blog post 中试图解释的那样,资源是通过 HTTP 作为 JSON 发送或检索的系统实体的表示,对象是各自的内存中 Golang 结构以及在它们上定义的函数和方法。

    请注意,通常和非正式地我们交替使用术语资源和对象,这完全没问题。除非你是 Go 开发者,extending Kubernetes,否则你可能根本不需要费心。

    【讨论】:

    • 感谢您富有洞察力的回答和博文。我会使用 Resource 来缓解。
    【解决方案5】:

    https://kubernetes.io/docs/reference/using-api/api-concepts/

    资源类型Kubernates API中使用的名称

    • objects资源类型,它们代表集群上一个概念的具体实例
    • 其他资源类型虚拟的
    • 资源类型的单个实例称为资源

    大多数 Kubernetes API 资源类型对象:它们代表一个 集群上概念的具体实例,例如 pod 或 命名空间。少数 API 资源类型是“virtual”——它们 通常表示操作而不是对象,例如权限 检查。

    【讨论】:

      【解决方案6】:
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-15
      • 2014-07-29
      • 2016-06-28
      相关资源
      最近更新 更多