k8s 之kubectl 管理日常运维(二)- Kubernetes 集群管理必备指南
·
kubectl 是你与 Kubernetes 集群沟通的瑞士军刀。无论你是 Kubernetes 新手还是资深运维,掌握这些常用命令都是高效管理集群的关键。这份速查表将帮助你:
- ⚡ 快速定位所需命令
- 🎯 理解命令使用场景
- 🔧 提升故障排查效率
必知技巧:
- 📌 资源缩写:pods→po,services→svc,deployments→deploy,namespaces→ns
- 🏷️ 命名空间:使用 -n 指定操作命名空间
- 📊 详细信息:使用 -o wide 输出更详细信息(如 Pod 所在节点 IP)
- 👀 实时监控:使用 -w 实时监控资源变化 (watch)
- 🎨 多种输出格式:-o yaml/json/wide/name 满足不同需求
5分钟快速入门:最常用的10个命令
⚡ 新手必会:这些命令覆盖了80%的日常使用场景
# 1. 查看集群状态
kubectl cluster-info
# 2. 查看所有 Pod(当前命名空间)
kubectl get pods
# 3. 查看所有服务
kubectl get services
# 4. 查看 Pod 详细信息(排错必备)
kubectl describe pod <pod-name>
# 5. 查看 Pod 日志
kubectl logs <pod-name>
# 6. 实时跟踪日志
kubectl logs -f <pod-name>
# 7. 进入 Pod 容器调试
kubectl exec -it <pod-name> -- /bin/bash
# 8. 应用配置文件
kubectl apply -f <filename.yaml>
# 9. 删除资源
kubectl delete pod <pod-name>
# 10. 端口转发(本地调试)
kubectl port-forward <pod-name> 8080:80
资源查看与管理 (Get & Describe)
🔍 使用场景:日常巡检、资源监控、问题定位
🔥 最常用的查看命令
# 📌 基础资源查看(使用缩写更快捷)
kubectl get pods # 查看 Pod(当前命名空间)
kubectl get po -A # 查看所有命名空间的 Pod
kubectl get deploy # 查看 Deployment
kubectl get svc # 查看 Service
kubectl get ns # 查看命名空间
kubectl get nodes # 查看集群节点
# 🎯 进阶查看技巧
kubectl get pods -o wide # 显示 Pod 所在节点等详细信息
kubectl get pods -w # 实时监控 Pod 状态变化
kubectl get pods --show-labels # 显示 Pod 标签信息
kubectl get pods -l app=nginx # 按标签筛选 Pod
kubectl get all -n kube-system # 查看系统命名空间的所有资源
📊 资源详细信息查看
# 🔍 describe 命令:排错必备神器
kubectl describe pod my-app-pod # 查看 Pod 详细信息和事件
kubectl describe deploy my-app # 查看 Deployment 详细信息
kubectl describe svc my-service # 查看 Service 详细信息
# 🏷️ 以不同格式输出资源定义
kubectl get pod my-app-pod -o yaml # YAML 格式(学习编写 YAML 很有用)
kubectl get pod my-app-pod -o json # JSON 格式
kubectl get pod my-app-pod -o name # 仅资源名称
🎯 更多查看技巧
# 🔍 高级查询和筛选
kubectl get pods --field-selector=status.phase=Running # 按状态筛选
kubectl get pods --sort-by=.metadata.creationTimestamp # 按创建时间排序
kubectl get pods -o custom-columns=NAME:.metadata.name,STATUS:.status.phase # 自定义输出列
应用部署与管理 (Apply & Delete)
🎯 使用场景:应用发布、配置更新、资源清理
📦 配置文件操作
# ✅ 应用配置文件(创建或更新资源)
kubectl apply -f app-deployment.yaml # 应用单个文件
kubectl apply -f ./configs/ # 应用整个目录下的所有 YAML 文件
kubectl apply -f app.yaml -f service.yaml # 同时应用多个文件
# 🔍 验证配置文件(不实际执行)
kubectl apply -f app.yaml --dry-run=client # 客户端验证
kubectl apply -f app.yaml --dry-run=server # 服务端验证
🗑️ 资源删除操作
# ⚠️ 谨慎操作:删除是不可逆的
kubectl delete -f app-deployment.yaml # 根据配置文件删除资源
kubectl delete pod my-app-pod # 删除特定 Pod
kubectl delete deploy my-app # 删除 Deployment
kubectl delete svc my-service # 删除 Service
# 🚨 强制删除(慎用!)
kubectl delete pod my-app-pod --grace-period=0 --force
🛡️ 安全操作最佳实践
# 🔒 使用标签精确控制删除范围
kubectl delete pods -l app=my-app # 只删除带有特定标签的 Pod
kubectl delete all -l env=test # 删除测试环境的所有资源
# ⚡ 批量操作技巧
kubectl delete pods --field-selector=status.phase=Failed # 删除所有失败的 Pod
⚙️ 应用更新与伸缩 (Rollout & Scale)
🔄 使用场景:版本发布、滚动更新、负载扩缩容
🚀 Deployment 滚动更新
# 📈 查看发布历史和状态
kubectl rollout history deployment my-app # 查看发布历史
kubectl rollout status deployment my-app # 查看滚动更新状态
kubectl get rs -l app=my-app # 查看 ReplicaSet 历史版本
# ⏪ 版本回滚操作
kubectl rollout undo deployment my-app # 回滚到上一个版本
kubectl rollout undo deployment my-app --to-revision=3 # 回滚到指定版本
# 🔄 触发重新部署(如更新镜像)
kubectl set image deployment/my-app nginx=nginx:1.21 # 更新容器镜像
kubectl patch deployment my-app -p '{"spec":{"template":{"metadata":{"annotations":{"date":"'$(date +%s)'"}}}}}' # 触发重新部署
📊 手动扩缩容操作
# 📈 手动调整副本数
kubectl scale deployment my-app --replicas=5 # 扩展到 5 个副本
kubectl scale deployment my-app --replicas=1 # 缩容到 1 个副本
# 🎯 基于资源指标的自动扩缩容(需要安装 metrics-server)
kubectl autoscale deployment my-app --min=2 --max=10 --cpu-percent=80 # CPU 使用率超过80%时自动扩容
# 📋 查看扩缩容状态
kubectl get hpa # 查看 HorizontalPodAutoscaler
kubectl top nodes # 查看节点资源使用情况
kubectl top pods # 查看 Pod 资源使用情况
查看 Deployment 的发布历史
kubectl rollout history deployment <deployment_name>
查看某次发布的详细信息
kubectl rollout history deployment <deployment_name> --revision=<revision_number>
回滚到上一个版本
kubectl rollout undo deployment <deployment_name>
回滚到指定版本
kubectl rollout undo deployment <deployment_name> --to-revision=<revision_number>
查看滚动更新的状态
kubectl rollout status deployment <deployment_name>
手动扩缩容
# 将 Deployment 的副本数扩展到 5
kubectl scale deployment <deployment_name> --replicas=5
调试与交互 (Logs & Exec)
使用场景:故障排查、日志分析、容器调试
📋 Pod 日志查看
# 📄 基础日志查看
kubectl logs my-app-pod # 查看 Pod 日志
kubectl logs my-app-pod -c nginx # 多容器 Pod 查看特定容器日志
kubectl logs -f my-app-pod # 实时跟踪日志(类似 tail -f)
# 🕐 查看历史日志
kubectl logs my-app-pod --tail=100 # 查看最后100行日志
kubectl logs my-app-pod --since=1h # 查看最近1小时的日志
kubectl logs my-app-pod --since-time="2024-01-01T00:00:00Z" # 查看指定时间后的日志
# 🔄 查看之前容器的日志(容器重启后)
kubectl logs my-app-pod --previous # 查看上一个容器的日志
🔧 容器调试与交互
# 💻 进入容器调试
kubectl exec -it my-app-pod -- /bin/bash # 进入容器交互式 Shell
kubectl exec -it my-app-pod -c nginx -- /bin/sh # 多容器指定容器进入
kubectl exec my-app-pod -- ls -la /app # 在容器中执行单个命令
# 📁 文件传输和查看
kubectl cp /local/path my-app-pod:/remote/path # 拷贝本地文件到 Pod
kubectl cp my-app-pod:/remote/path /local/path # 从 Pod 拷贝文件到本地
kubectl exec my-app-pod -- cat /etc/hosts # 查看容器内文件内容
# 🔍 网络调试
kubectl exec -it my-app-pod -- nslookup kubernetes.default # DNS 解析测试
kubectl exec -it my-app-pod -- ping 8.8.8.8 # 网络连通性测试
kubectl exec -it my-app-pod -- curl http://service-name # 服务访问测试
🌐 端口转发与代理
# 🔗 端口转发(本地调试神器)
kubectl port-forward my-app-pod 8080:80 # 将本地8080转发到Pod的80端口
kubectl port-forward svc/my-service 8888:80 # 转发Service端口
kubectl port-forward my-app-pod 5000-6000:5000-6000 # 转发端口范围
# ⏱️ 后台端口转发
nohup kubectl port-forward my-app-pod 8080:80 > pf.log 2>&1 & # 后台运行端口转发
🏗️ 集群与配置 (Cluster & Config)
⚙️ 使用场景:集群管理、上下文切换、配置查看
🌐 集群信息查看
# 🏢 基础集群信息
kubectl cluster-info # 查看集群基本信息
kubectl get nodes # 查看所有节点状态
kubectl get nodes -o wide # 查看节点详细信息
kubectl describe node worker-node-1 # 查看特定节点详细信息
# 📊 集群资源概览
kubectl get cs # 查看组件状态(API Server, Controller Manager, Scheduler)
kubectl get ns # 查看命名空间
kubectl api-resources # 查看支持的 API 资源类型
kubectl api-versions # 查看 API 版本信息
🔧 上下文和配置管理
# 🎯 上下文操作
kubectl config current-context # 查看当前上下文
kubectl config get-contexts # 查看所有可用上下文
kubectl config use-context prod-cluster # 切换到生产环境集群
kubectl config view # 查看完整配置信息
# 🔑 用户和权限管理
kubectl config set-credentials admin --username=admin --password=secret # 设置用户凭据
kubectl auth can-i create pods # 检查当前用户权限
kubectl auth can-i "*" "*" --all-namespaces # 检查是否拥有全部权限
🚨 故障排查与高级技巧
🔧 使用场景:问题诊断、性能分析、高级调试
🔍 常用故障排查命令
# ⚠️ Pod 问题排查
kubectl get events --sort-by='.lastTimestamp' # 按时间排序查看事件
kubectl get pods --all-namespaces | grep -v Running # 查找非运行状态的 Pod
kubectl describe pod my-app-pod | grep -A 5 -B 5 Error # 查找错误信息
# 🌐 网络问题排查
kubectl get endpoints my-service # 查看 Service 后端端点
kubectl get networkpolicy # 查看网络策略
kubectl exec -it my-app-pod -- netstat -tulpn # 查看网络连接
# 🔒 权限问题排查
kubectl auth can-i create pods --as=system:serviceaccount:default:my-sa # 检查 ServiceAccount 权限
🚀 高级技巧和实用命令
# 📝 批量操作技巧
kubectl get pods --all-namespaces -o jsonpath='{range .items[*]}{@.metadata.namespace}{"\t"}{@.metadata.name}{"\n"}{end}'# 批量获取 Pod 列表
kubectl delete pods --field-selector=status.phase=Failed --all-namespaces # 删除所有失败的 Pod
# 🏷️ 标签和注解操作
kubectl label pods my-app-pod env=production # 添加标签
kubectl annotate pods my-app-pod description="生产环境应用"# 添加注解
kubectl get pods --show-labels # 显示标签
kubectl get pods -l 'env in (production, staging)'# 标签选择器
# 📦 资源导出和备份
kubectl get deploy my-app -o yaml > my-app-backup.yaml # 导出资源配置
kubectl cluster-info dump --all-namespaces > cluster-dump.txt # 导出集群信息
📚 常用资源缩写对照表

🎯 故障排查场景速查
Pod 启动失败的常见原因
- 镜像拉取失败:kubectl describe pod 查看 Events
- 资源不足:kubectl describe nodes 查看资源使用情况
- 配置错误:检查 ConfigMap 和 Secret 是否存在
- 健康检查失败:查看应用日志 kubectl logs
Service 访问问题的排查步骤
- 检查 Service 是否存在:kubectl get svc
- 检查后端端点:kubectl get endpoints
- 检查 Pod 标签是否匹配:kubectl get pods --show-labels
- 网络连通性测试:kubectl exec 进入 Pod 测试
提示:遇到问题时,首先使用 kubectl describe 查看详细信息和 Events,然后查看相关资源的日志!
查看集群信息
kubectl cluster-info
查看集群中的所有节点
kubectl get nodes
查看所有可用的上下文
kubectl config get-contexts
切换上下文
kubectl config use-context <context_name>
更多推荐


所有评论(0)