Docker + Kubernetes(k8s) + Serverless詳解
容器化(Docker)革命
Docker的核心架構(gòu)
-
鏡像(Image) :
- 只讀模板,包含應(yīng)用代碼、運行時、庫和配置文件。
- 分層存儲:每層可復(fù)用(如基礎(chǔ)OS層、Java環(huán)境層、應(yīng)用層),減少重復(fù)傳輸。
-
容器(Container) :
- 鏡像的運行實例,具有可寫層(存儲運行時數(shù)據(jù))。
- 通過Linux Namespace實現(xiàn)隔離(PID、網(wǎng)絡(luò)、文件系統(tǒng)等)。
- 通過Cgroups限制資源(CPU、內(nèi)存、磁盤IO)。
-
容器倉庫(Registry) :集中存儲和分發(fā)鏡像的平臺(如Docker Hub私有倉庫);支持版本控制與鏡像簽名(防止篡改)。
容器編排(Orchestration)
-
核心挑戰(zhàn):大規(guī)模容器集群的管理(調(diào)度、網(wǎng)絡(luò)、存儲、自愈)。
-
Kubernetes(K8s)的核心組件:
- Pod:最小調(diào)度單元,包含一個或多個共享網(wǎng)絡(luò)/存儲的容器。
- Deployment:定義Pod副本數(shù)與滾動更新策略。
- Service:為Pod提供穩(wěn)定的IP和DNS名稱,實現(xiàn)服務(wù)發(fā)現(xiàn)。
- Ingress:管理外部流量路由(如HTTP路徑到后端服務(wù))。
-
自動化能力:
- 自動擴縮容(HPA) :根據(jù)CPU使用率或自定義指標擴縮Pod數(shù)量。
- 自愈機制:Pod崩潰后自動重啟,節(jié)點故障時遷移Pod。
容器網(wǎng)絡(luò)模型
- Overlay網(wǎng)絡(luò):跨主機的容器通信(如Flannel的VXLAN、Calico的BGP協(xié)議);實現(xiàn)容器間扁平化IP互通,屏蔽底層網(wǎng)絡(luò)差異。
- CNI(Container Network Interface) :標準化插件接口,支持多種網(wǎng)絡(luò)方案(如AWS VPC、Cilium)。
容器存儲
- Volume:持久化存儲,生命周期獨立于容器(如數(shù)據(jù)庫數(shù)據(jù));支持本地磁盤、云存儲(AWS EBS)、分布式存儲(Ceph)。
- Persistent Volume(PV) :K8s中抽象存儲資源,通過PVC(Persistent Volume Claim)動態(tài)綁定。
Kubernetes深度解析
控制平面(Control Plane)
-
API Server
- 作用:所有資源操作的唯一入口(如創(chuàng)建Pod、更新Deployment),提供RESTful API。
- 特性:支持多版本API、認證鑒權(quán)(RBAC)、準入控制(Admission Control)。
-
etcd
- 作用:分布式鍵值存儲數(shù)據(jù)庫,保存集群狀態(tài)(如節(jié)點信息、Pod配置)。
- 特性:強一致性(Raft共識算法)、高可用部署(多節(jié)點集群)。
-
Controller Manager
-
作用:運行各類控制器,持續(xù)監(jiān)聽集群狀態(tài)并驅(qū)動其向期望狀態(tài)收斂。
-
核心控制器:
Node Controller:監(jiān)控節(jié)點健康狀態(tài)(如心跳超時標記為不可用)。
Deployment Controller:確保Pod副本數(shù)與聲明一致(如擴縮容、滾動更新)。
Endpoint Controller:維護Service與Pod的映射關(guān)系。
-
-
Scheduler
-
作用:為新創(chuàng)建的Pod選擇最佳運行節(jié)點。
-
調(diào)度策略:
資源需求:CPU、內(nèi)存、GPU等。
親和性/反親和性:優(yōu)先部署到同一區(qū)域或分散節(jié)點。
污點與容忍(Taints and Tolerations) :限制Pod只能在特定節(jié)點運行(如GPU節(jié)點)。
-
工作節(jié)點(Worker Node)
-
kubelet
- 作用:節(jié)點上的“管家”,負責與API Server通信并管理本節(jié)點Pod的生命周期。
- 關(guān)鍵任務(wù):拉取容器鏡像、掛載存儲卷、執(zhí)行健康檢查(Liveness/Readiness Probe)。
-
kube-proxy
- 作用:維護節(jié)點網(wǎng)絡(luò)規(guī)則,實現(xiàn)Service的負載均衡(如iptables/IPVS)。
- 流量轉(zhuǎn)發(fā):將Service的ClusterIP請求轉(zhuǎn)發(fā)到后端Pod(通過Endpoints動態(tài)更新)。
-
容器運行時(Container Runtime)
- 支持引擎:Docker、containerd、CRI-O(遵循CRI標準)。
- 職責:拉取鏡像、啟停容器、管理容器生命周期。
Kubernetes核心資源對象
-
Pod
- 最小調(diào)度單元:一個Pod包含一個或多個共享網(wǎng)絡(luò)/存儲的容器(如主容器 + 日志收集Sidecar)。
- 臨時性:Pod銷毀后IP和存儲卷可能丟失(需結(jié)合Persistent Volume)。
- 重啟策略:Always(默認)、OnFailure、Never。
-
Deployment:聲明式管理Pod副本集(ReplicaSet),支持滾動更新和回滾。
-
Service
- 作用:為Pod提供穩(wěn)定的訪問入口(ClusterIP、NodePort、LoadBalancer)。
- 服務(wù)發(fā)現(xiàn):通過DNS名稱(如
nginx-service.default.svc.cluster.local
)訪問。 - 流量分發(fā):支持Session Affinity(會話保持)、加權(quán)負載均衡。
-
ConfigMap:存儲非敏感配置(如環(huán)境變量、配置文件)。
-
Secret:加密存儲敏感數(shù)據(jù)(如數(shù)據(jù)庫密碼、TLS證書)。
-
PersistentVolume (PV) :集群級別的存儲資源抽象(如NFS卷、云存儲)。
-
PersistentVolumeClaim (PVC) :用戶對存儲資源的請求(如“需要10GiB SSD存儲”),由K8s動態(tài)綁定PV。
Kubernetes核心功能
-
自動擴縮容(HPA) :根據(jù)CPU、內(nèi)存或自定義指標(如QPS)動態(tài)調(diào)整Pod副本數(shù)。
-
滾動更新與回滾
- 策略:逐步替換舊Pod,確保服務(wù)不間斷。
- 回滾命令:
kubectl rollout undo deployment/nginx-deployment
。
-
服務(wù)網(wǎng)格集成(如Istio) :通過Sidecar代理(Envoy)實現(xiàn)流量管理、熔斷限流、分布式追蹤。
-
資源配額與限制
- Resource Quota:限制Namespace的資源總量(如CPU、內(nèi)存、Pod數(shù)量)。
- LimitRange:定義Pod/容器的默認資源請求和上限。
Kubernetes網(wǎng)絡(luò)模型
-
容器網(wǎng)絡(luò)接口(CNI)
- 標準插件:Calico(BGP路由)、Flannel(Overlay網(wǎng)絡(luò))、Cilium(eBPF加速)。
- 核心要求:所有Pod可不經(jīng)NAT直接通信;節(jié)點與Pod可互相訪問。
-
Service網(wǎng)絡(luò)
- ClusterIP:虛擬IP,僅集群內(nèi)可訪問。
- NodePort:通過節(jié)點端口暴露服務(wù)(如30080)。
- LoadBalancer:集成云廠商負載均衡器(如AWS ALB)。
- Ingress:管理外部HTTP/HTTPS流量路由(如域名、路徑到后端服務(wù))。
Kubernetes存儲管理
-
Volume類型
- 臨時卷:emptyDir(Pod生命周期內(nèi)有效)。
- 持久卷:(云存儲)awsElasticBlockStore、azureDisk;(分布式存儲)Ceph RBD、GlusterFS。
-
StatefulSet
- 適用場景:有狀態(tài)應(yīng)用(如MySQL集群、ZooKeeper)。
- 特性:穩(wěn)定網(wǎng)絡(luò)標識(Pod名稱+序號);按順序部署/擴縮容;持久化存儲(每個Pod綁定獨立PV)。
無服務(wù)器(Serverless)架構(gòu)
無服務(wù)器架構(gòu)核心理念
- 零運維:無需管理服務(wù)器、操作系統(tǒng)、運行時環(huán)境。
- 事件驅(qū)動:由HTTP請求、消息隊列、定時任務(wù)等事件觸發(fā)執(zhí)行。
- 極致彈性:從零實例瞬間擴展到數(shù)千實例,流量下降后自動縮容至零。
- 按使用付費:僅對實際消耗的計算資源(如執(zhí)行時間、內(nèi)存)付費,空閑時無成本。
函數(shù)即服務(wù)(FaaS)
-
代表平臺:AWS Lambda、Azure Functions、阿里云函數(shù)計算。
-
工作流程:
- 事件觸發(fā):如API Gateway收到HTTP請求、S3存儲桶新增文件、Kafka消息到達。
- 動態(tài)調(diào)度:云平臺自動分配計算資源(如CPU、內(nèi)存),啟動函數(shù)實例。
- 執(zhí)行函數(shù):運行用戶編寫的業(yè)務(wù)邏輯(如處理圖像、驗證訂單)。
- 釋放資源:函數(shù)執(zhí)行完成后,實例被回收,資源釋放。
后端即服務(wù)(BaaS)
- 托管服務(wù):云廠商提供免運維的數(shù)據(jù)庫、存儲、認證等服務(wù),與FaaS配合使用。
- 數(shù)據(jù)庫:AWS DynamoDB(NoSQL)、Firebase Realtime Database。
- 存儲:AWS S3(對象存儲)、Cloudinary(媒體處理)。
- 認證:Auth0、AWS Cognito。
事件源與觸發(fā)器
- HTTP請求:通過API Gateway觸發(fā)函數(shù)。
- 消息隊列:如AWS SQS、Kafka消息到達時觸發(fā)。
- 存儲變更:如S3文件上傳、數(shù)據(jù)庫記錄更新。
- 定時任務(wù):Cron表達式定時觸發(fā)(如每天凌晨清理日志)。
冷啟動與預(yù)置并發(fā)
- 冷啟動:首次請求或長時間無請求后啟動函數(shù)實例的延遲(100ms~數(shù)秒)。
- 預(yù)置并發(fā)(Provisioned Concurrency) :預(yù)先分配固定實例,減少冷啟動(如AWS Lambda Provisioned Concurrency)。