Kubernetes CRD 版本控制

Ton*_*rke 6 kubernetes

Kuberentes 有一种支持 CRD 版本控制的机制。请参阅https://kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definition-versioning/。我不清楚的是,当您不能总是从 v1 <-> v2 进行转换时,您实际上如何支持 CRD v1 到 CRD v2 的演变。假设我们在 v2 中引入了一个无法通过 Web hook 转换填充的新字段,那么也许我们所能做的就是将该字段保留为空?此外,当您请求 api 版本 N 时,您总是会返回一个版本 N 的对象,即使它不是作为版本 N 编写的,那么控制器如何知道如何处理该对象呢?

Cro*_*rou 1

正如您在编写、读取和更新版本化 CustomResourceDefinition 对象中所读到的那样

如果更新现有对象,则会以当前存储版本重写该对象。这是对象从一个版本更改为另一个版本的唯一方法。

Kubernetes 以您请求的版本将对象返回给您,但持久化对象既不会在磁盘上更改,也不会在服务请求时以任何方式进行转换(除了更改 apiVersion 字符串)。

如果更新现有对象,则会以当前存储版本重写该对象。这是对象从一个版本更改为另一个版本的唯一方法。

您在 version 处读取对象v1beta1,然后在 version 处再次读取该对象v1。除了apiVersion字段之外,两个返回的对象都是相同的,将现有对象升级到新的存储版本

API 服务器还支持 Webhook 转换,在需要转换时调用外部服务。Webhook 处理 API 服务器发送的 ConversionReview 请求,并发送回包含在 ConversionResponse 中的转换结果。您可以在此处阅读有关网络书的信息。

Kubernetes v1.13Webhook 转换是作为 alpha 功能引入的。当 Webhook 服务器作为服务部署到 Kubernetes 集群中时,它必须通过端口 443 上的服务公开。当弃用版本并放弃支持时,请设计存储升级过程。