初学 Kubernetes,最重要也最基础的工具就是 kubectl。
但你是否曾被它的各种命令、参数搞晕?本篇文章用一张“实用速查表 + 真实示例”,帮你从 0 上手 kubectl,做到“看得懂、敲得出、调得准”。
✳️ 什么是 kubectl?
kubectl 是 Kubernetes 的命令行工具(CLI),你可以用它来:
- 创建、更新、删除各种资源(如 Pod、Deployment)
- 查看集群和资源的状态
- 调试容器、日志分析
- 管理配置与访问控制
简而言之,它是你与 Kubernetes 的“指挥部”对话的窗口。
入门命令:快速掌握日常操作
| 类别 | 命令 | 说明 |
|---|---|---|
| 集群状态 | kubectl cluster-info | 查看集群信息 |
| 节点列表 | kubectl get nodes | 查看所有节点 |
| 所有资源 | kubectl get all | 查看当前命名空间的所有资源 |
| 所有命名空间资源 | kubectl get all -A | 所有命名空间全资源 |
资源管理:Pod、Deployment 快速操作
1. 获取资源状态
kubectl get pods # 当前命名空间下所有 Pod
kubectl get deploy # 获取 Deployment
kubectl get svc # 查看服务 Service
kubectl get pods -o wide # 显示详细信息(IP、节点)
kubectl get pods -A # 查看所有命名空间下的 Pod
2. 查看资源详细信息
kubectl describe pod my-pod # 查看 Pod 详情
kubectl describe deploy my-deploy
提示:如果你怀疑某个 Pod 卡住了,describe 可以帮你查看事件(Events)。
3. 创建与删除资源
kubectl apply -f nginx.yaml # 根据 YAML 创建/更新资源
kubectl delete -f nginx.yaml # 删除 YAML 定义的资源
kubectl delete pod my-pod # 删除指定 Pod
排错调试:日志 + 终端进入容器
1. 查看容器日志
kubectl logs my-pod # 查看 Pod 日志(单容器)
kubectl logs my-pod -c container-name # 多容器 Pod 查看指定容器日志
kubectl logs -f my-pod # 实时追踪日志
2. 进入容器内部(类似 SSH)
kubectl exec -it my-pod -- /bin/sh
kubectl exec -it my-pod -c container-name -- /bin/bash
⚠️ 注意:容器镜像必须包含 sh 或 bash 才能进入。
临时测试工具 Pod(推荐技巧)
有时候你需要测试网络、DNS、连接情况,可以使用临时工具 Pod:
kubectl run testbox --rm -i -t --image=busybox -- /bin/sh
等价于快速拉起一个 busybox 容器进入交互模式,用完即删。
资源编辑、滚动更新、扩容
1. 手动编辑资源 YAML
kubectl edit deploy my-deploy
进入默认编辑器修改,保存后自动应用更新。
2. 滚动更新镜像版本
kubectl set image deploy/my-deploy nginx=nginx:1.25
更新 Deployment 中名为 nginx 的容器镜像,并触发滚动升级。
3. 扩容/缩容 Deployment 副本数
kubectl scale deploy my-deploy --replicas=3
进阶查询:label、selector、资源使用情况
1. 使用 Label 查询资源
kubectl get pods -l app=nginx
搭配命名空间查询:
kubectl get pods -n kube-system -l component=kube-proxy
2. 查看资源使用率(需安装 Metrics Server)
kubectl top pod # 查看 Pod 的 CPU/MEM 使用
kubectl top node # 查看各节点资源使用率
导出资源 YAML(推荐用于模板学习)
kubectl get deploy my-deploy -o yaml > my-deploy.yaml
你可以直接查看系统生成的完整 YAML 文件结构,进行自定义编辑。
常用组合参数说明
| 参数 | 含义 |
|---|---|
| -n 或 --namespace | 指定命名空间 |
| -o wide | 输出更多字段(如 IP、Node) |
| -o yaml/json | 输出为 YAML 或 JSON 格式 |
| -A | 等价于 --all-namespaces |
| -f | 指定 YAML 文件 |
快速上手模板(一键试用)
示例 Deployment 文件:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deploy
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.25
ports:
- containerPort: 80
部署命令:
kubectl apply -f nginx.yaml
小结:kubectl 命令体系记忆法
你可以这样理解:
| 操作类型 | 口诀 |
|---|---|
| 查看资源 | kubectl get ... |
| 查看详情 | kubectl describe ... |
| 日志输出 | kubectl logs ... |
| 进入容器 | kubectl exec -it ... -- /bin/sh |
| 创建更新 | kubectl apply/delete -f ... |
| 在线编辑 | kubectl edit ... |
| 临时工具 | kubectl run ... --rm |
✅ 推荐练习
- 使用 kubectl apply 创建一个 nginx Deployment;
- 用 kubectl edit 实现副本数从 2 改为 3;
- 用 kubectl exec 进入容器,执行 ping 操作;
- 用 kubectl get -o yaml 导出资源配置并手动修改;
- 创建 busybox 工具容器测试 DNS 解析。
关注我,不走丢,一起玩转 Kubernetes!