为何执行kubectl get deployments显示default命名空间无资源,但已有Pod运行?
为什么
kubectl get deployments显示无资源,但Pod已经在运行? 嘿,这个问题我之前也踩过坑,其实是Kubernetes里kubectl run命令的行为变化导致的,完全不是bug哦~
核心原因:新版本K8s中kubectl run的默认行为变了
在Kubernetes 1.18及以后的版本,kubectl run命令默认只会直接创建单个独立Pod,不再自动生成Deployment来管理Pod了。而在更早的版本(比如1.17及之前),这个命令会自动创建Deployment,通过Deployment来管控Pod的生命周期。
你执行的命令:
kubectl run hello-minikube --image=k8s.gcr.io/echoserver:1.10 --port=8080
在当前的K8s版本下,只会生成一个独立Pod,所以kubectl get pod能看到运行中的资源,但kubectl get deployments自然找不到对应的Deployment资源。
验证方法
你可以执行以下命令查看Pod的详细信息,确认它没有关联的Deployment控制器:
kubectl describe pod hello-minikube
在输出的Controlled By字段里,你会看到它没有关联任何Deployment,是直接由用户创建的独立Pod。
如果想要用Deployment管理Pod
如果你希望用Deployment来管理这个Pod(比如实现自动重启、扩缩容等功能),推荐使用更明确的命令:
- 创建Deployment:
kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.10
- 暴露端口(和你之前的
--port参数效果一致):
kubectl expose deployment hello-minikube --port=8080
这时候再执行kubectl get deployments,就能看到对应的Deployment资源了。
内容的提问来源于stack exchange,提问作者Ashwin
相关产品推荐
相关产品推荐

