OpenShift执行oc apply创建Deployment报错:指定API版本无对应Deployment类型注册
解决OpenShift中Deployment API版本不兼容问题
看起来你碰到了OpenShift集群API版本与Deployment资源不匹配的典型问题,我来一步步帮你搞定:
第一步:找出你的集群支持的Deployment API版本
你已经通过curl拿到了集群的API列表,不过用oc命令直接查询会更直观:
oc api-resources | grep Deployment
执行后会返回类似这样的结果(具体以你的集群为准):
deployments deploy apps/v1 true Deployment
这里的apps/v1就是你需要用的正确API版本——如果你的输出里显示的是其他版本(比如旧版的extensions/v1beta1),就用那个版本。
第二步:修正YAML配置
把你的basic-ocp-demo.yaml里的Deployment部分的apiVersion改成上面查到的正确值,修正后的完整Deployment配置应该是这样的(以apps/v1为例):
--- kind: Deployment apiVersion: apps/v1 metadata: name: nginx-deployment labels: app: nginx-app type: front-end spec: replicas: 3 selector: matchLabels: app: nginx-app type: front-end template: metadata: labels: app: nginx-app type: front-end spec: containers: - name: nginx-container image: nginx:latest
注意:apps/v1版本的Deployment要求spec.selector必须存在且和Pod模板的labels完全匹配,你的配置已经满足这个要求,所以不用额外修改这部分。
第三步:重新部署并验证
先清理之前创建的Service(如果需要的话):
oc delete service nginx-service
然后重新执行部署命令:
oc apply -f basic-ocp-demo.yaml
最后验证Deployment是否成功:
oc get deployments
如果输出里nginx-deployment的状态显示为available,就说明部署成功了。
为什么之前换apps/v1还是报错?
大概率是这几个原因之一:
- 修改YAML后没保存,执行命令时用的还是旧文件
- 拼写错误,比如把
apps/v1写成了app/v1或者其他格式错误 - 你的OpenShift集群版本太旧,不支持
apps/v1,这种情况下可以试试旧版本extensions/v1beta1(不过这个版本已经被废弃,建议能升级集群的话尽量升级)
内容的提问来源于stack exchange,提问作者Ciocoiu Petrisor
相关产品推荐
相关产品推荐

