高頻面試題:描述 K8S 創建 pod 的全過程
這道面試題考察的是對 Kubernetes 核心組件和工作原理的理解。以下是一個簡單的流程圖和詳細的回答,涵蓋了從用戶提交請求到 Pod 正常運行的全過程:
1. 用戶提交請求
用戶通過 kubectl 命令行工具或 API 客戶端提交創建 Pod 的請求。
請求中包含了 Pod 的配置信息,例如容器鏡像、資源需求、環境變量等。
2. API Server 接收請求
API Server 是 Kubernetes 集群的入口,負責接收和處理所有 API 請求。
API Server 會驗證請求的合法性,例如用戶權限、資源配額等。
驗證通過后,API Server 會將 Pod 的配置信息存儲到 etcd 中。
3. Scheduler 調度 Pod
Scheduler 是 Kubernetes 的調度器,負責為新創建的 Pod 選擇合適的節點。
Scheduler 會根據 Pod 的資源需求、節點資源利用率、親和性/反親和性規則等因素進行調度決策。
調度完成后,Scheduler 會將 Pod 與目標節點的綁定信息更新到 etcd 中。
4. kubelet 創建 Pod
kubelet 是運行在每個節點上的代理,負責管理節點上的 Pod 和容器。
kubelet 會監聽 API Server 的變化,當發現有新的 Pod 被調度到當前節點時,就會開始創建 Pod。
kubelet 會從鏡像倉庫拉取所需的容器鏡像,并調用容器運行時 (例如 Docker) 創建和啟動容器。
5. 容器運行
容器運行時負責下載鏡像、創建容器、啟動容器等操作。
容器啟動后,kubelet 會監控容器的運行狀態,并將狀態信息上報給 API Server。
6. Pod 狀態更新
API Server 會將 Pod 的狀態信息存儲到 etcd 中。
用戶可以通過 kubectl get pods 命令查看 Pod 的狀態。
7. 持續監控和健康檢查
kubelet 會持續監控 Pod 的運行狀態,并根據配置的健康檢查策略對容器進行健康檢查。
如果容器出現故障,kubelet 會根據重啟策略嘗試重啟容器。
以上就是K8S 創建 Pod 的過程涉及多個組件的協作,包括 API Server、Scheduler、kubelet、容器運行時等。理解這個過程對于診斷和解決 Pod 部署問題非常重要。