Version control Kubernetes资源版本控制

Version control Kubernetes资源版本控制,version-control,kubernetes,Version Control,Kubernetes,在资源上使用kubectl get with-o yaml,我发现每个资源都有版本: kind: ConfigMap metadata: creationTimestamp: 2018-10-16T21:44:10Z name: my-config namespace: default resourceVersion: "163" 我想知道这些版本控制的意义是什么,它们的用途是什么?用例针对单个资源的resourceVersion的主要用途是乐观锁定。您可以获取资源、进行更改并

在资源上使用kubectl get with-o yaml,我发现每个资源都有版本:

kind: ConfigMap
metadata:
  creationTimestamp: 2018-10-16T21:44:10Z
  name: my-config
  namespace: default
  resourceVersion: "163"

我想知道这些版本控制的意义是什么,它们的用途是什么?用例

针对单个资源的resourceVersion的主要用途是乐观锁定。您可以获取资源、进行更改并将其作为更新提交,如果另一个客户端同时更新了该资源,则服务器将以冲突错误拒绝该更新,而他们的更新可能会与resourceVersion冲突,您提交的值告诉服务器您认为要更新的版本

resourceVersion在单个资源上的主要用途是乐观锁定。您可以获取资源,进行更改,然后将其作为更新提交,如果另一个客户端同时更新了该更新,服务器将拒绝该更新并出现冲突错误,因为他们的更新可能会影响resourceVersion,并且您提交的值会告诉服务器您认为您正在更新的版本

更详细的解释,这有助于我准确地理解它是如何工作的:

你在本书中创建的所有对象, 复制控制器、服务、机密等需要 以持久的方式存储在某个地方,以便它们的清单在API中存活 服务器重新启动并出现故障。为此,Kubernetes使用etcd 是一个快速、分布式和一致的键值存储。唯一的 直接与etcd对话的组件是Kubernetes API服务器。 所有其他组件通过 API服务器

这带来了一些好处,其中一个好处是更加乐观 锁定系统以及验证;并且,通过提取 从所有其他组件的实际存储机制来看,这非常重要 以后更换更简单。值得强调的是,etcd 是Kubernetes存储集群状态和元数据的唯一地方

乐观并发控制有时称为乐观并发控制 锁定是一种方法,它不是锁定一段数据,而是 防止在锁定到位时读取或更新, 这段数据包括一个版本号。每次数据被删除时 更新后,版本号增加。更新数据时 检查版本号,查看它是否在两个时间间隔内增加 客户端读取数据和提交更新的时间。如果这 发生时,更新被拒绝,客户端必须重新读取新的更新 并尝试再次更新它。结果是当两个客户端 尝试更新相同的数据项,只有第一个成功

结果是,当两个客户端尝试更新相同的数据条目时, 只有第一个成功

马尔科·卢卡萨,库伯内特斯在行动


因此,所有Kubernetes资源都包含一个metadata.resourceVersion字段,客户端在更新对象时需要将该字段传递回API服务器。如果版本与etcd中存储的版本不匹配,API服务器将拒绝更新

一个更详细的解释,这有助于我准确理解其工作原理:

你在本书中创建的所有对象, 复制控制器、服务、机密等需要 以持久的方式存储在某个地方,以便它们的清单在API中存活 服务器重新启动并出现故障。为此,Kubernetes使用etcd 是一个快速、分布式和一致的键值存储。唯一的 直接与etcd对话的组件是Kubernetes API服务器。 所有其他组件通过 API服务器

这带来了一些好处,其中一个好处是更加乐观 锁定系统以及验证;并且,通过提取 从所有其他组件的实际存储机制来看,这非常重要 以后更换更简单。值得强调的是,etcd 是Kubernetes存储集群状态和元数据的唯一地方

乐观并发控制有时称为乐观并发控制 锁定是一种方法,它不是锁定一段数据,而是 防止在锁定到位时读取或更新, 这段数据包括一个版本号。每次数据被删除时 更新后,版本号增加。更新数据时 检查版本号,查看它是否在两个时间间隔内增加 客户端读取数据和提交更新的时间。如果这 发生时,更新被拒绝,客户端必须重新读取新的更新 并尝试再次更新它。结果是当两个客户端 尝试更新相同的数据项,只有第一个成功

结果是,当两个客户端尝试更新相同的数据条目时, 只有第一个成功

马尔科·卢卡萨,库伯内特斯在行动

因此,所有Kubernetes资源都包含一个metadata.resourceVersion字段,该字段是clie
更新对象时,nts需要传回API服务器。如果版本与etcd中存储的版本不匹配,API服务器将拒绝更新

,因此如果发生冲突,将在客户端解决?我的意思是,客户机需要首先获得新版本?服务器如何知道客户机拥有的版本?如果版本字段已从客户端删除,或者由其他机制在内部管理,我不确定此版本跟踪如何工作是的,如果发生冲突,客户端需要:重新获取资源,再次执行它想要进行的更改,但保留新的元数据。服务器返回的resourceVersion,发送新的更新放置尝试。请参阅和建议的实现。概念上类似于git fetch;吉特再基;Git PUST-FF只允许这个流程允许任意的客户端冲突解决。对于简单的设置,这些字段很少使用,而是考虑在没有冲突风险的情况下使用补丁解决的服务器。有关类似于3路git合并的内容,请参见kubectl apply,这两种应用程序的服务器端应用程序有些不同,它们使用额外的元数据,而不仅仅是resourceVersion。而且它们是针对特定场景的,不是所有的东西都需要它们…所以如果发生冲突,它将在客户端解决?我的意思是,客户机需要首先获得新版本?服务器如何知道客户机拥有的版本?如果版本字段已从客户端删除,或者由其他机制在内部管理,我不确定此版本跟踪如何工作是的,如果发生冲突,客户端需要:重新获取资源,再次执行它想要进行的更改,但保留新的元数据。服务器返回的resourceVersion,发送新的更新放置尝试。请参阅和建议的实现。概念上类似于git fetch;吉特再基;Git PUST-FF只允许这个流程允许任意的客户端冲突解决。对于简单的设置,这些字段很少使用,而是考虑在没有冲突风险的情况下使用补丁解决的服务器。有关类似于3路git合并的内容,请参见kubectl apply,这两种应用程序的服务器端应用程序有些不同,它们使用额外的元数据,而不仅仅是resourceVersion。它们是针对特定场景的,不是所有的东西都需要它们。。。