k8s
Kubectl常用命令

Kubectl常用命令

概述

本文档汇总了 Kubernetes 运维中最常用的 kubectl 命令,涵盖日志查看、Pod 调试、文件拷贝和配置修改等高频操作场景,帮助快速定位和解决问题。


查看 Pod 日志

# 查看当前 Pod 日志
kubectl logs <pod-name> -n <namespace>

# 查看异常重启前的日志(-p 表示 previous)
kubectl logs -p <pod-name> -n <namespace>

# 查看最后 10 条日志
kubectl logs --tail=10 <pod-name> -n <namespace>

# 实时跟踪日志输出
kubectl logs -f <pod-name> -n <namespace>

# 查看指定容器的日志(Pod 有多个容器时)
kubectl logs <pod-name> -c <container-name> -n <namespace>

查看 Pod 详细信息

# 查看 Pod 详细事件和状态
kubectl describe pod <pod-name> -n <namespace>

# 查看 Pod 的 YAML 配置
kubectl get pod <pod-name> -o yaml -n <namespace>

# 查看 Pod 的 JSON 配置
kubectl get pod <pod-name> -o json -n <namespace>

# 查看 Pod 状态概览
kubectl get pod <pod-name> -n <namespace> -o wide

登录 Pod

# 进入 Pod 的默认容器(使用 bash)
kubectl exec -it <pod-name> -n <namespace> -- /bin/bash

# 进入 Pod 的指定容器
kubectl exec -it <pod-name> -c <container-name> -n <namespace> -- /bin/sh

# 如果容器没有 bash,使用 sh
kubectl exec -it <pod-name> -n <namespace> -- /bin/sh

# 执行单条命令(非交互式)
kubectl exec <pod-name> -n <namespace> -- ls -la /app

# 执行多条命令(使用 sh -c)
kubectl exec <pod-name> -n <namespace> -- sh -c "ls -la /app && cat /app/config.yaml"

拷贝 Pod 中文件

从 Pod 拷贝到本地

# 拷贝单个文件
kubectl cp <namespace>/<pod-name>:/path/to/file ./local_file

# 指定容器拷贝
kubectl cp <namespace>/<pod-name>:/app/logs/app.log ./app.log -c <container-name>

# 拷贝整个目录
kubectl cp <namespace>/<pod-name>:/var/log/ ./pod_logs/

# 简写(默认命名空间)
kubectl cp <pod-name>:/etc/config/conf.yaml ./conf.yaml

# 带权限保留拷贝
kubectl cp --preserve <pod-name>:/tmp/script.sh ./script.sh

从本地拷贝到 Pod

# 拷贝文件到 Pod
kubectl cp ./config.yaml <namespace>/<pod-name>:/etc/app/config.yaml

# 拷贝目录到 Pod
kubectl cp ./config/ <namespace>/<pod-name>:/etc/app/

# 简写(默认命名空间)
kubectl cp ./app.conf <pod-name>:/etc/app/app.conf

修改配置

# 编辑 Pod(不推荐直接编辑,Pod 重建后修改会丢失)
kubectl edit pod <pod-name> -n <namespace>

# 编辑 Deployment(推荐方式,修改后自动滚动更新)
kubectl edit deployment <deploy-name> -n <namespace>

# 编辑 ConfigMap
kubectl edit configmap <cm-name> -n <namespace>

# 编辑 Secret
kubectl edit secret <secret-name> -n <namespace>

# 编辑 Service
kubectl edit service <svc-name> -n <namespace>

# 编辑 StatefulSet
kubectl edit statefulset <sts-name> -n <namespace>

常用命令速查表

操作 命令
查看 Pod 列表 kubectl get pods -n <namespace>
查看所有资源 kubectl get all -n <namespace>
查看 Deployment kubectl get deploy -n <namespace>
查看 Service kubectl get svc -n <namespace>
查看 ConfigMap kubectl get cm -n <namespace>
查看 Secret kubectl get secret -n <namespace>
查看 Ingress kubectl get ingress -n <namespace>
查看节点状态 kubectl get nodes
查看集群事件 kubectl get events -n <namespace> --sort-by='.lastTimestamp'
查看资源使用 kubectl top pods -n <namespace>
删除 Pod kubectl delete pod <pod-name> -n <namespace>
重启 Deployment kubectl rollout restart deploy <deploy-name> -n <namespace>
查看滚动更新状态 kubectl rollout status deploy <deploy-name> -n <namespace>
回滚 Deployment kubectl rollout undo deploy <deploy-name> -n <namespace>
端口转发 kubectl port-forward pod/<pod-name> 8080:80 -n <namespace>

常见问题与注意事项

kubectl 命令找不到

  1. 确认 kubectl 是否安装:
which kubectl
kubectl version
  1. 确认 kubeconfig 配置是否正确:
kubectl config view
kubectl cluster-info

权限不足

确认当前用户是否有对应命名空间的操作权限:

kubectl auth can-i get pods -n <namespace>

Pod 日志查看失败

  1. 确认 Pod 名称是否正确:
kubectl get pods -n <namespace>
  1. 检查 Pod 是否处于 Running 状态,CrashLoopBackOff 状态的 Pod 可能无法读取日志。

文件拷贝失败

  1. 确认目标文件或目录在 Pod 中存在
  2. 检查拷贝路径是否有写入权限
  3. 指定容器名称(多容器 Pod 时必须指定 -c

编辑配置后不生效

  1. 确认修改的是正确的资源类型(Deployment 而不是 Pod)
  2. 对于 ConfigMap 和 Secret 修改后,可能需要重启 Pod 才能生效:
kubectl rollout restart deploy <deploy-name> -n <namespace>

参考链接