kubectl 是 Kubernetes 的命令行工具,也是你与集群交互的主要方式。掌握常用命令、资源查看、对象管理、调试技巧,能让你高效地操作任何 K8s 集群。本文系统讲解 kubectl 的基本语法、常用子命令、资源类型缩写、输出格式定制,以及配置管理,并给出大量实战示例。
一、Kubectl 基本语法
bash
kubectl [command] [TYPE] [NAME] [flags]
command:对资源执行的操作,如 get, describe, create, apply, delete, logs, exec。
TYPE:资源类型(如 pod, deployment, service, node),支持单数和复数缩写(po, deploy, svc, no)。
NAME:资源名称,省略时表示所有资源(受命名空间限制)。
flags:可选参数,如 -n namespace、-o wide、--context。
二、常用命令速查表

三、资源类型与缩写
常用资源的完整名称和缩写(kubectl api-resources 查看全部):

技巧:使用 kubectl api-resources 快速查看所有支持的资源及其短名称。
四、输出格式定制
通过 -o 或 --output 控制输出格式:

实用 jsonpath 示例:
bash
# 获取所有 Pod 的名称
kubectl get pods -o jsonpath='{range .items[*]}{.metadata.name}{"\n"}{end}'
# 获取特定节点的 Pod 名称
kubectl get pods -o jsonpath='{.items[?(@.spec.nodeName=="node1")].metadata.name}'
五、资源创建与更新
5.1 声明式管理(推荐)
使用 YAML 或 JSON 文件定义资源,然后执行 apply:
bash
kubectl apply -f deployment.yaml
kubectl apply -f ./manifests/ # 应用目录下所有 YAML
kubectl apply -f https://example.com/deploy.yaml
apply 使用 last-applied-configuration 注解执行增量更新,适合长期维护。
5.2 命令式管理(临时调试用)
bash
# 创建 Deployment
kubectl create deployment nginx --image=nginx --replicas=3
# 创建 Service
kubectl expose deployment nginx --port=80 --type=LoadBalancer
# 创建 ConfigMap 从文件
kubectl create configmap app-config --from-file=./app.conf
# 创建 Secret 从字面值
kubectl create secret generic db-secret --from-literal=password=123456
生产环境推荐使用声明式(YAML + GitOps),便于版本控制和审计。
六、查看与调试
6.1 查看资源
bash
kubectl get pods --show-labels # 显示标签
kubectl get pods -l app=nginx # 按标签筛选
kubectl get pods -n kube-system # 指定命名空间
kubectl get pods --field-selector status.phase=Running # 按字段筛选
6.2 描述资源
describe 命令输出资源的详细状态、事件、最新变更:
bash
kubectl describe pod my-pod
kubectl describe node node1
查看 Events 部分对排查故障非常有用(如拉取镜像失败、调度失败、探针错误)。
6.3 实时监控
bash
kubectl get pods -w # 持续监听变化
kubectl get events --watch # 实时事件流
kubectl get pods -o wide --watch # 组合使用
6.4 日志查看
bash
kubectl logs my-pod # 单容器 Pod
kubectl logs my-pod -c sidecar-container # 多容器 Pod 指定容器
kubectl logs -l app=nginx --tail=20 # 按标签筛选,最后20行
kubectl logs -f my-pod # 实时跟踪
kubectl logs my-pod --previous # 查看上一个崩溃容器的日志
6.5 进入容器执行命令
bash
kubectl exec my-pod -- ls -l /tmp
kubectl exec -it my-pod -- /bin/bash # 交互式 Shell
kubectl exec -it my-pod -c sidecar -- sh # 多容器时指定容器
6.6 端口转发
将本地端口转发到 Pod 或 Service 的端口,便于调试:
bash
kubectl port-forward pod/my-pod 8080:80
kubectl port-forward service/my-service 8080:80
七、标签与选择器
标签是 Kubernetes 组织资源的核心机制。为资源添加标签:
bash
kubectl label pods my-pod app=web version=v1
kubectl label pods my-pod version- # 删除标签
选择器(-l)支持等值(=、==、!=)和集合(in、notin):
bash
kubectl get pods -l 'app in (web,api),version!=v2'
八、命名空间管理
命名空间用于资源隔离(如环境、团队)。
bash
kubectl create namespace dev
kubectl get namespaces
kubectl config set-context --current --namespace=dev # 切换默认命名空间
kubectl run nginx --image=nginx -n dev # 指定命名空间
kubectl delete namespace dev # 删除命名空间(会删除其下所有资源)
九、常用别名与自动补全
提高效率的配置:
bash
# 设置别名
alias k=kubectl
alias kgp='kubectl get pods'
alias kd='kubectl describe'
alias kdel='kubectl delete'
alias kexec='kubectl exec -it'
alias klogs='kubectl logs'
# Bash 自动补全(永久生效)
echo 'source <(kubectl completion bash)' >> ~/.bashrc
echo 'alias k=kubectl' >> ~/.bashrc
echo 'complete -o default -F __start_kubectl k' >> ~/.bashrc
source ~/.bashrc
十、配置管理(kubeconfig)
默认配置文件为 ~/.kube/config,支持多集群、多上下文。
bash
kubectl config view # 查看当前配置
kubectl config get-contexts # 列出所有上下文
kubectl config current-context # 当前上下文
kubectl config use-context <name> # 切换上下文
kubectl config set-credentials ... # 设置用户认证
kubectl config set-cluster ... # 设置集群
十一、常见故障排查流程

十二、小结
kubectl 是管理 K8s 集群的强大工具。掌握常用命令、输出格式、标签选择器、命名空间、调试技巧,能让你应对日常运维和开发需求。建议熟记资源缩写、善于使用 describe 和 logs 排查问题,并结合 apply -f 进行声明式管理。