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 命令找不到
- 确认 kubectl 是否安装:
which kubectl
kubectl version- 确认 kubeconfig 配置是否正确:
kubectl config view
kubectl cluster-info权限不足
确认当前用户是否有对应命名空间的操作权限:
kubectl auth can-i get pods -n <namespace>Pod 日志查看失败
- 确认 Pod 名称是否正确:
kubectl get pods -n <namespace>- 检查 Pod 是否处于
Running状态,CrashLoopBackOff状态的 Pod 可能无法读取日志。
文件拷贝失败
- 确认目标文件或目录在 Pod 中存在
- 检查拷贝路径是否有写入权限
- 指定容器名称(多容器 Pod 时必须指定
-c)
编辑配置后不生效
- 确认修改的是正确的资源类型(Deployment 而不是 Pod)
- 对于 ConfigMap 和 Secret 修改后,可能需要重启 Pod 才能生效:
kubectl rollout restart deploy <deploy-name> -n <namespace>