初识K8s
什么是Kubernetes?
Kubernetes(简称K8s,中间有8个字母所以叫K8s,程序员都喜欢偷懒🤷♂️)是一个开源的容器编排平台。如果把Docker比作"集装箱",那么K8s就是"港口调度系统",负责管理这些集装箱的装卸、运输和存储。
为什么需要K8s?
想象一下,你有100个微服务,每个服务都运行在Docker容器中:
- 🤯 手动管理:哪个容器挂了?在哪台机器上?怎么重启?
- 🔄 扩缩容:流量大了怎么办?半夜加机器?
- 🌐 服务发现:A服务怎么找到B服务?IP变了怎么办?
- 📊 负载均衡:请求怎么分发?怎么避免单点故障?
这就是K8s要解决的问题!
K8s核心架构
K8s采用了经典的Master-Worker架构模式,就像一个"分布式操作系统":
整体架构特点
- Master(Control Plane):大脑,负责决策和管理
- Worker Node:四肢,负责运行具体的应用
- 声明式API:告诉K8s你想要什么,它自己想办法实现
- 控制器模式:持续监控和自动修复
Control Plane
Control Plane是K8s的"大脑",包含几个关键组件:
API Server
- 🌐 集群的前台:所有请求都通过它
- 🔐 认证授权:谁能做什么都由它说了算
- 📝 RESTful API:kubectl、Dashboard都通过它交互
etcd
- 🗄️ 集群的数据库:所有配置、状态都存在这里
- 🔄 分布式一致性:保证数据的一致性和高可用
- 📊 Watch机制:配置变化时实时通知
Scheduler
- 🎯 Pod调度器:决定Pod运行在哪个Node上
- ⚖️ 智能调度:考虑资源、亲和性、反亲和性等因素
- 🔧 可扩展:支持自定义调度策略
Controller Manager
- 🤖 自动化管理:维护集群的期望状态
- 🔄 控制循环:持续监控和调整
- 📦 内置控制器:Deployment、Service、Volume等
Worker Node
Worker Node是K8s的"四肢",真正运行应用的地方:
Kubelet
- 🤖 节点代理:Master和Node之间的桥梁
- 🔄 Pod生命周期管理:创建、监控、删除Pod
- 📊 资源监控:上报节点和Pod状态
Kube-proxy
- 🌐 网络代理:实现Service的负载均衡
- 🔀 流量转发:iptables、ipvs等多种模式
- 📡 服务发现:让Pod能找到其他Service
Container Runtime
- 🐳 容器运行时:Docker、containerd、CRI-O等
- 🔄 镜像管理:拉取、存储、清理镜像
- 📦 容器管理:创建、启动、停止容器
Pod
Pod是K8s中最小的调度单位,理解Pod是掌握K8s的关键:
Pod的特点
- 📦 共享网络:Pod内的容器共享IP和端口
- 💾 共享存储:可以挂载相同的Volume
- 🔄 生命周期绑定:容器同生共死
- 🎯 原子性:要么全部成功,要么全部失败
Pod网络模型
什么时候用多容器Pod?
- 📊 Sidecar模式:日志收集、监控代理
- 🔄 Init容器:应用启动前的初始化工作
- 🌐 代理模式:Service Mesh中的Envoy代理
Service
Service解决了Pod IP不固定的问题,是K8s网络的核心概念:
Service类型
- ClusterIP:集群内部访问(默认)
- NodePort:通过节点端口访问
- LoadBalancer:云厂商负载均衡器
- ExternalName:DNS别名
Service工作原理
服务发现机制
- 🔍 DNS解析:service-name.namespace.svc.cluster.local
- 🌐 环境变量:自动注入Service信息
- 📡 API查询:通过K8s API获取Service信息
实战场景
从单体到微服务的迁移
典型部署模式
1. 蓝绿部署
- 🔄 零停机更新:新版本准备好再切换
- 🔙 快速回滚:出问题立即切回老版本
- 💰 资源成本:需要双倍资源
2. 滚动更新
- 🔄 逐步替换:一个个替换Pod
- 💡 资源友好:不需要额外资源
- ⏱️ 更新时间较长:需要等待所有Pod更新完成
3. 金丝雀发布
- 🐦 小范围验证:先给少量用户使用新版本
- 📊 风险控制:可以观察指标再决定是否全量发布
- 🔧 复杂度较高:需要额外的流量管理
进阶之路
入门阶段(1-2个月)
- 📚 理论基础:掌握容器、Pod、Service等基本概念
- 🛠️ 实践环境:本地搭建minikube或kind
- 💻 命令行工具:熟练使用kubectl
- 📝 YAML编写:会写基本的Deployment、Service配置
进阶阶段(3-6个月)
- 🏗️ 架构设计:理解Control Plane和Worker Node的交互
- 📊 监控告警:Prometheus + Grafana + AlertManager
- 🔐 安全管理:RBAC、NetworkPolicy、SecurityContext
- 📦 包管理:Helm Chart的使用和开发
精通阶段(6个月以上)
- 🚀 平台建设:基于K8s构建PaaS平台
- 🔧 自定义资源:CRD + Operator开发
- 🌐 多集群管理:跨云、跨地域的集群联邦
- 📈 性能优化:大规模集群的调优和治理
学习路径图
总结
K8s不仅仅是一个容器编排工具,它更像是一个"分布式操作系统",为云原生应用提供了完整的运行时环境。通过声明式API和控制器模式,K8s让应用的部署、扩缩容、服务发现等复杂操作变得简单可靠。
K8s的核心价值
- 🚀 提高效率:自动化运维,减少人工干预
- 📈 弹性伸缩:根据负载自动调整资源
- 🔄 故障恢复:自动重启、重新调度失败的Pod
- 🌐 多云支持:一套配置,到处运行
未来展望
随着云原生技术的发展,K8s正在向以下方向演进:
- 🤖 AI/ML工作负载:支持GPU、TPU等AI芯片
- 🔒 零信任安全:更细粒度的安全控制
- 🌍 边缘计算:轻量化的K8s发行版
- 📱 Serverless:Knative、OpenFaaS等FaaS平台
记住:K8s的学习曲线可能很陡峭,但一旦掌握,你就拥有了现代应用部署的"超能力"!🦸♂️
从今天开始,让我们一起在K8s的世界里探索吧!
📌 如果这篇文章对你有帮助,记得点赞收藏哦!有问题欢迎在评论区讨论~