文章目录
- [kubectl 全面指南:Kubernetes 的瑞士军刀](#kubectl 全面指南:Kubernetes 的瑞士军刀)
-
- [一、什么是 kubectl?](#一、什么是 kubectl?)
- [二、kubectl 的工作原理](#二、kubectl 的工作原理)
- [三、kubectl 基础命令](#三、kubectl 基础命令)
-
- [1. 查看资源(get)](#1. 查看资源(get))
- [2. 创建资源(apply / create)](#2. 创建资源(apply / create))
- [3. 删除资源(delete)](#3. 删除资源(delete))
- [4. 查看详细信息(describe)](#4. 查看详细信息(describe))
- [5. 查看日志(logs)](#5. 查看日志(logs))
- [6. 进入容器(exec)](#6. 进入容器(exec))
- [7. 端口转发(port-forward)](#7. 端口转发(port-forward))
- 四、命名空间(Namespace)
- 五、上下文管理(Context)
- 六、输出格式与过滤
- [七、标签与选择器(Label & Selector)](#七、标签与选择器(Label & Selector))
- 八、滚动更新与回滚
- 九、调试与排障技巧
-
- [1. 快速定位问题](#1. 快速定位问题)
- [2. 查看事件(Events)](#2. 查看事件(Events))
- [3. 使用临时调试容器(Ephemeral Container)](#3. 使用临时调试容器(Ephemeral Container))
- [十、kubectl 常用技巧](#十、kubectl 常用技巧)
-
- [1. alias 简化命令](#1. alias 简化命令)
- [2. 自动补全](#2. 自动补全)
- [3. dry-run 模式](#3. dry-run 模式)
- [4. explain 查看字段说明](#4. explain 查看字段说明)
- [十一、声明式 vs 命令式](#十一、声明式 vs 命令式)
- 十二、最佳实践
-
- [1. 使用 YAML 管理资源](#1. 使用 YAML 管理资源)
- [2. 避免直接修改线上资源](#2. 避免直接修改线上资源)
- [3. 合理使用 Namespace](#3. 合理使用 Namespace)
- [4. 配合工具使用](#4. 配合工具使用)
- 十三、总结
kubectl 全面指南:Kubernetes 的瑞士军刀
在使用 Kubernetes 的过程中,kubectl 是每个工程师最常用、也是最重要的工具之一。它就像 Kubernetes 的"命令行控制台",通过它你可以完成从资源创建、部署、调试到排障的几乎所有操作。
本文将从基础到进阶,系统介绍 kubectl 的核心概念、常用命令以及最佳实践。
一、什么是 kubectl?
kubectl 是 Kubernetes 官方提供的命令行工具,用于与 Kubernetes API Server 进行交互。
简单来说:
kubectl = Kubernetes 的 CLI(命令行客户端)
它通过 HTTP 请求调用 Kubernetes API,实现对集群资源的管理。
二、kubectl 的工作原理
kubectl 的执行流程如下:
- 读取本地 kubeconfig 配置(默认在
~/.kube/config) - 确定目标集群、用户和上下文
- 构造 REST 请求
- 调用 API Server
- 返回结果并格式化输出
三、kubectl 基础命令
1. 查看资源(get)
bash
kubectl get pods
kubectl get nodes
kubectl get svc
常用参数:
bash
kubectl get pods -o wide
kubectl get pods -A
kubectl get pods -n kube-system
2. 创建资源(apply / create)
推荐使用 apply(声明式):
bash
kubectl apply -f deployment.yaml
create(命令式):
bash
kubectl create deployment nginx --image=nginx
3. 删除资源(delete)
bash
kubectl delete pod pod-name
kubectl delete -f deployment.yaml
4. 查看详细信息(describe)
bash
kubectl describe pod pod-name
用于排查问题非常关键。
5. 查看日志(logs)
bash
kubectl logs pod-name
kubectl logs -f pod-name
kubectl logs pod-name -c container-name
6. 进入容器(exec)
bash
kubectl exec -it pod-name -- /bin/bash
用于调试容器内部环境。
7. 端口转发(port-forward)
bash
kubectl port-forward pod-name 8080:80
适用于本地调试服务。
四、命名空间(Namespace)
Kubernetes 使用 Namespace 进行资源隔离:
bash
kubectl get pods -n dev
kubectl config set-context --current --namespace=dev
五、上下文管理(Context)
kubectl 支持多集群切换:
bash
kubectl config get-contexts
kubectl config use-context my-cluster
六、输出格式与过滤
kubectl 支持多种输出格式:
bash
kubectl get pods -o yaml
kubectl get pods -o json
kubectl get pods -o wide
配合 JSONPath:
bash
kubectl get pods -o jsonpath='{.items[*].metadata.name}'
七、标签与选择器(Label & Selector)
标签是 Kubernetes 资源管理的核心:
bash
kubectl get pods -l app=nginx
添加标签:
bash
kubectl label pod pod-name env=prod
八、滚动更新与回滚
查看 rollout 状态:
bash
kubectl rollout status deployment/nginx
回滚版本:
bash
kubectl rollout undo deployment/nginx
查看历史版本:
bash
kubectl rollout history deployment/nginx
九、调试与排障技巧
1. 快速定位问题
bash
kubectl get pods
kubectl describe pod pod-name
kubectl logs pod-name
2. 查看事件(Events)
bash
kubectl get events --sort-by=.metadata.creationTimestamp
3. 使用临时调试容器(Ephemeral Container)
bash
kubectl debug pod-name -it --image=busybox
十、kubectl 常用技巧
1. alias 简化命令
bash
alias k=kubectl
2. 自动补全
bash
source <(kubectl completion bash)
3. dry-run 模式
bash
kubectl apply -f deployment.yaml --dry-run=client
4. explain 查看字段说明
bash
kubectl explain deployment.spec
十一、声明式 vs 命令式
| 模式 | 特点 | 推荐程度 |
|---|---|---|
| 命令式 | 快速、适合测试 | ⭐⭐ |
| 声明式 | 可版本化、可回滚 | ⭐⭐⭐⭐⭐ |
建议生产环境始终使用:
bash
kubectl apply -f xxx.yaml
十二、最佳实践
1. 使用 YAML 管理资源
- 配合 Git 版本控制
- 支持 GitOps
2. 避免直接修改线上资源
- 使用 CI/CD 管道更新
3. 合理使用 Namespace
- 按环境划分(dev / staging / prod)
4. 配合工具使用
- kustomize
- helm
十三、总结
kubectl 是 Kubernetes 的核心操作工具,掌握它意味着你已经具备了操作 Kubernetes 集群的基本能力。
可以用一句话总结:
kubectl 是连接开发者与 Kubernetes 集群的桥梁。
熟练掌握 kubectl,不仅能提升开发效率,也能在故障排查时节省大量时间。