b2c電子商務(wù)網(wǎng)站系統(tǒng)分析網(wǎng)絡(luò)推廣策劃
K8S生成pod過(guò)程
- 流程圖
- 具體生成過(guò)程
- 用戶(hù)提交 Pod 定義
- API Server 處理請(qǐng)求
- 調(diào)度器分配節(jié)點(diǎn)(Scheduling)
- 目標(biāo)節(jié)點(diǎn)上的 Pod 創(chuàng)建
- 網(wǎng)絡(luò)配置
- 狀態(tài)上報(bào)與監(jiān)控
- 控制器管理(Controller Manager)
- 就緒與服務(wù)發(fā)現(xiàn)
- 關(guān)鍵錯(cuò)誤場(chǎng)景
- 高級(jí)特性
流程圖
具體生成過(guò)程
用戶(hù)提交 Pod 定義
用戶(hù)通過(guò)提交 Pod 的 YAML/JSON 配置文件發(fā)送到 kube-apiserver。
kubectl apply -f pod.yaml
API Server 處理請(qǐng)求
- 認(rèn)證與授權(quán):API Server 驗(yàn)證用戶(hù)身份(如 TLS 證書(shū)、Token)并檢查權(quán)限(RBAC)。
- 準(zhǔn)入控制(Admission Control):
- Mutating Admission Controllers:可能修改 Pod 配置(例如注入 Sidecar 容器)。
- Validating Admission Controllers:驗(yàn)證配置的合法性(如資源限制是否合規(guī))。
- 持久化存儲(chǔ):驗(yàn)證通過(guò)后,Pod 的元數(shù)據(jù)寫(xiě)入 etcd 數(shù)據(jù)庫(kù),此時(shí) Pod 狀態(tài)為 Pending。
調(diào)度器分配節(jié)點(diǎn)(Scheduling)
- kube-scheduler 監(jiān)聽(tīng) API Server,發(fā)現(xiàn)未綁定的 Pod。
- 根據(jù)調(diào)度策略選擇合適節(jié)點(diǎn):
- 資源需求(CPU/內(nèi)存)。
- 節(jié)點(diǎn)選擇器(nodeSelector)、親和性(affinity)、污點(diǎn)與容忍(tolerations)。
- 更新 Pod 的 nodeName 字段并寫(xiě)入 etcd,觸發(fā)事件(如 Scheduled)。
目標(biāo)節(jié)點(diǎn)上的 Pod 創(chuàng)建
- kubelet 監(jiān)聽(tīng) API Server,發(fā)現(xiàn)分配到本節(jié)點(diǎn)的 Pod。
- Pod 配置同步:kubelet 從 API Server 獲取 Pod 定義。
- 存儲(chǔ)卷掛載:按配置掛載持久卷(PV)、ConfigMap、Secret 等。
- 容器運(yùn)行時(shí)交互:
- 拉取鏡像:通過(guò)容器運(yùn)行時(shí)(如 containerd)拉取鏡像,失敗時(shí)狀態(tài)為 ImagePullBackOff。
- 創(chuàng)建容器:
- 先創(chuàng)建 pause 容器(共享網(wǎng)絡(luò)命名空間)。
- 按順序啟動(dòng) Init 容器(若有),全部成功后繼續(xù)。
- 啟動(dòng)主容器,執(zhí)行生命周期鉤子(如 postStart)。
網(wǎng)絡(luò)配置
- CNI 插件調(diào)用:kubelet 調(diào)用 CNI 插件為 Pod 分配 IP、設(shè)置網(wǎng)絡(luò)(如 Calico、Flannel)。
- 網(wǎng)絡(luò)策略(NetworkPolicy)可能由 CNI 插件或其他組件(如 Cilium)實(shí)施。
狀態(tài)上報(bào)與監(jiān)控
- kubelet 持續(xù)監(jiān)控容器狀態(tài),定期向 API Server 上報(bào):
- 容器啟動(dòng)成功 → Pod 狀態(tài)變?yōu)?Running。
- 容器崩潰或探針失敗 → 狀態(tài)為 CrashLoopBackOff 或 Unhealthy。
- 事件流記錄:各組件(調(diào)度器、kubelet)通過(guò) API Server 記錄事件(如 Pulled, Started),可通過(guò) kubectl describe pod 查看。
控制器管理(Controller Manager)
- 若 Pod 屬于高層資源(如 Deployment、ReplicaSet):
- 控制器確保實(shí)際狀態(tài)與期望狀態(tài)一致(例如重啟失敗的 Pod 或維持副本數(shù))。
- 自愈機(jī)制:自動(dòng)替換不健康的 Pod(如節(jié)點(diǎn)故障時(shí)重新調(diào)度)。
就緒與服務(wù)發(fā)現(xiàn)
- 就緒探針(Readiness Probe) 通過(guò)后,Pod IP 被加入 Service 的 Endpoints。
- kube-proxy 更新節(jié)點(diǎn)上的 iptables/ipvs 規(guī)則,允許流量路由到新 Pod。
關(guān)鍵錯(cuò)誤場(chǎng)景
- 調(diào)度失敗:無(wú)合適節(jié)點(diǎn) → Pod 保持 Pending,需檢查資源請(qǐng)求、節(jié)點(diǎn)標(biāo)簽或污點(diǎn)。
- 鏡像拉取失敗:私有鏡像權(quán)限問(wèn)題 → 狀態(tài)為 ImagePullBackOff。
- 容器崩潰:應(yīng)用啟動(dòng)錯(cuò)誤 → CrashLoopBackOff,需檢查日志(kubectl logs)。
高級(jí)特性
- Init 容器:按順序運(yùn)行,全部成功后才啟動(dòng)主容器。
- Sidecar 注入:通過(guò) Admission Controller(如 Istio 的自動(dòng)注入)動(dòng)態(tài)修改 Pod 配置。