k8s 常用命令

发布于:2025-08-19 ⋅ 阅读:(11) ⋅ 点赞:(0)

在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状态异常(如 PendingImagePullBackOff),需通过以下命令获取底层错误原因(如资源不足、镜像拉取失败):

# 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) 相关的常用命令,涵盖了创建、查看、修改和删除等操作:

  1. 查看所有 Service

    kubectl get svc
    # 或更简洁的
    kubectl get services
    # 查看指定命名空间的Service
    kubectl get svc -n <namespace>
    # 查看所有命名空间的Service
    kubectl get svc --all-namespaces
    
  2. 查看 Service 详细信息

    kubectl describe svc <service-name>
    # 查看指定命名空间的Service详情
    kubectl describe svc <service-name> -n <namespace>
    
  3. 创建 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>
    
  4. 删除 Service

    kubectl delete svc <service-name>
    # 删除指定命名空间的Service
    kubectl delete svc <service-name> -n <namespace>
    
  5. 编辑 Service

    kubectl edit svc <service-name>
    # 编辑指定命名空间的Service
    kubectl edit svc <service-name> -n <namespace>
    
  6. 查看 Service 的 Endpoints

    kubectl get endpoints <service-name>
    # 查看指定命名空间的Service Endpoints
    kubectl get endpoints <service-name> -n <namespace>
    
  7. 将 Service 输出为 YAML/JSON 格式

    kubectl get svc <service-name> -o yaml
    kubectl get svc <service-name> -o json
    
  8. 创建不同类型的 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)。


网站公告

今日签到

点亮在社区的每一天
去签到