oc get deployment返回No resources found异常问题咨询
问题现象
- 集群内执行
oc get deployment命令返回结果为No resources Found - 添加
-n参数指定对应命名空间执行上述命令,仍返回相同结果 - 执行
oc get pods命令可正常获取正确结果 - 环境版本信息:
- oc客户端版本:v3.6.0
- Kubernetes版本:v1.6.1
- OpenShift集群版本:v3.11.380
诱发原因
问题由两类原因导致:
- 客户端与集群版本差过大引发API兼容问题:OpenShift 3.x系列要求oc客户端和集群服务端的版本差不能超过1个次版本,当前使用的v3.6.0客户端和v3.11.380集群跨了5个次版本,完全不满足兼容要求。v3.6版本的oc查询Deployment时默认请求
extensions/v1beta1API组的对应接口,这个API组在3.11集群中已经废弃,客户端不会自动跳转请求3.11默认使用的apps/v1组Deployment接口,因此返回空结果。Pod属于核心/api/v1稳定组资源,API路径从未发生过不兼容变更,所以查询不受版本差影响。 - 查询的资源类型和实际部署类型不匹配:在Kubernetes原生Deployment能力成熟前,OpenShift 3.x长期使用自研的DeploymentConfig(缩写dc)作为工作负载资源,如果当前命名空间下的应用都是通过DeploymentConfig部署的,查询Deployment资源自然会返回空。
解决方案
- 最彻底的处理方式是将本地oc客户端替换为和集群版本一致的v3.11.x版本,解决底层API兼容问题,替换后重新执行
oc get deployment即可正常返回结果。 - 如果替换匹配版本客户端后查询仍为空,说明当前命名空间下的部署资源是DeploymentConfig类型,执行
oc get dc就能查到对应的部署记录。 - 临时排查无法立刻更换客户端时,可以显式指定资源所属API组绕过兼容逻辑,执行命令
oc get apps/v1.deployment即可查询到对应Deployment资源。
内容的提问来源于stack exchange,提问作者user1227670
相关产品推荐
相关产品推荐

