Kubernetes 了解及操作指令
一、核心概念
什么是 K8s
开源的容器编排平台,用于自动化部署、扩展和管理容器化应用,是一站式分布式系统开发与支撑平台。
核心能力
自动部署与回滚:分步上线,健康监控,故障自动回滚
服务发现与负载均衡:自动分配 DNS/IP,流量分发
自动扩缩容:按 CPU 等指标增减实例
自我修复:重启崩溃容器、替换故障 Pod、重新调度
存储编排:自动挂载本地/云/网络存储
密钥与配置管理:安全管理敏感信息,无需重建镜像
为什么用 K8s
与业务无关的底层代码/功能模块从视线中消失
不必费心负载均衡器选型和部署
不必引入或自研复杂服务治理框架
不必头疼服务监控和故障处理模块开发
二、集群架构
控制平面(Master)
工作节点(Node)
三、核心资源对象
关键特性
容器编排:自动化部署、滚动更新/回滚、负载均衡
扩展和管理:自动扩展、自愈能力
存储管理:持久化存储、存储编排
服务发现和负载均衡:内置服务发现、多种负载均衡策略
配置和密钥管理:配置文件/环境变量、安全密钥管理
多环境支持:混合云/多云、多集群管理
社区和生态:丰富插件扩展、持续演进
四、自动扩缩容体系
联动关系:
流量突增 → HPA 扩容 Pod → 资源不足 → CA 扩容 Node
流量回落 → HPA 缩容 Pod → 节点闲置 → CA 缩容 NodeHPA 管"应用层",CA 管"基础设施层",VPA 管"单 Pod 资源调优",三者配合实现全链路弹性。
扩展方案:
集群节点自动扩缩(Cluster Autoscaler / Karpenter):
扩容触发:存在因资源不足无法调度的 Pending Pod 时,调用云厂商 API 制备新节点
缩容触发:节点利用率持续低于阈值且 Pod 可迁移时,驱逐 Pod 并移除节点
主流实现:Cluster Autoscaler(基于预定义 Node Group)、Karpenter(自动制备、直接管理云资源)
五、常用命令
1. 查看类(占日常 80%)
kubectl cluster-info # 集群信息
kubectl get nodes -o wide # 节点详情
kubectl get pods # Pod 列表
kubectl get deploy # Deployment
kubectl get svc # Service
kubectl get all # 所有资源
kubectl get pods -A # 所有命名空间
kubectl get pods -o wide # 含 IP/节点
kubectl get pods -l app=xxx # 按标签筛选
kubectl get pods -w # 实时监控
kubectl describe pod <name> # 详情(调度/事件/状态)
kubectl get pod <name> -o yaml # 完整 YAML
kubectl get events --sort-by='.lastTimestamp' # 事件排障2. 部署与更新
kubectl apply -f app.yaml # 创建/更新(生产只用 apply)
kubectl apply -f ./k8s-dir/ # 整个目录
kubectl delete -f app.yaml # 删除
kubectl scale deploy <name> --replicas=5 # 扩缩容
kubectl autoscale deploy <name> --min=2 --max=10 --cpu-percent=80 # HPA
kubectl set image deploy/<name> <container>=<image>:<tag> # 热更新镜像
kubectl rollout restart deploy/<name> # 重启3. 滚动发布与回滚
kubectl rollout status deploy/<name> # 发布状态
kubectl rollout history deploy/<name> # 发布历史
kubectl rollout undo deploy/<name> # 回滚上一版本
kubectl rollout undo deploy/<name> --to-revision=3 # 回滚指定版本
kubectl rollout pause deploy/<name> # 暂停
kubectl rollout resume deploy/<name> # 恢复4. 调试排障(三板斧)
# 1️⃣ 看状态
kubectl get pods
kubectl describe pod <name>
# 2️⃣ 看日志
kubectl logs <name> # 日志
kubectl logs <name> -f # 实时追踪
kubectl logs <name> --previous # 上次崩溃日志
kubectl logs <name> -c <container> # 多容器指定
# 3️⃣ 进入容器
kubectl exec -it <name> -- /bin/bash
kubectl exec -it <name> -- /bin/sh # Alpine 精简镜像
# 端口转发
kubectl port-forward pod/<name> 8080:80
kubectl port-forward svc/<name> 8080:80
# 文件拷贝
kubectl cp <pod>:/path/file ./local # 容器→本地
kubectl cp ./local <pod>:/path/file # 本地→容器5. 资源监控
kubectl top nodes # 节点资源(需 metrics-server)
kubectl top pods # Pod 资源
kubectl top pods -A # 所有命名空间6. 节点维护
kubectl cordon <node> # 标记不可调度
kubectl uncordon <node> # 恢复调度
kubectl drain <node> --ignore-daemonsets --delete-emptydir-data # 驱逐 Pod
kubectl taint nodes <node> key=value:NoSchedule # 添加污点### 7. 命名空间与上下文
kubectl get ns # 查看所有命名空间
kubectl create ns <name> # 创建
kubectl config get-contexts # 查看上下文
kubectl config use-context <name> # 切换集群
kubectl config set-context --current --namespace=<ns> # 切换默认 ns8. 配置与元数据
kubectl label pod <name> env=prod --overwrite # 加/改标签
kubectl label pod <name> env- # 删标签
kubectl annotate pod <name> note="xxx" # 加注解
kubectl edit deploy <name> # 在线编辑
kubectl explain pod.spec.containers # 字段文档
kubectl get deploy <name> -o yaml > backup.yaml # 导出备份9. 效率技巧
alias k=kubectl # 日常直接用 k get pods⭐ 日常记住三组
排障三板斧:
get pods→describe pod→logs pod发布三件套:
apply→rollout status→rollout undo调试三件套:
exec→port-forward→top
六、常见踩坑点
Kubernetes 了解及操作指令
本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
评论交流
欢迎留下你的想法