在Kubernetes(k8s)中查看Pod执行情况,核心是通过 kubectl
命令,围绕运行状态、日志、资源使用、事件等维度排查,以下是高频实用命令:
一、核心:查看Pod基础运行状态
快速了解所有Pod的就绪状态、重启次数、运行时长等核心信息:
# 1. 查看所有命名空间的Pod(常用,能快速发现跨命名空间问题)
kubectl get pods -A
# 2. 查看指定命名空间的Pod(如 default 命名空间,最常用)
kubectl get pods -n default
# 3. 查看Pod详细信息(含IP、挂载的Volume、所属Node等,排障关键)
kubectl get pods -n default -o wide
# 4. 查看Pod的YAML配置(确认实际运行配置是否符合预期)
kubectl get pod <pod-name> -n default -o yaml
- 状态说明:
Running
(正常运行)、Pending
(等待资源/依赖)、CrashLoopBackOff
(反复崩溃,需看日志)、Error
(启动失败)。
二、关键:查看Pod日志(定位容器内错误)
Pod异常时,优先看日志,是排查应用报错、配置问题的核心手段:
# 1. 查看Pod最新日志(默认显示最后10行,适合快速定位)
kubectl logs <pod-name> -n default
# 2. 实时跟踪日志(类似 tail -f,适合看动态输出)
kubectl logs <pod-name> -n default -f
# 3. 查看指定行数的历史日志(如前100行,避免日志过多刷屏)
kubectl logs <pod-name> -n default --tail=100
# 4. 查看Pod内特定容器的日志(当Pod有多个容器时,必须指定 -c <容器名>)
kubectl logs <pod-name> -n default -c <container-name> -f
# 5. 查看某时间段内的日志(如近1小时,精准定位时间范围内的问题)
kubectl logs <pod-name> -n default --since=1h
三、深入:查看Pod运行详情与事件
当Pod状态异常(如 Pending
、ImagePullBackOff
),需通过以下命令获取底层错误原因(如资源不足、镜像拉取失败):
# 1. 查看Pod详细事件与状态(排障核心!会显示具体错误,如“资源不足”“镜像拉取超时”)
kubectl describe pod <pod-name> -n default
# 重点关注:Events 部分(最下方),会列出Pod创建、调度、启动的全流程事件
# 2. 查看Pod的资源使用情况(CPU/内存使用率,判断是否因资源不足崩溃)
# 方法1:实时查看(需集群部署 metrics-server,大部分集群默认有)
kubectl top pod <pod-name> -n default
# 方法2:查看Pod配置的资源限制与请求(确认是否配置过低)
kubectl get pod <pod-name> -n default -o jsonpath='{.spec.containers[0].resources}'
四、场景化:常见问题对应的查看命令
问题场景 | 推荐命令 |
---|---|
Pod一直处于 Pending | kubectl describe pod <pod-name> -n default (看Events找调度失败原因) |
Pod反复 CrashLoopBackOff | 1. kubectl logs <pod-name> -n default (看应用报错)2. kubectl describe pod ... (看是否资源不足) |
容器内应用无响应 | 1. kubectl logs <pod-name> -n default -f (实时看日志)2. kubectl exec ... (进入容器排查) |
镜像拉取失败(ImagePullBackOff) | kubectl describe pod ... (看Events中镜像拉取地址、权限是否正确) |
五、补充:进入Pod容器内排查(必要时)
若日志无法定位问题,可直接进入Pod的容器内,执行命令(如查看配置文件、测试网络):
# 进入Pod的默认容器(若Pod只有1个容器,直接用)
kubectl exec -it <pod-name> -n default -- /bin/bash
# 进入Pod的指定容器(Pod多容器时)
kubectl exec -it <pod-name> -n default -c <container-name> -- /bin/bash
# (注:若容器内无 bash,可尝试 /bin/sh)
六、查看节点(污点)
kubectl describe nodes <node-name> | grep Taint
# 若输出中无 "node.kubernetes.io/disk-pressure:",说明污点已消除
七、 Service (svc) 相关的常用命令,涵盖了创建、查看、修改和删除等操作
以下是 Kubernetes (k8s) 中与 Service (svc) 相关的常用命令,涵盖了创建、查看、修改和删除等操作:
查看所有 Service
kubectl get svc # 或更简洁的 kubectl get services # 查看指定命名空间的Service kubectl get svc -n <namespace> # 查看所有命名空间的Service kubectl get svc --all-namespaces
查看 Service 详细信息
kubectl describe svc <service-name> # 查看指定命名空间的Service详情 kubectl describe svc <service-name> -n <namespace>
创建 Service
# 从YAML文件创建 kubectl create -f service.yaml # 从命令行直接创建(示例:为deployment创建ClusterIP类型的Service) kubectl expose deployment <deployment-name> --name=<service-name> --port=<service-port> --target-port=<pod-port>
删除 Service
kubectl delete svc <service-name> # 删除指定命名空间的Service kubectl delete svc <service-name> -n <namespace>
编辑 Service
kubectl edit svc <service-name> # 编辑指定命名空间的Service kubectl edit svc <service-name> -n <namespace>
查看 Service 的 Endpoints
kubectl get endpoints <service-name> # 查看指定命名空间的Service Endpoints kubectl get endpoints <service-name> -n <namespace>
将 Service 输出为 YAML/JSON 格式
kubectl get svc <service-name> -o yaml kubectl get svc <service-name> -o json
创建不同类型的 Service
# 创建NodePort类型的Service kubectl expose deployment <deployment-name> --name=<service-name> --port=<service-port> --target-port=<pod-port> --type=NodePort # 创建LoadBalancer类型的Service(通常在云平台使用) kubectl expose deployment <deployment-name> --name=<service-name> --port=<service-port> --target-port=<pod-port> --type=LoadBalancer
这些命令可以帮助你管理 Kubernetes 中的 Service 资源,Service 主要用于为 Pod 提供稳定的网络访问点,实现 Pod 之间的通信。根据实际需求选择合适的 Service 类型(ClusterIP、NodePort、LoadBalancer、ExternalName)。