K8s v1.9.2中CRD的Generation字段不随Spec更新,是否正常?
关于K8s v1.9.2中CRD ObjectMeta.Generation始终为0的问题
这不是配置错误,而是Kubernetes 1.9.x版本的预期行为,原因和当时CRD的发展阶段直接相关:
CRD版本特性限制:Kubernetes 1.9时期,CRD还处于
apiextensions.k8s.io/v1beta1的早期试验阶段,metadata.generation字段的自动递增逻辑仅对Kubernetes内置资源(比如Deployment、StatefulSet)生效,自定义资源的Spec变更并不会触发这个字段的更新。这个特性是在后续版本(1.11+)才逐步完善并覆盖到CRD的。快速验证方式:你可以检查自己的CRD定义文件,看
apiVersion字段是不是apiextensions.k8s.io/v1beta1——如果是的话,就完全符合该版本的行为表现。追踪Spec变更的替代方案:
- 可以通过对比
metadata.resourceVersion字段判断资源是否有变更(注意:该字段会在资源任何字段变更时更新,包括Status部分); - 在自定义资源的Spec中新增一个自定义版本标识字段(比如
spec.version),更新资源时手动递增该值来追踪变更; - 如果业务允许,升级到Kubernetes 1.11及以上版本,从这个版本开始v1beta1的CRD也支持Generation随Spec变更自动递增,到CRD的v1版本后该特性完全稳定。
- 可以通过对比
内容的提问来源于stack exchange,提问作者occia
相关产品推荐
相关产品推荐

