GKE中执行kubectl expose报错deployments.apps "nginx" not found如何解决
问题根因
核心原因是Kubernetes 1.21及以上版本的kubectl run命令默认行为发生变更:不再自动创建Deployment资源,仅会创建独立的Pod资源。你执行的kubectl expose命令指定了资源类型为Deployment,自然找不到对应资源。
其次你环境中kubectl客户端版本(1.22)与GKE集群服务端版本(1.20)的版本差超出了Kubernetes官方支持的±1范围,也存在触发异常行为的可能性。
排查验证步骤
- 执行
kubectl get all命令查看当前命名空间下的所有资源,可以确认仅存在名为nginx的Pod资源,无同名Deployment资源 - 执行
kubectl run --help查看命令说明,1.22版本的说明中不会提及创建Deployment的相关逻辑,与1.18及以下版本的行为不同
解决方案
方案一:按课程要求创建Deployment后暴露
如果课程演示逻辑是基于Deployment资源操作,按以下步骤执行:
- 删除已创建的冗余Pod:
kubectl delete pod nginx - 使用官方推荐的Deployment创建命令:
kubectl create deployment nginx --image=nginx:1.10.0 - 执行原有暴露命令即可正常运行:
kubectl expose deployment nginx --type LoadBalancer --port 80
方案二:直接暴露已创建的Pod
如果不需要Deployment资源,仅需暴露当前已创建的Pod,直接修改expose命令的资源类型即可:kubectl expose pod nginx --type LoadBalancer --port 80
版本兼容优化建议
Kubernetes官方仅支持kubectl客户端与服务端版本差在±1以内的场景,你当前的版本差可能会引发其他未知命令执行异常,建议将kubectl客户端降级至1.20.x版本,与GKE集群版本对齐。
内容的提问来源于stack exchange,提问作者mon
相关产品推荐
相关产品推荐

