kubectl
kubectl 是 Kubernetes 的命令行工具(CLI),通过 API Server 管理集群中的资源(Pods、Deployments、Services、ConfigMaps 等),该工具与 Kubernetes API 进行交互。通过读取 ~/.kube/config 文件配置连接到目标集群。本质是一个 REST 客户端,向 Kubernetes API 发送 HTTP 请求。
参考文档:命令行工具 (kubectl)官方文档
二、基本语法
kubectl [command] [TYPE] [NAME] [flags]
| 部分 | 说明 |
|---|---|
command | 操作类型,如 get、create、delete、describe |
TYPE | 资源类型,如 pod、deployment、service(支持缩写) |
NAME | 资源名称(可选) |
flags | 参数,如 -n namespace、-o yaml |
✅ 示例:
kubectl get pods -A # 获取所有 Pod
kubectl describe node node1 # 查看 node1 详情
kubectl delete deployment my-app # 删除名为 my-app 的 Deployment
三、常用命令速查表
| 命令 | 用途 | 示例 |
|---|---|---|
kubectl get | 列出资源 | kubectl get pods -A |
kubectl describe | 查看资源详细信息 | kubectl describe pod nginx-123 |
kubectl create | 从文件或 stdin 创建资源 | kubectl create -f app.yaml |
kubectl apply | 声明式更新(推荐) | kubectl apply -f app.yaml |
kubectl delete | 删除资源 | kubectl delete pod nginx-123 |
kubectl logs | 查看容器日志 | kubectl logs -f my-pod |
kubectl exec | 进入容器执行命令 | kubectl exec -it my-pod -- sh |
kubectl port-forward | 端口转发(本地访问服务) | kubectl port-forward svc/my-svc 8080:80 |
kubectl proxy | 启动 API 代理 | kubectl proxy --port=8001 |
kubectl top | 查看资源使用(需 Metrics Server) | kubectl top nodes |
kubectl rollout | 管理部署回滚/状态 | kubectl rollout undo deploy/my-app |
四、资源类型(常用)
| 全称 | 缩写 | 说明 |
|---|---|---|
pods | po | 最小调度单元 |
services | svc | 服务发现与负载均衡 |
deployments | deploy | 无状态应用管理 |
daemonsets | ds | 每节点运行一个 Pod(如 Flannel) |
statefulsets | sts | 有状态应用(如数据库) |
configmaps | cm | 非敏感配置数据 |
secrets | secret | 敏感数据(base64 编码) |
namespaces | ns | 命名空间(逻辑隔离) |
nodes | no | 工作节点 |
persistentvolumes | pv | 存储卷(集群级) |
persistentvolumeclaims | pvc | 存储申请(命名空间级) |
✅ 使用缩写可提高效率:
kubectl get po代替kubectl get pods
五、常用参数(Flags)
| 参数 | 说明 |
|---|---|
-n <namespace> | 指定命名空间(默认 default) |
-A 或 --all-namespaces | 所有命名空间 |
-o wide | 显示更多信息(IP、Node 等) |
-o yaml / -o json | 输出为 YAML/JSON 格式 |
-l key=value | 按标签筛选资源 |
-w | 实时监控(watch) |
--dry-run=client | 试运行(不实际创建) |
--force | 强制删除(配合 --grace-period=0) |
✅ 示例:
# 查看 kube-system 中所有 Pod 的 IP 和所在节点
kubectl get pods -n kube-system -o wide
# 实时监控 default 命名空间的 Pod 变化
kubectl get pods -w
六、典型使用场景
1. 排查 Pod 问题
kubectl get pods # 查看状态
kubectl describe pod <pod-name> # 查看事件和配置
kubectl logs <pod-name> # 查看日志
kubectl exec -it <pod-name> -- sh # 进入容器
2. 部署应用
kubectl apply -f deployment.yaml # 部署
kubectl get deploy # 查看部署状态
kubectl rollout status deploy/my-app # 检查滚动更新状态
3. 调试服务
# 将本地 8080 端口转发到 Service 的 80 端口
kubectl port-forward svc/my-service 8080:80
# 测试是否能访问
curl http://localhost:8080
4. 查看集群状态
kubectl get nodes # 节点是否 Ready
kubectl top nodes # CPU/内存使用(需 Metrics Server)
七、配置文件:~/.kube/config
- 包含集群(clusters)、用户(users)、上下文(contexts)信息。
- 可通过以下命令管理:
kubectl config view # 查看当前配置
kubectl config use-context prod # 切换上下文
kubectl config get-contexts # 列出所有上下文
多集群管理时,此文件非常关键。
八、高级技巧
1. 自动补全(Bash/Zsh)
# Bash
echo "source <(kubectl completion bash)" >> ~/.bashrc
source ~/.bashrc
# Zsh
echo "source <(kubectl completion zsh)" >> ~/.zshrc
2. 别名简化
alias k=kubectl
alias kg='kubectl get'
alias kd='kubectl describe'
3. 输出自定义列
kubectl get pods -o custom-columns=NAME:.metadata.name,NODE:.spec.nodeName,STATUS:.status.phase
4. 批量删除
# 删除所有 Completed 状态的 Job
kubectl delete job -l job-name=my-job
# 删除所有未运行的 Pod
kubectl delete pod --field-selector=status.phase!=Running
九、注意事项
- 权限控制:操作受 RBAC 限制,普通用户可能无法删除系统 Pod。
- 命名空间隔离:不指定
-n时,默认操作default命名空间。 applyvscreate:apply:声明式,支持增量更新(推荐)。create:命令式,重复执行会报错。
- 删除资源:某些资源(如 PVC)即使 Pod 删除后仍保留,需手动清理。
十、学习建议
- 官方文档:https://kubernetes.io/docs/reference/kubectl/
- 交互式学习:https://kubernetes.io/docs/tutorials/kubernetes-basics/
- 速查卡片:打印 kubectl cheatsheet
总结
kubectl 是 Kubernetes 的”瑞士军刀”:
- 查看:
get,describe,logs - 操作:
apply,delete,exec - 调试:
port-forward,proxy,top - 管理:
config,rollout,scale
掌握 kubectl,就掌握了 Kubernetes 的命脉!