Kubernetes对象和资源之间的区别

Ryo*_*oto 5 kubernetes

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

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

Jor*_*itt 11

特定组+版本+种类的表示是一个对象。例如,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 状态,并且通常只授予 kubelets 访问权限。

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


Kon*_*tin 9

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

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

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


Von*_*onC 6

对象

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

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

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

注意:正如VAS评论的那样

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

如果您手动创建一个 Pod 对象,并且它被安排在一个节点上:

  • 一段时间后,它会从集群中完全消失,以防节点故障或关闭,以及
  • Pod 不会如您所料在另一个节点上重新创建

资源

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