在面试 Kubernetes(k8s)相关职位时,面试官通常会考察你对 Kubernetes 核心概念、架构、组件、工作原理以及实际应用的理解。以下是一些经典的 Kubernetes 面试题及其答案:
1. Kubernetes 的核心组件有哪些?
答案:
-
Master 节点组件:
-
API Server:提供 RESTful API 接口,用于与集群交互。
-
etcd:分布式键值存储,用于存储集群的配置数据和状态信息。
-
Controller Manager:运行各种控制器进程,负责维护集群的状态。
-
Scheduler:负责将 Pod 调度到合适的节点上运行。
-
-
Worker 节点组件:
-
Kubelet:运行在每个节点上的代理,负责管理节点上的容器。
-
Kube-proxy:运行在每个节点上的网络代理,负责维护网络规则。
-
Container Runtime:负责运行容器的底层软件,如 Docker、containerd 等。
-
2. 什么是 Pod?
答案:
-
Pod 是 Kubernetes 中最小的调度单元,通常包含一个或多个紧密耦合的容器。
-
Pod 中的容器共享网络命名空间和存储卷,可以直接通过
localhost
通信。
3. Service 的作用是什么?
答案:
-
Service 是一种抽象,定义了一组 Pod 的逻辑集合和一个访问它们的策略。
-
Service 提供了稳定的网络端点,即使 Pod 的 IP 地址发生变化。
4. Ingress 和 Service 有什么区别?
答案:
-
Service:用于在集群内部或外部暴露一组 Pod 的网络端点,支持 ClusterIP、NodePort、LoadBalancer 和 ExternalName 类型。
-
Ingress:用于管理对集群内部服务的 HTTP 和 HTTPS 路由,提供更复杂的流量路由规则和 SSL/TLS 终止等功能。
5. 什么是 ConfigMap 和 Secret?
答案:
-
ConfigMap:用于存储非敏感的配置数据,如环境变量、配置文件等。
-
Secret:用于存储敏感数据,如密码、API 密钥等,数据在 etcd 中以加密形式存储。
6. Kubernetes 中的 Deployment 和 StatefulSet 有什么区别?
答案:
-
Deployment:用于管理无状态的应用程序,如 Web 服务器。Deployment 允许你定义应用程序的期望状态,并自动管理 Pod 的创建、更新和删除。
-
StatefulSet:用于管理有状态的应用程序,如数据库。StatefulSet 为每个 Pod 提供稳定的网络标识和持久化存储。
7. Kubernetes 中的 DaemonSet 是什么?
答案:
-
DaemonSet 确保每个节点上运行一个 Pod 的副本,通常用于运行系统级服务,如日志收集器、监控代理等。
8. Kubernetes 中的 Namespace 有什么作用?
答案:
-
Namespace 是 Kubernetes 中用于资源隔离的机制,允许你在同一个集群中创建多个虚拟集群。
-
默认的 Namespace 包括
default
、kube-system
和kube-public
。
9. Kubernetes 中的 Volume 是什么?
答案:
-
Volume 是用于持久化存储的抽象,允许容器在重启后仍然可以访问数据。
-
Kubernetes 支持多种类型的 Volume,如 emptyDir、hostPath、PersistentVolume 等。
10. Kubernetes 中的控制循环(Control Loop)是什么?
答案:
-
控制循环 是 Kubernetes 实现自动化管理的核心机制。
-
控制循环包括以下步骤:
-
获取当前状态:从 API Server 获取当前集群状态。
-
计算期望状态:根据用户定义的配置计算期望状态。
-
调整实际状态:通过调用 API Server 的 API 接口,将实际状态调整为期望状态。
-
11. Kubernetes 中的调度器(Scheduler)是如何工作的?
答案:
-
调度器 负责将 Pod 调度到合适的节点上运行。
-
调度器会考虑节点的资源使用情况、Pod 的资源需求、亲和性和反亲和性规则等因素。
12. Kubernetes 中的自愈机制是如何实现的?
答案:
-
自愈机制 是 Kubernetes 确保应用程序高可用性的关键功能。
-
当 Pod 失败或节点故障时,Kubernetes 会自动重新创建 Pod 或重新调度 Pod 到其他节点上。
13. Kubernetes 中的亲和性和反亲和性是什么?
答案:
-
亲和性(Affinity):用于定义 Pod 之间的亲和性规则,确保 Pod 调度到特定的节点或与其他 Pod 一起调度。
-
反亲和性(Anti-Affinity):用于定义 Pod 之间的反亲和性规则,确保 Pod 不会调度到特定的节点或与其他 Pod 一起调度。
14. Kubernetes 中的 Horizontal Pod Autoscaler(HPA)是什么?
答案:
-
Horizontal Pod Autoscaler(HPA) 是 Kubernetes 中用于自动调整 Pod 副本数量的组件。
-
HPA 根据 CPU 使用率、内存使用率等指标,自动增加或减少 Pod 的副本数量,以应对负载变化。
15. Kubernetes 中的 PersistentVolume(PV)和 PersistentVolumeClaim(PVC)是什么?
答案:
-
PersistentVolume(PV):是集群中的一种存储资源,由管理员预先配置。
-
PersistentVolumeClaim(PVC):是用户对存储资源的请求,PVC 会绑定到合适的 PV 上。