Docker + Kubernetes(k8s) + Serverless详解

容器化(Docker)革命

Docker的核心架构

  • 镜像(Image)

    • 只读模板,包含应用代码、运行时、库和配置文件。
    • 分层存储:每层可复用(如基础OS层、Java环境层、应用层),减少重复传输。
  • 容器(Container)

    • 镜像的运行实例,具有可写层(存储运行时数据)。
    • 通过Linux Namespace实现隔离(PID、网络、文件系统等)。
    • 通过Cgroups限制资源(CPU、内存、磁盘IO)。
  • 容器仓库(Registry) :集中存储和分发镜像的平台(如Docker Hub私有仓库);支持版本控制与镜像签名(防止篡改)。

容器编排(Orchestration)

  • 核心挑战:大规模容器集群的管理(调度、网络、存储、自愈)。

  • Kubernetes(K8s)的核心组件

    • Pod:最小调度单元,包含一个或多个共享网络/存储的容器。
    • Deployment:定义Pod副本数与滚动更新策略。
    • Service:为Pod提供稳定的IP和DNS名称,实现服务发现。
    • Ingress:管理外部流量路由(如HTTP路径到后端服务)。
  • 自动化能力

    • 自动扩缩容(HPA) :根据CPU使用率或自定义指标扩缩Pod数量。
    • 自愈机制:Pod崩溃后自动重启,节点故障时迁移Pod。

容器网络模型

  • Overlay网络:跨主机的容器通信(如Flannel的VXLAN、Calico的BGP协议);实现容器间扁平化IP互通,屏蔽底层网络差异。
  • CNI(Container Network Interface) :标准化插件接口,支持多种网络方案(如AWS VPC、Cilium)。

容器存储

  • Volume:持久化存储,生命周期独立于容器(如数据库数据);支持本地磁盘、云存储(AWS EBS)、分布式存储(Ceph)。
  • Persistent Volume(PV) :K8s中抽象存储资源,通过PVC(Persistent Volume Claim)动态绑定。

Kubernetes深度解析

控制平面(Control Plane)

  • API Server

    • 作用:所有资源操作的唯一入口(如创建Pod、更新Deployment),提供RESTful API。
    • 特性:支持多版本API、认证鉴权(RBAC)、准入控制(Admission Control)。
  • etcd

    • 作用:分布式键值存储数据库,保存集群状态(如节点信息、Pod配置)。
    • 特性:强一致性(Raft共识算法)、高可用部署(多节点集群)。
  • Controller Manager

    • 作用:运行各类控制器,持续监听集群状态并驱动其向期望状态收敛。

    • 核心控制器

      Node Controller:监控节点健康状态(如心跳超时标记为不可用)。

      Deployment Controller:确保Pod副本数与声明一致(如扩缩容、滚动更新)。

      Endpoint Controller:维护Service与Pod的映射关系。

  • Scheduler

    • 作用:为新创建的Pod选择最佳运行节点。

    • 调度策略

      资源需求:CPU、内存、GPU等。

      亲和性/反亲和性:优先部署到同一区域或分散节点。

      污点与容忍(Taints and Tolerations) :限制Pod只能在特定节点运行(如GPU节点)。

工作节点(Worker Node)

  • kubelet

    • 作用:节点上的“管家”,负责与API Server通信并管理本节点Pod的生命周期。
    • 关键任务:拉取容器镜像、挂载存储卷、执行健康检查(Liveness/Readiness Probe)。
  • kube-proxy

    • 作用:维护节点网络规则,实现Service的负载均衡(如iptables/IPVS)。
    • 流量转发:将Service的ClusterIP请求转发到后端Pod(通过Endpoints动态更新)。
  • 容器运行时(Container Runtime)

    • 支持引擎:Docker、containerd、CRI-O(遵循CRI标准)。
    • 职责:拉取镜像、启停容器、管理容器生命周期。

Kubernetes核心资源对象

  • Pod

    • 最小调度单元:一个Pod包含一个或多个共享网络/存储的容器(如主容器 + 日志收集Sidecar)。
    • 临时性:Pod销毁后IP和存储卷可能丢失(需结合Persistent Volume)。
    • 重启策略:Always(默认)、OnFailure、Never。
  • Deployment:声明式管理Pod副本集(ReplicaSet),支持滚动更新和回滚。

  • Service

    • 作用:为Pod提供稳定的访问入口(ClusterIP、NodePort、LoadBalancer)。
    • 服务发现:通过DNS名称(如nginx-service.default.svc.cluster.local)访问。
    • 流量分发:支持Session Affinity(会话保持)、加权负载均衡。
  • ConfigMap:存储非敏感配置(如环境变量、配置文件)。

  • Secret:加密存储敏感数据(如数据库密码、TLS证书)。

  • PersistentVolume (PV) :集群级别的存储资源抽象(如NFS卷、云存储)。

  • PersistentVolumeClaim (PVC) :用户对存储资源的请求(如“需要10GiB SSD存储”),由K8s动态绑定PV。

Kubernetes核心功能

  • 自动扩缩容(HPA) :根据CPU、内存或自定义指标(如QPS)动态调整Pod副本数。

  • 滚动更新与回滚

    • 策略:逐步替换旧Pod,确保服务不间断。
    • 回滚命令kubectl rollout undo deployment/nginx-deployment
  • 服务网格集成(如Istio) :通过Sidecar代理(Envoy)实现流量管理、熔断限流、分布式追踪。

  • 资源配额与限制

    • Resource Quota:限制Namespace的资源总量(如CPU、内存、Pod数量)。
    • LimitRange:定义Pod/容器的默认资源请求和上限。

Kubernetes网络模型

  • 容器网络接口(CNI)

    • 标准插件:Calico(BGP路由)、Flannel(Overlay网络)、Cilium(eBPF加速)。
    • 核心要求:所有Pod可不经NAT直接通信;节点与Pod可互相访问。
  • Service网络

    • ClusterIP:虚拟IP,仅集群内可访问。
    • NodePort:通过节点端口暴露服务(如30080)。
    • LoadBalancer:集成云厂商负载均衡器(如AWS ALB)。
  • Ingress:管理外部HTTP/HTTPS流量路由(如域名、路径到后端服务)。

Kubernetes存储管理

  • Volume类型

    • 临时卷:emptyDir(Pod生命周期内有效)。
    • 持久卷:(云存储)awsElasticBlockStore、azureDisk;(分布式存储)Ceph RBD、GlusterFS。
  • StatefulSet

    • 适用场景:有状态应用(如MySQL集群、ZooKeeper)。
    • 特性:稳定网络标识(Pod名称+序号);按顺序部署/扩缩容;持久化存储(每个Pod绑定独立PV)。

无服务器(Serverless)架构

无服务器架构核心理念

  • 零运维:无需管理服务器、操作系统、运行时环境。
  • 事件驱动:由HTTP请求、消息队列、定时任务等事件触发执行。
  • 极致弹性:从零实例瞬间扩展到数千实例,流量下降后自动缩容至零。
  • 按使用付费:仅对实际消耗的计算资源(如执行时间、内存)付费,空闲时无成本。

函数即服务(FaaS)

  • 代表平台:AWS Lambda、Azure Functions、阿里云函数计算。

  • 工作流程

    • 事件触发:如API Gateway收到HTTP请求、S3存储桶新增文件、Kafka消息到达。
    • 动态调度:云平台自动分配计算资源(如CPU、内存),启动函数实例。
    • 执行函数:运行用户编写的业务逻辑(如处理图像、验证订单)。
    • 释放资源:函数执行完成后,实例被回收,资源释放。

后端即服务(BaaS)

  • 托管服务:云厂商提供免运维的数据库、存储、认证等服务,与FaaS配合使用。
  • 数据库:AWS DynamoDB(NoSQL)、Firebase Realtime Database。
  • 存储:AWS S3(对象存储)、Cloudinary(媒体处理)。
  • 认证:Auth0、AWS Cognito。

事件源与触发器

  • HTTP请求:通过API Gateway触发函数。
  • 消息队列:如AWS SQS、Kafka消息到达时触发。
  • 存储变更:如S3文件上传、数据库记录更新。
  • 定时任务:Cron表达式定时触发(如每天凌晨清理日志)。

冷启动与预置并发

  • 冷启动:首次请求或长时间无请求后启动函数实例的延迟(100ms~数秒)。
  • 预置并发(Provisioned Concurrency) :预先分配固定实例,减少冷启动(如AWS Lambda Provisioned Concurrency)。
全部评论
佬怎么开始发八股
点赞 回复 分享
发布于 04-14 17:48 上海

相关推荐

评论
2
7
分享

创作者周榜

更多
牛客网
牛客企业服务