目錄
1.什么是Pod的根容器?
2.解釋Pod的生命周期。
3.Init類型容器有什么特點,主要用途?
4.Sidecar類型容器和Init容器的區別在哪?
5.什么是靜態Pod?
6.說明K8s控制器的作用?
7.什么是ReplicaSet,說明它的主要用途。
8.Deployment控制器是如何工作的,舉例說明其常見用途。
9.解釋DaemonSet,列舉其使用場景。
10.什么是StatefulSet,其主要作用是什么?
11.說明Job與CronJob的功能。
12.Kubernetes如何在集群的Pod之間提供網絡服務?
13.解釋iptables和IPVS代理模式Service的區別。
14.舉例說明ClusterIP類型Service的用法。
15.舉例說明NodePort類型Service的用法。
16.舉例說明Headless類型Service的用法。
17.詳細說明Ingress的實現原理和它所實現的功能。
1.什么是Pod的根容器?
Pod 的根容器指的是?Pause 容器,它是每個 Pod 的基礎容器,由 Kubernetes 自動創建。
2.解釋Pod的生命周期。
Pod的生命周期包括以下階段:
Pending:Pod 已被創建但未被調度到節點,可能等待資源分配或鏡像下載。
Running:Pod 已調度到節點,所有 Init 容器成功完成,至少一個主容器正在運行。
Succeeded:所有容器正常終止,不再重啟。
Failed:至少一個容器以非零狀態終止,且無法通過重啟策略恢復。
Unknown:Kubernetes 無法獲取 Pod 的狀態(通常因節點通信失敗)。
3.Init類型容器有什么特點,主要用途?
特點:
執行順序:在主容器啟動前按順序執行,必須全部成功。
不可重啟性:若 Init 容器失敗,Pod 會進入 Failed 狀態(除非restartPolicy為Always)。
輕量級工具:通常包含主鏡像中沒有的工具(如wget、nslookup)。
主要用途:
依賴檢查:例如等待數據庫服務就緒。
環境準備:生成配置文件、初始化數據庫 schema。
安全隔離:通過獨立鏡像避免將敏感工具包含在主鏡像中。
4.Sidecar類型容器和Init容器的區別在哪?
特性 | Init 容器 | Sidecar 容器 |
執行時機 | 主容器啟動前按順序執行完畢 | 與主容器并行運行,直至 Pod 終止 |
功能 | 初始化任務(如依賴檢查、數據準備) | 輔助功能(如日志收集、代理) |
探針支持 | 不支持livenessProbe、readinessProbe | 支持所有探針類型 |
生命周期 | 一次性執行,不與主容器共享運行時 | 與主容器共享網絡和存儲,持續協作 |
5.什么是靜態Pod?
靜態 Pod 是由kubelet直接管理的 Pod,無需通過 Kubernetes API Server。
6.說明K8s控制器的作用?
控制器通過控制回路(Control Loop) 確保集群狀態與用戶定義的期望狀態一致。其核心功能包括:
自動修復:替換故障 Pod,保持副本數穩定。
彈性伸縮:根據負載自動調整 Pod 數量。
版本管理:支持滾動更新和回滾。
資源調度:將 Pod 分配到合適的節點。
7.什么是ReplicaSet,說明它的主要用途。
ReplicaSet 是 Kubernetes 的基礎控制器,用于維護指定數量的 Pod 副本。其核心用途包括:
高可用性:當節點故障或 Pod 崩潰時,自動創建新副本。
水平擴展:通過調整replicas字段增加或減少 Pod 數量。
標簽選擇器:通過selector匹配 Pod 標簽,實現精準管理。
8.Deployment控制器是如何工作的,舉例說明其常見用途。
Deployment 通過創建和管理 ReplicaSet 來實現 Pod 的滾動更新。更新時,它會逐步替換舊 Pod 為新 Pod,確保服務不中斷。關鍵步驟包括:
創建新的 ReplicaSet,指定新版本鏡像。
按比例逐步增加新 Pod,同時減少舊 Pod。
監控更新過程,若出現問題自動回滾。
常見用途:
應用發布:例如將 Web 應用從 v1 升級到 v2。
回滾管理:快速回退到上一穩定版本。
9.解釋DaemonSet,列舉其使用場景。
DaemonSet 確保每個節點(或匹配標簽的節點)運行一個 Pod 副本。典型場景包括:
日志收集:在每個節點部署 Fluentd,收集本地日志。
監控代理:運行 Prometheus Node Exporter,采集節點指標。
網絡插件:部署 Calico 或 Flannel 的網絡代理,實現 Pod 間通信。
安全代理:運行節點級防火墻或入侵檢測系統。
10.什么是StatefulSet,其主要作用是什么?
StatefulSet 用于管理有狀態應用,如數據庫和分布式系統。其核心作用包括:
穩定標識:為每個 Pod 分配唯一且固定的 DNS 名稱(如web-0.web)。
持久化存儲:通過 PersistentVolumeClaim 為每個 Pod 提供獨立存儲。
順序管理:Pod 按順序啟動、擴展和終止,確保數據一致性。
滾動更新:支持按順序更新 Pod,避免腦裂等問題。
11.說明Job與CronJob的功能。
Job:用于執行一次性任務,例如批量數據處理或備份。
CronJob:定時執行 Job,例如每日報表生成。
12.Kubernetes如何在集群的Pod之間提供網絡服務?
Kubernetes 通過以下機制實現 Pod 間通信:
Pod 網絡模型:每個 Pod 擁有獨立 IP,集群內 Pod 可直接通過 IP 通信(需 CNI 插件支持,如 Calico、Flannel)。
Service 抽象:通過 ClusterIP、NodePort 等類型的 Service,為 Pod 提供穩定的訪問入口。
DNS 服務:CoreDNS 自動為 Service 和 Pod 生成 DNS 記錄,支持my-service.my-namespace.svc.cluster.local格式的域名解析。
13.解釋iptables和IPVS代理模式Service的區別。
特性 | iptables | IPVS |
原理 | 基于 Linux 內核的 Netfilter 規則匹配 | 基于 IPVS(IP Virtual Server)框架 |
性能 | 低吞吐量,高延遲(規則匹配逐包處理) | 高吞吐量,低延遲(基于哈希表轉發) |
功能 | 支持基本負載均衡和端口映射 | 支持更復雜的調度算法(如輪詢、加權最小連接) |
適用場景 | 小型集群或簡單負載均衡需求 | 大型集群或高流量場景 |
14.舉例說明ClusterIP類型Service的用法。
ClusterIP 為 Service 分配一個集群內部 IP,僅在集群內可見。典型用法:
內部服務通信:微服務架構中,前端應用通過 ClusterIP 訪問后端 API 服務。
無頭服務:結合 Headless Service(clusterIP: None)直接訪問 Pod IP。
15.舉例說明NodePort類型Service的用法。
NodePort 在每個節點的指定端口(默認 30000-32767)暴露服務,允許外部訪問。典型用法:
臨時測試:在開發環境中通過節點 IP 和端口直接訪問服務。
無負載均衡器時:作為公有云負載均衡器的替代方案。
16.舉例說明Headless類型Service的用法。
Headless Service(clusterIP: None)不分配 ClusterIP,直接返回后端 Pod 的 IP 列表。典型用法:
有狀態應用:StatefulSet 通過 Headless Service 為每個 Pod 分配唯一 DNS 名稱(如web-0.web)。
服務發現:客戶端需要直接訪問特定 Pod(如數據庫主從節點)。
17.詳細說明Ingress的實現原理和它所實現的功能。
實現原理:
Ingress 通過負載均衡器(如 Nginx、Traefik)將外部流量路由到集群內的 Service。其核心組件包括:
Ingress Controller:運行在集群節點上,監聽 Ingress 規則并配置負載均衡器。
Ingress 資源:定義路由規則,如基于域名、路徑的轉發策略。
功能:
域名路由:支持example.com和api.example.com分別映射到不同 Service。
路徑路由:/app路徑轉發到 App Service,/admin路徑轉發到 Admin Service。
TLS 終止:在 Ingress 層解密 HTTPS 流量,保護后端服務。
負載均衡:支持輪詢、最少連接數等調度算法。