2025年K8s最新高頻面試題,看看你能答對幾個?

Kubernetes的核心組件有哪些,各自作用是什么?
- Master節(jié)點組件:
 
a.kube-apiserver:集群的控制入口,提供REST API接口。
b.kube-scheduler:負責Pod調(diào)度,決定Pod運行在哪個節(jié)點上。
c.kube-controller-manager:運行各種控制器,確保集群狀態(tài)與期望狀態(tài)一致。
d.etcd:分布式鍵值存儲,保存集群所有配置信息。
- Node節(jié)點組件:
 - kubelet:負責節(jié)點上的Pod生命周期管理。
 - kube-proxy:負責實現(xiàn)服務(wù)(Service)負載均衡和網(wǎng)絡(luò)代理。
 - 容器運行時(如Docker、containerd):運行容器鏡像的環(huán)境。
 
Pod和Deployment的區(qū)別?
- Pod:是Kubernetes最小的資源單位,一組容器的集合,生命周期短暫,可能隨時被重建。
 - Deployment:控制Pod副本的部署和管理,提供滾動升級、回滾等功能,確保應(yīng)用的高可用性。
 
Service有哪些類型,分別適用于什么場景?
- ClusterIP(默認):在集群內(nèi)訪問服務(wù),不對外暴露。
 - NodePort:通過節(jié)點IP和靜態(tài)端口對外暴露服務(wù)(適合測試或臨時訪問)。
 - LoadBalancer:結(jié)合云服務(wù)提供商的負載均衡器,直接對外提供服務(wù)。
 - ExternalName:通過DNS別名映射到外部服務(wù)。
 
ConfigMap和Secret有什么區(qū)別?
- ConfigMap:存儲明文非敏感配置,如環(huán)境變量、配置文件等。
 - Secret:存儲加密的敏感信息,如密碼、Token和證書。
 
StatefulSet 和 Deployment 的主要區(qū)別是什么?
- StatefulSet:用于有狀態(tài)的服務(wù),Pod具有穩(wěn)定的標識(網(wǎng)絡(luò)、存儲),Pod啟動和銷毀嚴格按照順序進行(如數(shù)據(jù)庫)。
 - Deployment:用于無狀態(tài)應(yīng)用,Pod可任意擴展、縮減,無嚴格順序要求。
 
什么是 Ingress,有哪些常用實現(xiàn)方式?
- Ingress:提供集群外部到服務(wù)的HTTP/HTTPS訪問的規(guī)則集合。
 - 常用實現(xiàn)方式:
 
a.NGINX Ingress Controller
b.Traefik
c.HAProxy
如何限制 Kubernetes 中 Pod 資源使用?
- 通過在Pod中定義
resources字段的requests(申請)和limits(限制),如CPU、內(nèi)存等,防止資源爭用或失控。 
yaml
復(fù)制編輯
resources:
  requests:
    cpu: "500m"
    memory: "256Mi"
  limits:
    cpu: "1"
    memory: "512Mi"Pod如何實現(xiàn)親和性與反親和性?
親和性與反親和性通過節(jié)點親和性(NodeAffinity)和Pod親和性(PodAffinity/PodAntiAffinity)實現(xiàn)。
- 親和性(Affinity):允許Pod根據(jù)節(jié)點或其他Pod的特征調(diào)度在特定節(jié)點。
 - 反親和性(Anti-affinity):防止Pod被調(diào)度到具有特定特征的節(jié)點或與其他Pod位于同一節(jié)點。
 
使用nodeAffinity指定Pod傾向于部署到特定節(jié)點,而PodAntiAffinity則避免多個相似Pod集中在同一節(jié)點上,增強容災(zāi)能力。
Kubernetes如何實現(xiàn)健康檢查?
通過兩種探針:
- Liveness Probe:檢測容器是否存活,如失敗則重啟。
 - Readiness Probe:檢測容器是否準備好接收流量,如失敗則不轉(zhuǎn)發(fā)請求。
 
DaemonSet的典型應(yīng)用場景是什么?
答案:
- 日志收集代理(如Fluentd)
 - 節(jié)點監(jiān)控Agent(如Node Exporter)
 - 網(wǎng)絡(luò)組件(如CNI插件)
 
DaemonSet確保每個節(jié)點運行一個Pod,通常用于基礎(chǔ)設(shè)施服務(wù)。
Kubernetes的存儲卷(Volume)有哪些常見類型?
答案:
- emptyDir:生命周期跟隨Pod,僅適合臨時存儲。
 - hostPath:掛載節(jié)點文件系統(tǒng),可能有安全風險。
 - PersistentVolumeClaim (PVC):與PersistentVolume關(guān)聯(lián)的持久化存儲卷。
 - configMap與secret:掛載配置或敏感數(shù)據(jù)。
 
Kubernetes Pod驅(qū)逐(Eviction)原因有哪些?
答案:
- 節(jié)點資源不足(CPU/內(nèi)存壓力)
 - 節(jié)點維護(kubectl drain操作)
 - Pod違反QoS策略(超出內(nèi)存limits)
 - 節(jié)點NotReady、宕機等異常狀態(tài)
 
如何實現(xiàn)節(jié)點隔離(Pod不調(diào)度到某節(jié)點)?
答案:
- 使用
kubectl cordon標記節(jié)點為不可調(diào)度。 - 使用
taint與toleration實現(xiàn)節(jié)點級別Pod調(diào)度控制。 
bash
復(fù)制編輯
kubectl taint nodes node01 key=value:NoScheduleKubernetes的調(diào)度算法主要考慮哪些因素?
答案:
- 節(jié)點資源充足性(CPU/內(nèi)存)
 - 節(jié)點親和性與反親和性
 - 污點(taint)和容忍度(toleration)
 - 自定義調(diào)度策略(調(diào)度擴展器)
 
什么是Sidecar模式,舉一個典型例子?
答案:
Sidecar是指在Pod中使用輔助容器,增強主容器功能。典型例子:Istio中Envoy代理作為Sidecar,實現(xiàn)流量管理、安全策略、監(jiān)控等功能。
Kubernetes如何保證Secret的安全性?
答案:
- Secret以Base64編碼存儲在etcd中。
 - 生產(chǎn)環(huán)境中應(yīng)啟用etcd加密。
 - RBAC限制訪問Secret的權(quán)限。
 - 使用第三方密鑰管理系統(tǒng)(如Vault)更安全。
 
Kubernetes中QoS的三種類型有哪些?
答案:
- Guaranteed:設(shè)置相同的requests和limits,保證資源。
 - Burstable:requests < limits,可能資源被限制或驅(qū)逐。
 - BestEffort:沒有設(shè)置requests和limits,資源最低保證。
 
Kubernetes如何實現(xiàn)擴容縮容(彈性伸縮)?
答案:
- Pod級:Horizontal Pod Autoscaler (HPA),根據(jù)CPU、內(nèi)存等指標自動擴縮容。
 - 節(jié)點級:Cluster Autoscaler,根據(jù)資源不足自動增加或減少節(jié)點。
 
為什么要設(shè)置PodDisruptionBudget?
答案:
PodDisruptionBudget定義允許同時不可用Pod的數(shù)量,用于保護應(yīng)用高可用,避免維護或升級時服務(wù)中斷。
kube-proxy有哪些實現(xiàn)模式,各自優(yōu)缺點?
答案:
- userspace模式(已棄用):性能低,轉(zhuǎn)發(fā)開銷大。
 - iptables模式(常用):性能中等,規(guī)則復(fù)雜,容易擴展。
 - ipvs模式(推薦):性能高,負載均衡功能更強。
 
Kubernetes資源配額(ResourceQuota)如何工作?
答案:
通過ResourceQuota限制namespace內(nèi)可申請資源的總量(CPU、內(nèi)存、Pod數(shù)量),確保多租戶環(huán)境的公平資源分配。
什么是Admission Controller,常用的有哪些?
答案:
Admission Controller在API Server接收請求時對資源進行準入檢查,決定是否允許操作。
常用的有:
- NamespaceLifecycle
 - LimitRanger
 - ResourceQuota
 - PodSecurityPolicy(已棄用,推薦OPA或Kyverno)
 - ValidatingAdmissionWebhook與MutatingAdmissionWebhook
 
什么是Vertical Pod Autoscaler (VPA),如何工作?
答案:
VPA根據(jù)Pod歷史資源使用情況自動調(diào)整Pod資源請求(CPU/內(nèi)存)。當Pod重建時,以更合適的資源配置重啟。
如何排查Pod無法啟動的問題?
答案:
- 查看Pod事件:
 
bash
復(fù)制編輯
kubectl describe pod <pod-name>- 檢查容器日志:
 
bash
復(fù)制編輯
kubectl logs <pod-name> -c <container-name>- 節(jié)點資源檢查:
 
bash
復(fù)制編輯
kubectl top nodes- 節(jié)點狀態(tài)檢查:
 
bash
復(fù)制編輯
kubectl get nodesKubernetes網(wǎng)絡(luò)策略(NetworkPolicy)如何實現(xiàn)Pod間通信控制?
答案:
NetworkPolicy通過label選擇Pod,基于Ingress/Egress規(guī)則定義允許或拒絕Pod間網(wǎng)絡(luò)訪問,配合網(wǎng)絡(luò)插件(如Calico)實現(xiàn)網(wǎng)絡(luò)隔離策略。
示例:
yaml
復(fù)制編輯
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-all
spec:
  podSelector: {}
  policyTypes:
  - Ingress
  - Egress以上規(guī)則將禁止namespace內(nèi)所有Pod的進出流量。
如何查看 Kubernetes 集群中的資源使用情況?
答案:
可使用 kubectl top 命令:
bash
復(fù)制編輯
kubectl top nodes   # 節(jié)點資源
kubectl top pods    # Pod資源需提前安裝 Metrics Server 組件。
Kubernetes PVC 與 PV 的關(guān)系是什么?
答案:
- PV(PersistentVolume):管理員提供的持久化存儲資源。
 - PVC(PersistentVolumeClaim):用戶對存儲資源的申請,PVC綁定到合適的PV上供Pod使用。
 
為什么不建議在生產(chǎn)環(huán)境中使用 latest 鏡像標簽?
答案:
- latest標簽不明確,難以跟蹤版本。
 - latest鏡像變化頻繁,可能出現(xiàn)不可控的行為。
 - 影響滾動升級和回滾機制。
 
Horizontal Pod Autoscaler (HPA) 基于什么指標擴縮容?
答案:
默認基于CPU或內(nèi)存,也可自定義指標(Custom Metrics)或外部指標(External Metrics)進行擴縮容,如隊列長度或HTTP請求數(shù)。
什么是 CSI(容器存儲接口),有什么作用?
答案:
CSI(Container Storage Interface)是一種標準接口,用于將各種存儲系統(tǒng)連接到Kubernetes。通過CSI插件,用戶可以使用任意外部存儲系統(tǒng),如Ceph、NFS、AWS EBS、阿里云盤等。
Kubernetes中,Pod資源限制超出時會發(fā)生什么?
答案:
- 超過內(nèi)存(limits):Pod會被OOMKilled,容器自動重啟。
 - 超過CPU(limits):Pod被CPU限流(CPU被throttle),性能受限,但不會被驅(qū)逐或殺掉。
 
Pod的狀態(tài)(Pod Phase)有哪些?
答案:
- Pod的狀態(tài)(Pod Phase)通常包括以下幾種:
 
Pending(等待中)
a.Pod已被創(chuàng)建,但尚未調(diào)度到節(jié)點上,或正在拉取鏡像。
Running(運行中)
- Pod已經(jīng)成功調(diào)度到節(jié)點上,且所有容器都已創(chuàng)建并至少有一個容器處于運行狀態(tài)。
 
Succeeded(成功)
- Pod中的所有容器都已成功執(zhí)行并退出(容器狀態(tài)為0),常見于一次性任務(wù)型Pod。
 
Failed(失?。?/span>
- Pod中的至少一個容器異常退出(非0退出碼),或者啟動過程中發(fā)生了嚴重錯誤。
 
Unknown(未知)
- Pod狀態(tài)無法被Kubernetes節(jié)點準確報告,可能節(jié)點故障、網(wǎng)絡(luò)中斷或其他通訊異常所致。
 
Kubernetes中,imagePullPolicy有哪些可選值,意義是什么?
答案:
- 在 Kubernetes 中,
imagePullPolicy有以下三個可選值: 
Always
a.latest 標簽鏡像(默認策略)。
b.鏡像頻繁更新,確??偰芾阶钚掳姹?。
- 含義:每次啟動容器時,總是嘗試重新拉取鏡像,即使本地已存在該鏡像。
 - 適用場景:
 
IfNotPresent
- 使用固定版本號(例如:
myapp:v1.0.1)的鏡像。 - 降低鏡像拉取頻率,加速 Pod 啟動。
 - 含義:只有當本地不存在指定鏡像時才會去遠程倉庫拉取鏡像。
 - 適用場景:
 
Never
- 離線環(huán)境或鏡像提前加載到節(jié)點本地的情況。
 - 確保嚴格控制鏡像來源,不允許從遠程倉庫獲取。
 - 含義:永遠不會主動去拉取鏡像,必須使用本地已存在的鏡像。
 - 適用場景:
 
默認規(guī)則:
- 當鏡像標簽為 
latest時,默認值為:Always。 - 當鏡像標簽不是 
latest時,默認值為:IfNotPresent。 
為什么生產(chǎn)環(huán)境中建議給Pod定義readinessProbe和livenessProbe?
答案:
- readinessProbe:避免流量被轉(zhuǎn)發(fā)到未就緒Pod。
 - livenessProbe:自動重啟異常Pod,提高服務(wù)可用性。
 
Kubernetes Pod 重啟策略有哪些?
答案:
- Always(默認):容器異常退出后自動重啟。
 - OnFailure:容器異常退出時才重啟,成功完成則不重啟。
 - Never:無論成功失敗,容器退出后都不重啟。
 
Kubernetes容器探針(Probe)的三種探測方式是什么?
答案:
- Exec:執(zhí)行命令,成功返回0則探測成功。
 - HTTPGet:通過HTTP請求健康檢查。
 - TCPSocket:通過TCP端口檢查容器是否正常運行。
 
Kubernetes PersistentVolume的生命周期如何管理?
答案:
Provisioning(創(chuàng)建)
- 靜態(tài)創(chuàng)建(Static Provisioning)
 
- 管理員預(yù)先創(chuàng)建 PV,定義存儲容量、訪問模式和存儲介質(zhì)。
 
- 動態(tài)創(chuàng)建(Dynamic Provisioning)
 - 用戶提交 PVC (PersistentVolumeClaim) 時,動態(tài)創(chuàng)建 PV。
 - 需要使用 StorageClass 來定義存儲配置和創(chuàng)建規(guī)則。
 
Binding(綁定)
- 當用戶創(chuàng)建 PersistentVolumeClaim (PVC) 時,Kubernetes 會根據(jù) PVC 指定的要求(容量、訪問模式、存儲類別)尋找合適的 PV 并綁定。
 - PV 與 PVC 一旦綁定,進入 Bound 狀態(tài),兩者形成一對一綁定關(guān)系。
 
Using(使用)
- PV 綁定到 PVC 后,Pod 可通過 PVC 掛載并使用存儲。
 - PV 在 Bound 狀態(tài)期間持續(xù)提供存儲服務(wù)。
 
Releasing(釋放)
- 用戶刪除 PVC 后,對應(yīng)的 PV 狀態(tài)會變成 Released。
 - 此時數(shù)據(jù)依舊存在,但無法再被其他 PVC 使用,等待管理員處理。
 
Reclaiming(回收策略)
PV 的回收策略(Reclaim Policy)決定 PV 被釋放后的行為??蛇x的策略包括:
策略  | 說明  | 場景舉例  | 
Retain  | 保留 PV 和其上的數(shù)據(jù),管理員手動清理  | 數(shù)據(jù)保護場景  | 
Recycle(已廢棄)  | 刪除數(shù)據(jù),清空 PV,回收再利用(K8s 1.23起已移除)  | 已廢棄,不再使用  | 
Delete  | 刪除 PV 和后端存儲的數(shù)據(jù)  | 臨時數(shù)據(jù)或非關(guān)鍵場景  | 
- 推薦策略:
 
a.對于關(guān)鍵數(shù)據(jù)或生產(chǎn)環(huán)境:使用 Retain,數(shù)據(jù)由管理員人工處理。
b.對于臨時數(shù)據(jù):使用 Delete,PV 和數(shù)據(jù)會自動清理。
解釋一下Kubernetes中的ResourceQuota和LimitRange的區(qū)別?
ResourceQuota限制的是Namespace整體資源申請總量,LimitRange則限制單個Pod容器可申請的資源范圍(如CPU、內(nèi)存),以保證多租戶環(huán)境下的資源公平分配。
描述Kubernetes的RBAC授權(quán)原理?
RBAC通過Role定義資源操作權(quán)限,通過RoleBinding將權(quán)限綁定給用戶或ServiceAccount。ClusterRole與ClusterRoleBinding用于跨Namespace的權(quán)限定義。
Ingress Controller如何實現(xiàn)請求路由與流量管理?
Ingress Controller接收Ingress資源定義的HTTP(S)規(guī)則,根據(jù)Host、路徑(path)等將外部請求路由到不同的Service上。常用的Ingress Controller有NGINX、Traefik、HAProxy、Envoy等。
Service Mesh與Ingress有什么區(qū)別?
Ingress僅實現(xiàn)外部到集群服務(wù)的HTTP(s)流量入口路由,Service Mesh則覆蓋服務(wù)間通信,包括流量管理、服務(wù)發(fā)現(xiàn)、負載均衡、熔斷、監(jiān)控、認證等更全面的能力。
什么是容器探針,分別解釋Liveness、Readiness、Startup探針?
- Liveness探針:確定容器是否存活,失敗時重啟容器。
 - Readiness探針:容器是否準備好接受流量,未就緒時不會接收請求。
 - Startup探針:用于慢啟動應(yīng)用,確保啟動完成前不觸發(fā)其他探針,以防止誤判重啟。
 















 
 
 











 
 
 
 