4. Kubernetes kubectl常用子命令
4.1 集群与上下文管理(Cluster & Context)
用于查看集群状态、切换上下文、管理认证信息,是SRE“连接集群”的第一步。
| 子命令 |
作用 |
语法示例 |
实操案例 |
最佳实践 |
cluster-info
|
查看集群核心组件(API Server、etcd、CoreDNS)状态 |
kubectl cluster-info
|
kubectl cluster-info
|
输出含Kubernetes control plane is running at https://...表示集群正常 |
config view
|
查看kubeconfig配置(集群、用户、上下文) |
kubectl config view [--minify]
|
kubectl config view --minify(精简当前上下文)
|
避免明文显示证书(--flatten可展开引用) |
config use-context
|
切换集群上下文 |
kubectl config use-context <context-name>
|
kubectl config use-context prod-cluster
|
多集群环境下,用上下文隔离不同环境(如dev/test/prod) |
config current-context
|
查看当前使用的上下文 |
kubectl config current-context
|
kubectl config current-context
|
快速确认当前操作的集群,避免误操作 |
4.2 资源操作(Resource CRUD)
K8S资源管理的核心,覆盖创建、查询、更新、删除,遵循SRE“声明式优先”原则。
4.2.1 查询类(Read)
| 子命令 |
作用 |
语法示例 |
实操案例 |
关键参数 |
get
|
查看资源列表/详情 |
kubectl get <resource> [options]
|
kubectl get pods -n prod -l app=nginx -o wide
|
-n指定命名空间;-l按标签过滤;-o wide/json/yaml指定输出格式
|
describe
|
查看资源详细状态(含事件、配置) |
kubectl describe <resource> <name>
|
kubectl describe pod nginx-pod
|
重点看Eventssection(调度、启动、错误事件) |
logs
|
查看Pod日志 |
kubectl logs <pod-name> [options]
|
kubectl logs nginx-pod -c sidecar --since=1h
|
-c指定容器;-f实时跟踪;--since查看最近N小时日志
|
exec
|
进入Pod容器执行命令 |
kubectl exec -it <pod-name> -- <cmd>
|
kubectl exec -it nginx-pod -- /bin/bash
|
-it交互式终端;--分隔kubectl与容器内命令
|
top
|
查看资源使用率(需metrics-server) |
kubectl top <resource>
|
kubectl top nodes --sort-by=memory
|
--sort-by按CPU/内存排序,快速定位高负载节点/Pod
|
4.2.2 创建类(Create)
| 子命令 |
作用 |
语法示例 |
实操案例 |
最佳实践 |
apply
|
声明式创建/更新资源(推荐) |
kubectl apply -f <file.yaml>
|
kubectl apply -f deployment.yaml
|
幂等性(多次执行结果一致),配置文件纳入Git管理 |
create
|
命令式创建资源(一次性操作) |
kubectl create -f <file.yaml>或 kubectl create <resource> <name> --image=<img>
|
kubectl create deployment nginx --image=nginx:1.21
|
仅用于临时测试,生产环境禁用(无法追溯变更) |
run
|
快速创建临时Pod(生成裸Pod,无自愈) |
kubectl run <pod-name> --image=<img> [options]
|
kubectl run test-pod --image=busybox --rm -it -- /bin/sh
|
--rm退出后自动删除,适合调试
|
4.2.3 更新类(Update)
| 子命令 |
作用 |
语法示例 |
实操案例 |
说明 |
patch
|
局部修改资源(无需全量YAML) |
kubectl patch <resource> <name> -p <json-patch>
|
kubectl patch deployment nginx-deploy -p '{"spec":{"replicas":5}}'
|
快速调整副本数、镜像版本等字段 |
edit
|
在线编辑资源(直接修改API对象) |
kubectl edit <resource> <name>
|
kubectl edit svc nginx-svc
|
修改后自动提交API,建议用YAML文件替代(可追溯) |
scale
|
扩缩容Deployment/StatefulSet |
kubectl scale <resource> <name> --replicas=<num>
|
kubectl scale deployment nginx-deploy --replicas=3
|
应对流量峰值时快速扩容,缩容需注意业务影响 |
rollout
|
滚动更新/回滚Deployment |
kubectl rollout <subcmd> deployment <name>
|
kubectl rollout undo deployment nginx-deploy(回滚)<br/> kubectl rollout status deployment nginx-deploy(查看状态)
|
滚动更新默认策略为“先建新Pod再删旧Pod”,避免 downtime |
4.2.4 删除类(Delete)
| 子命令 |
作用 |
语法示例 |
实操案例 |
注意事项 |
delete
|
删除资源 |
kubectl delete <resource> <name> [options]
|
kubectl delete -f deployment.yaml <br/>kubectl delete pod nginx-pod -n prod
|
若资源由控制器(如Deployment)管理,删除后会自动重建;加--force --grace-period=0强制删除(危险) |
4.3 故障排查(Troubleshooting)
SRE定位问题的核心工具链,覆盖事件、日志、资源状态、调试。
| 子命令 |
作用 |
语法示例 |
实操案例 |
排查逻辑 |
get events
|
查看集群事件(按时间排序) |
kubectl get events [options]
|
kubectl get events -n prod --sort-by=.lastTimestamp
|
优先看Warning事件(如FailedScheduling、OOMKilling) |
describe
|
查看资源详细状态(含事件) |
kubectl describe <resource> <name>
|
kubectl describe node node-1(查看节点资源分配)
|
节点事件含DiskPressure(磁盘不足)、MemoryPressure(内存不足) |
logs
|
查看Pod日志 |
kubectl logs <pod-name> [options]
|
kubectl logs nginx-pod --previous(查看上一次启动日志)
|
容器崩溃时,--previous可获取崩溃前的日志 |
debug
|
调试Pod(创建临时容器) |
kubectl debug <pod-name> -it --image=<debug-img>
|
kubectl debug nginx-pod -it --image=busybox --target=nginx
|
--target共享原Pod网络/存储,用于排查网络/存储问题(K8s 1.20+)
|
cp
|
复制文件到/从Pod |
kubectl cp <src> <dst>
|
kubectl cp ./local.conf nginx-pod:/etc/nginx/conf.d/(上传配置)
|
调试时快速替换容器内配置文件 |
4.4 配置与扩展(Configuration & Extension)
用于管理资源标签、注解、命名空间,以及扩展K8S功能(如CRD)。
| 子命令 |
作用 |
语法示例 |
实操案例 |
应用场景 |
label
|
添加/修改资源标签 |
kubectl label <resource> <name> <key>=<value>
|
kubectl label pods nginx-pod env=prod
|
标签用于资源分组(如app=nginx、env=prod)、选择器匹配 |
annotate
|
添加/修改资源注解(非标识性元数据) |
kubectl annotate <resource> <name> <key>=<value>
|
kubectl annotate deployment nginx-deploy description="nginx prod deployment"
|
存储额外信息(如构建版本、负责人),不影响资源调度 |
namespace
|
管理命名空间 |
kubectl create namespace <ns> kubectl delete namespace <ns>
|
kubectl create namespace prod
|
隔离不同环境/团队资源,避免名称冲突 |
apply
|
管理CRD(自定义资源) |
kubectl apply -f crd.yaml
|
kubectl apply -f prometheus-crd.yaml
|
扩展K8S API,如安装Prometheus Operator需先创建CRD |
4.5 高级子命令(Advanced)
面向复杂场景的扩展能力,如批量操作、API调试、资源转换。
| 子命令 |
作用 |
语法示例 |
实操案例 |
说明 |
auth
|
查看RBAC权限 |
kubectl auth can-i <verb> <resource> [options]
|
kubectl auth can-i create pods --as=dev-user
|
验证用户是否有操作权限(如dev-user能否创建Pod) |
convert
|
转换资源版本 |
kubectl convert -f <old-version.yaml> --output-version=<new-api-version>
|
kubectl convert -f v1beta1-ingress.yaml --output-version=networking.k8s.io/v1
|
兼容旧版本YAML(如Ingress从extensions/v1beta1迁移到networking.k8s.io/v1) |
replace
|
替换资源(命令式,需先删除再创建) |
kubectl replace -f <file.yaml>
|
kubectl replace -f deployment.yaml
|
不推荐,可能导致服务中断,优先用apply |
wait
|
等待资源达到期望状态 |
kubectl wait --for=<condition> <resource> <name>
|
kubectl wait --for=condition=ready pod nginx-pod --timeout=60s
|
自动化脚本中确保资源就绪后再执行下一步 |
4.6 SRE最佳实践总结
- 优先声明式:用
kubectl apply替代create/replace,配置文件纳入Git实现可追溯;
- 标签驱动:给资源打统一标签(如
app=<name>、env=<env>),用-l过滤提高效率;
- 事件优先排查:故障发生时,先执行
kubectl get events --sort-by=.lastTimestamp找Warning事件;
- 资源隔离:用命名空间隔离环境,用RBAC限制用户权限(
kubectl auth can-i验证);
- 调试技巧:用
kubectl debug创建临时容器排查网络/存储问题,避免修改生产Pod。
4.7 子命令速查表(按场景分类)
| 场景 |
核心子命令 |
集群状态 |
cluster-info、get nodes、config view
|
资源查询 |
get、describe、logs、top
|
资源创建 |
apply、create(临时)、run(调试)
|
资源更新 |
patch、scale、rollout
|
故障排查 |
get events、describe、logs --previous、debug
|
配置管理 |
label、annotate、namespace
|
权限验证 |
auth can-i
|