文章目录
-
- 一、集群与资源管理
- 二、应用部署与更新
- 三、调试与诊断
- 四、节点与集群维护
- 五、配置与权限管理
- 六、高阶操作
- 七、详细命令示例与说明
-
- [7.1. 基础命令](#7.1. 基础命令)
- [7.2. 故障排查命令](#7.2. 故障排查命令)
- 7.3.资源配置命令
- [7.4. 集群管理命令](#7.4. 集群管理命令)
- [7.5. 实用技巧与最佳实践](#7.5. 实用技巧与最佳实践)
kubernetes 的命令行工具 kubectl 是集群管理的核心入口。本文通过 6 大场景分类,总结 20 个高频命令,并附详细示例,助你快速掌握日常操作。
一、集群与资源管理
命令 | 类别 | 说明 | 使用示例 |
---|---|---|---|
kubectl get -A | 基础查询 | 查看所有命名空间下的资源(Pod/Deployment 等) | kubectl get pods,deployments -A -o wid查看全集群资源分布 |
kubectl describe | 诊断分析 | 显示资源详细信息(事件、配置、状态) | kubectl describe pod nginx-pod 诊断 Pod 异常原因 |
kubectl apply -f | 声明式管理 | 创建或更新资源(推荐替代 create) | kubectl apply -f deployment.yaml 应用配置 |
kubectl delete | 资源清理 | 删除资源(支持名称/标签/YAML) | kubectl delete pods -l app=nginx 按标签删除 |
二、应用部署与更新
命令 | 类别 | 说明 | 使用示例 |
---|---|---|---|
kubectl rollout | 版本控制 | 管理滚动更新(状态/回滚/暂停) | kubectl rollout undo deployment/nginx 回滚到上一版本 |
kubectl scale | 扩缩容 | 动态调整副本数 | kubectl scale deploy/nginx --replicas=5 扩容至 5 副本 |
kubectl set image | 镜像更新 | 热更新容器镜像 | kubectl set image deploy/nginx nginx=nginx:1.25 |
kubectl autoscale | 自动扩缩容 | 配置 HPA(水平自动扩缩容) | kubectl autoscale deploy/nginx --min=2 --max=10 --cpu-percent=80 |
三、调试与诊断
命令 | 类别 | 说明 | 使用示例 |
---|---|---|---|
kubectl logs | 日志查看 | 实时追踪容器日志 | kubectl logs -f nginx-pod --tail=100 实时查看日志 |
kubectl exec | 容器操作 | 进入容器执行命令 | kubectl exec -it nginx-pod -- /bin/bash 进入 Shell |
kubectl port-forward | 本地调试 | 端口转发到 Pod | kubectl port-forward svc/nginx 8080:80 本地访问服务 |
kubectl top | 资源监控 | 查看节点/Pod 资源利用率(需 Metrics Server) | kubectl top nodes 监控节点 CPU/内存 |
四、节点与集群维护
命令 | 类别 | 说明 | 使用示例 |
---|---|---|---|
kubectl cordon | 节点维护 | 标记节点不可调度 | kubectl cordon node-01 隔离节点 |
kubectl drain | 安全驱逐 | 驱逐节点 Pod(准备维护) | kubectl drain node-01 --ignore-daemonsets 清空节点 |
kubectl taint | 调度控制 | 为节点添加污点 | kubectl taint nodes node-01 env=prod:NoSchedule |
kubectl cluster-info | 集群状态 | 查看集群核心服务地址 | kubectl cluster-info 检查 API Server 状态 |
五、配置与权限管理
命令 | 类别 | 说明 | 使用示例 |
---|---|---|---|
kubectl config | 上下文管理 | 切换多集群配置 | kubectl config use-context prod 切换生产集群 |
kubectl auth can-i | 权限验证 | 检查 RBAC 权限 | kubectl auth can-i delete pods --as=system:serviceaccount:default:test |
六、高阶操作
命令 | 类别 | 说明 | 使用示例 |
---|---|---|---|
kubectl patch | 字段更新 | 热更新资源字段(无需替换完整 YAML) | kubectl patch deployment nginx -p '{"spec":{"replicas":3}}' |
kubectl label | 元数据管理 | 为资源添加标签 | kubectl label pods nginx-pod env=prod 标记生产环境 |
七、详细命令示例与说明
7.1. 基础命令
kubectl get - 列出资源
bash
# 列出所有命名空间的Pod
kubectl get pods --all-namespaces
# 列出默认命名空间的Deployment
kubectl get deployments
# 列出节点信息
kubectl get nodes -o wide
# 以yaml格式列出Pod信息
kubectl get pod nginx-pod -o yaml
kubectl describe - 显示资源详细信息
bash
# 描述Pod详情
kubectl describe pod nginx-pod
# 描述节点详情
kubectl describe node worker-node-1
# 描述Service详情
kubectl describe service nginx-service
kubectl create - 创建资源
bash
# 通过YAML文件创建资源
kubectl create -f nginx-deployment.yaml
# 创建命名空间
kubectl create namespace test-ns
# 从docker镜像创建Deployment
kubectl create deployment nginx --image=nginx:1.20
kubectl apply - 应用配置
bash
# 应用YAML配置(创建或更新)
kubectl apply -f nginx-deployment.yaml
# 应用目录下的所有配置文件
kubectl apply -f ./manifests/
kubectl delete - 删除资源
bash
# 删除Pod
kubectl delete pod nginx-pod
# 通过标签删除资源
kubectl delete pods -l app=nginx
# 删除命名空间及其所有资源
kubectl delete namespace test-ns --force
7.2. 故障排查命令
kubectl logs - 查看日志
bash
# 查看Pod日志
kubectl logs nginx-pod
# 实时查看日志
kubectl logs -f nginx-pod
# 查看多容器Pod中的特定容器日志
kubectl logs nginx-pod -c nginx-container
# 查看之前崩溃的容器日志
kubectl logs -p nginx-pod
kubectl exec - 在容器中执行命令
bash
# 进入Pod的交互式shell
kubectl exec -it nginx-pod -- /bin/bash
# 在Pod中执行简单命令
kubectl exec nginx-pod -- ls /etc/nginx
# 在指定容器中执行命令
kubectl exec -it nginx-pod -c nginx-container -- /bin/bash
kubectl port-forward - 端口转发
bash
# 将本地8080端口转发到Pod的80端口
kubectl port-forward nginx-pod 8080:80
# 转发到Service
kubectl port-forward service/nginx-service 8080:80
# 在后台运行端口转发
kubectl port-forward nginx-pod 8080:80 &
kubectl top - 资源使用统计
bash
# 查看节点资源使用情况
kubectl top nodes
# 查看Pod资源使用情况
kubectl top pods
# 查看指定命名空间的Pod资源使用
kubectl top pods -n kube-system
kubectl cp - 文件拷贝
bash
# 从容器拷贝文件到本地
kubectl cp nginx-pod:/etc/nginx/nginx.conf ./nginx.conf
# 从本地拷贝文件到容器
kubectl cp ./config.txt nginx-pod:/tmp/config.txt
# 拷贝到指定容器
kubectl cp ./file.txt nginx-pod:/tmp/file.txt -c nginx-container
7.3.资源配置命令
kubectl edit - 编辑资源
bash
# 编辑Deployment
kubectl edit deployment nginx-deployment
# 编辑指定命名空间的资源
kubectl edit deployment nginx -n production
# 使用特定编辑器
KUBE_EDITOR="vim" kubectl edit deployment nginx
kubectl scale - 扩缩容
bash
# 扩展Deployment副本数
kubectl scale --replicas=5 deployment/nginx-deployment
# 基于当前副本数进行扩展
kubectl scale --current-replicas=3 --replicas=5 deployment/nginx-deployment
kubectl set - 配置资源参数
bash
# 更新容器镜像
kubectl set image deployment/nginx nginx=nginx:1.21
# 设置环境变量
kubectl set env deployment/nginx DEBUG=true
# 更新资源限制
kubectl set resources deployment/nginx -c=nginx --limits=cpu=200m,memory=512Mi
kubectl patch - 部分更新资源
bash
# 更新容器镜像
kubectl patch pod nginx -p '{"spec":{"containers":[{"name":"nginx","image":"nginx:1.21"}]}}'
# 添加注解
kubectl patch deployment nginx -p '{"metadata":{"annotations":{"version":"v2"}}}'
kubectl rollout - 部署管理
bash
# 查看部署状态
kubectl rollout status deployment/nginx
# 回滚部署
kubectl rollout undo deployment/nginx
# 查看部署历史
kubectl rollout history deployment/nginx
# 重启部署(触发滚动更新)
kubectl rollout restart deployment/nginx
7.4. 集群管理命令
kubectl cluster-info - 集群信息
bash
# 显示集群基本信息
kubectl cluster-info
# 显示详细集群信息
kubectl cluster-info dump
kubectl api-resources - API资源查询
bash
# 列出所有API资源
kubectl api-resources
# 显示资源的API版本
kubectl api-resources --api-group=apps
kubectl config - 配置管理
bash
# 显示当前上下文
kubectl config current-context
# 切换上下文
kubectl config use-context production-cluster
# 查看配置
kubectl config view
kubectl auth - 权限检查
bash
# 检查当前用户是否有创建Pod的权限
kubectl auth can-i create pods
# 检查特定用户权限
kubectl auth can-i list deployments --as=system:serviceaccount:default:default
kubectl explain - 资源文档
bash
# 查看Pod资源的文档
kubectl explain pods
# 查看Pod的spec字段文档
kubectl explain pods.spec
# 查看容器字段文档
kubectl explain pods.spec.containers
7.5. 实用技巧与最佳实践
- 使用别名:为常用命令设置别名,如 alias k='kubectl'
- 自动补全:启用kubectl自动补全功能提高效率
- 使用 -o wide/yaml/json:获取更详细或特定格式的输出
- 标签选择器:使用 -l 参数通过标签筛选资源
- 跨命名空间操作:使用 -n 或 --all-namespaces 管理不同命名空间的资源

"人的一生会经历很多痛苦,但回头想想,都是传奇"。