kubectl 是 Kubernetes 集群的命令行管理工具,用于部署应用、查看和管理集群资源、排查问题。
基本语法
kubectl [command] [TYPE] [NAME] [flags]command:操作动词,如get、describe、apply、delete、logs、execTYPE:资源类型,如pod、deployment、service(支持单复数和简写)NAME:资源名称flags:参数,如-n指定命名空间、-o指定输出格式
常用资源类型与简写
pods→podeployments→deployservices→svcnamespaces→nsstatefulsets→stsconfigmaps→cmnodes→no
查看资源
# 列出指定命名空间下的 Pod
kubectl -n opensandbox get pods
# 显示更多信息(IP、所在节点等)
kubectl -n opensandbox get pods -o wide
# 查看单个资源详情(含事件,排障首选)
kubectl -n opensandbox describe pod <pod-name>
# 查看 YAML / JSON 定义
kubectl -n opensandbox get pod <pod-name> -o yaml
kubectl -n opensandbox get pod <pod-name> -o json
# 用 jsonpath 提取特定字段(如查看 Pod 内容器名)
kubectl -n opensandbox get pod <pod-name> -o jsonpath='{.spec.containers[*].name}'
# 持续监听资源变化
kubectl -n opensandbox get pods -w查看日志
# 查看 Pod 日志
kubectl -n opensandbox logs <pod-name>
# 实时跟踪日志
kubectl -n opensandbox logs -f <pod-name>
# 多容器 Pod 需指定容器
kubectl -n opensandbox logs <pod-name> -c <container-name>
# 查看上一个崩溃容器的日志(排查 CrashLoopBackOff)
kubectl -n opensandbox logs <pod-name> --previous进入容器终端
kubectl -n opensandbox exec -it <pod-name> -- /bin/bash-it:分配交互式终端- 容器内没有 bash 时(如 alpine 镜像),改用
/bin/sh - 多容器 Pod 加
-c <container-name>指定容器 - 退出终端输入
exit
复制命令的注意点
从终端复制命令时不要把提示符(如
root@host:/#)一起粘贴进去,否则 bash 会把提示符当成命令名,报No such file or directory。
应用与删除配置
# 应用 YAML 配置(创建或更新)
kubectl apply -f app.yaml
# 删除 YAML 中定义的资源
kubectl delete -f app.yaml
# 按标签删除
kubectl -n opensandbox delete pods -l app=myappDeployment 与副本管理
# 查看 Deployment
kubectl get deployments
# 扩缩容
kubectl scale deployment <name> --replicas=3
# 查看滚动发布状态
kubectl rollout status deployment <name>
# 查看发布历史与回滚
kubectl rollout history deployment <name>
kubectl rollout undo deployment <name>StatefulSet 说明
StatefulSet 的 Pod 命名规则为 <statefulset名>-<序号>,序号从 0 开始:
xxx-0是第 1 个 Pod,扩容时依次出现-1、-2- 与 Deployment 的随机 Pod 名不同,StatefulSet Pod 名和序号是稳定的,重建后名字不变
- 按序号顺序创建(升序)和删除(降序)
命名空间与上下文
# 查看所有命名空间
kubectl get ns
# 查看所有命名空间的 Pod
kubectl get pods -A
# 查看当前上下文(当前连接的集群)
kubectl config current-context
# 列出并切换上下文
kubectl config get-contexts
kubectl config use-context <context-name>
# 设置默认命名空间(免去每次加 -n)
kubectl config set-context --current --namespace=opensandbox实用技巧
# 查看某资源类型的字段说明(比文档快)
kubectl explain pod.spec.containers
# 试运行,不真正创建(配合 -o yaml 可生成配置)
kubectl run test --image=nginx --dry-run=client -o yaml
# 端口转发:把本地 8080 映射到 Pod 的 80
kubectl -n opensandbox port-forward <pod-name> 8080:80
# 本地与容器间复制文件
kubectl -n opensandbox cp ./local.txt <pod-name>:/tmp/remote.txt
kubectl -n opensandbox cp <pod-name>:/tmp/remote.txt ./local.txt
# 查看资源占用(需 metrics-server)
kubectl top nodes
kubectl top pods -n opensandbox排障常用组合
kubectl get pods -n <ns>看 Pod 状态是否为Runningkubectl describe pod <name> -n <ns>看 Events(拉镜像失败、调度失败等)kubectl logs <name> -n <ns> [--previous]看应用日志kubectl exec -it <name> -n <ns> -- /bin/sh进容器内排查网络、配置、文件