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 编写的,那么控制器如何知道如何处理该对象呢?
正如您在编写、读取和更新版本化 CustomResourceDefinition 对象中所读到的那样
如果更新现有对象,则会以当前存储版本重写该对象。这是对象从一个版本更改为另一个版本的唯一方法。
Kubernetes 以您请求的版本将对象返回给您,但持久化对象既不会在磁盘上更改,也不会在服务请求时以任何方式进行转换(除了更改 apiVersion 字符串)。
如果更新现有对象,则会以当前存储版本重写该对象。这是对象从一个版本更改为另一个版本的唯一方法。
您在 version 处读取对象v1beta1
,然后在 version 处再次读取该对象v1
。除了apiVersion
字段之外,两个返回的对象都是相同的,将现有对象升级到新的存储版本
API 服务器还支持 Webhook 转换,在需要转换时调用外部服务。Webhook 处理 API 服务器发送的 ConversionReview 请求,并发送回包含在 ConversionResponse 中的转换结果。您可以在此处阅读有关网络书的信息。
Kubernetes v1.13
Webhook 转换是作为 alpha 功能引入的。当 Webhook 服务器作为服务部署到 Kubernetes 集群中时,它必须通过端口 443 上的服务公开。当弃用版本并放弃支持时,请设计存储升级过程。
归档时间: |
|
查看次数: |
6540 次 |
最近记录: |