You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

K3s v1.24安装CrunchyData PGO Operator创建CRD失败

问题根因

Kubernetes 从1.22版本开始正式移除apiextensions.k8s.io/v1beta1版本的CustomResourceDefinition(CRD)API,当前使用的K3s v1.24.1版本已经完全不再支持该beta版API;而部署使用的CrunchyData PGO centos8-4.7.0版本发布时间较早,内置的CRD资源清单仍在使用已废弃的v1beta1 API版本,版本不兼容是报错的直接原因。

排查验证步骤
  • 执行命令kubectl api-versions | grep apiextensions.k8s.io,确认输出仅存在apiextensions.k8s.io/v1条目、无v1beta1条目,验证集群侧已移除对应旧版API
  • 打开报错路径下的/ansible/postgres-operator/roles/pgo-operator/files/crds/pgclusters-crd.yaml文件,查看文件首部的apiVersion字段,确认值为apiextensions.k8s.io/v1beta1,验证资源清单版本与集群不匹配
解决方案

可根据实际场景选择以下三种方案:

  • 方案一:升级PGO到适配新K8s版本的发行版(推荐生产环境使用)
    PGO 5.0及以上版本已经全面适配apiextensions.k8s.io/v1版本CRD API,直接将Terraform配置中引用的PGO镜像版本替换为5.x系列稳定版,使用新版本自带的安装清单即可直接适配v1.24版本K3s,无需额外修改配置,后续也能获得官方安全补丁和功能更新。
  • 方案二:手动转换旧版PGO的CRD清单适配v1 API(必须使用4.7.0版本时选择)
    将PGO安装包内所有CRD文件的格式从v1beta1转换为v1版本即可正常部署,转换注意事项:
    1. 将所有CRD文件首行的apiVersion: apiextensions.k8s.io/v1beta1替换为apiVersion: apiextensions.k8s.io/v1
    2. 原v1beta1中的spec.version单字段配置废弃,需替换为spec.versions数组结构,明确标注每个版本的served、storage、schema校验规则
    3. 原v1beta1中顶层的spec.additionalPrinterColumns字段,需要移动到spec.versions数组内对应版本的配置块中,和subresources字段同级
    4. 补充spec.preserveUnknownFields: false等v1版本CRD必填配置项
      若手动修改容易漏配字段,可临时搭建一个1.21及以下版本的测试K8s集群,先apply原始v1beta1版本的CRD清单,再通过kubectl get crd <crd资源名> -o yaml导出集群自动转换后的v1格式CRD文件,替换原安装包中的旧文件即可,能避免手动配置错误。
  • 方案三:降级K3s集群版本(仅临时测试场景使用)
    将K3s集群版本降级到v1.21.x系列,该版本仍保留对v1beta1版本CRD API的支持,可以直接兼容4.7.0版本PGO,无需修改任何安装配置。该方案不推荐生产环境使用,v1.21版本已结束官方维护周期,存在未修复的安全风险。

内容的提问来源于stack exchange,提问作者Ravindra Gupta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 09:09:58