以下是 100 个 Kubernetes(k8s)高频面试题及其答案,涵盖了 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 上。
16. Kubernetes 中的 ConfigMap 和 Secret 如何使用?
答案:
-
ConfigMap:可以通过环境变量或卷挂载的方式注入到 Pod 中。
-
环境变量:在 Pod 的定义中引用 ConfigMap 中的键值对作为环境变量。
-
卷挂载:将 ConfigMap 中的数据挂载为 Pod 中的文件。
-
-
Secret:与 ConfigMap 类似,可以通过环境变量或卷挂载的方式注入到 Pod 中。
-
环境变量:在 Pod 的定义中引用 Secret 中的键值对作为环境变量。
-
卷挂载:将 Secret 中的数据挂载为 Pod 中的文件。
-
17. Kubernetes 中的滚动更新(Rolling Update)是如何实现的?
答案:
-
滚动更新 是 Kubernetes 中用于更新 Deployment 的一种策略。
-
滚动更新的过程如下:
-
创建新版本的 Pod:逐步创建新版本的 Pod,直到新版本的 Pod 数量达到期望值。
-
删除旧版本的 Pod:逐步删除旧版本的 Pod,直到旧版本的 Pod 数量为零。
-
完成更新:所有 Pod 都更新为新版本。
-
-
滚动更新可以通过
maxSurge
和maxUnavailable
参数控制更新的速度和可用性。
18. Kubernetes 中的污点和容忍(Taints and Tolerations)是什么?
答案:
-
污点(Taints):用于标记节点,阻止 Pod 调度到该节点上,除非 Pod 具有相应的容忍(Toleration)。
-
容忍(Tolerations):用于标记 Pod,允许 Pod 调度到具有相应污点的节点上。
19. Kubernetes 中的资源配额(Resource Quotas)是什么?
答案:
-
资源配额(Resource Quotas):用于限制 Namespace 中可以使用的资源总量,如 CPU、内存、Pod 数量等。
-
资源配额可以帮助管理员控制资源使用,防止某个 Namespace 占用过多资源。
20. Kubernetes 中的网络模型是什么?
答案:
-
Kubernetes 网络模型:每个 Pod 都有自己的 IP 地址,Pod 之间可以直接通过 IP 地址通信。
-
Kubernetes 网络模型要求所有节点上的 Pod 可以相互通信,而不需要 NAT(网络地址转换)。
21. Kubernetes 中的 CNI(Container Network Interface)是什么?
答案:
-
CNI(Container Network Interface):是一个规范,定义了容器运行时和网络插件之间的接口。
-
Kubernetes 使用 CNI 插件来实现 Pod 之间的网络通信,常见的 CNI 插件包括 Flannel、Calico、Weave 等。
22. Kubernetes 中的 RBAC(Role-Based Access Control)是什么?
答案:
-
RBAC(Role-Based Access Control):是 Kubernetes 中用于权限管理的机制。
-
RBAC 通过角色(Role)和角色绑定(RoleBinding)来定义用户或服务账户的权限。
-
角色(Role)定义了一组权限规则,角色绑定(RoleBinding)将角色绑定到用户或服务账户。
23. Kubernetes 中的 Helm 是什么?
答案:
-
Helm:是 Kubernetes 的包管理工具,用于简化应用程序的部署和管理。
-
Helm 使用 Chart 来定义应用程序的部署模板,Chart 包含了一系列 Kubernetes 资源定义。
-
Helm 提供了版本管理、依赖管理、回滚等功能,简化了应用程序的部署和升级。
24. Kubernetes 中的 Operator 是什么?
答案:
-
Operator:是一种用于管理有状态应用程序的扩展机制。
-
Operator 通过自定义控制器(Controller)来管理应用程序的生命周期,如部署、扩展、备份、恢复等。
-
Operator 通常基于 Kubernetes 的控制循环机制,自动将应用程序的实际状态调整为期望状态。
25. Kubernetes 中的 CRD(Custom Resource Definition)是什么?
答案:
-
CRD(Custom Resource Definition):是 Kubernetes 中用于定义自定义资源(Custom Resource)的机制。
-
CRD 允许用户在 Kubernetes 中定义新的资源类型,扩展 Kubernetes 的功能。
-
自定义资源(Custom Resource)可以像内置资源一样被 Kubernetes API 管理。
26. Kubernetes 中的 StatefulSet 和 Deployment 有什么区别?
答案:
-
Deployment:用于管理无状态的应用程序,如 Web 服务器。Deployment 允许你定义应用程序的期望状态,并自动管理 Pod 的创建、更新和删除。
-
StatefulSet:用于管理有状态的应用程序,如数据库。StatefulSet 为每个 Pod 提供稳定的网络标识和持久化存储。
27. Kubernetes 中的 DaemonSet 和 Deployment 有什么区别?
答案:
-
Deployment:用于管理无状态的应用程序,如 Web 服务器。Deployment 允许你定义应用程序的期望状态,并自动管理 Pod 的创建、更新和删除。
-
DaemonSet:确保每个节点上运行一个 Pod 的副本,通常用于运行系统级服务,如日志收集器、监控代理等。
28. Kubernetes 中的 Job 和 CronJob 是什么?
答案:
-
Job:用于运行一次性任务,如批处理作业。Job 确保任务成功完成,并在任务完成后终止 Pod。
-
CronJob:用于运行定时任务,类似于 Unix/Linux 中的 cron 作业。CronJob 根据定义的时间表定期运行任务。
29. Kubernetes 中的 Pod 生命周期是什么?
答案:
-
Pod 生命周期 包括以下阶段:
-
Pending:Pod 已被 Kubernetes 接受,但尚未调度到节点上。
-
Running:Pod 已被调度到节点上,并且所有容器都已启动。
-
Succeeded:Pod 中的所有容器都已成功终止。
-
Failed:Pod 中的至少一个容器已失败终止。
-
Unknown:由于某种原因,无法获取 Pod 的状态。
-
30. Kubernetes 中的 Init Container 是什么?
答案:
-
Init Container:是 Pod 中的一种特殊容器,用于在主容器启动之前执行初始化任务。
-
Init Container 必须成功完成,主容器才会启动。Init Container 可以用于执行数据库迁移、配置文件生成等任务。
31. Kubernetes 中的 Sidecar 模式是什么?
答案:
-
Sidecar 模式:是一种设计模式,其中在同一个 Pod 中运行一个辅助容器(Sidecar)来增强主容器(Main Container)的功能。
-
Sidecar 容器通常用于日志收集、监控、代理等任务,与主容器共享网络和存储卷。
32. Kubernetes 中的 Pod 亲和性和节点亲和性有什么区别?
答案:
-
Pod 亲和性(Pod Affinity):用于定义 Pod 之间的亲和性规则,确保 Pod 调度到特定的节点或与其他 Pod 一起调度。
-
节点亲和性(Node Affinity):用于定义 Pod 与节点之间的亲和性规则,确保 Pod 调度到具有特定标签的节点上。
33. Kubernetes 中的 PersistentVolume(PV)和 PersistentVolumeClaim(PVC)的生命周期是什么?
答案:
-
PersistentVolume(PV) 的生命周期:
-
Provisioning:管理员创建 PV。
-
Binding:PVC 绑定到合适的 PV。
-
Using:Pod 使用绑定的 PVC。
-
Releasing:Pod 删除 PVC,PV 进入释放状态。
-
Reclaiming:管理员决定如何回收 PV,可以是保留、删除或回收。
-
34. Kubernetes 中的 StorageClass 是什么?
答案:
-
StorageClass:是一种抽象,用于定义不同类型的存储(如 SSD、HDD 等)。
-
StorageClass 允许用户动态创建 PersistentVolume(PV),而不需要预先创建 PV。
-
StorageClass 通常与云平台的存储服务(如 AWS EBS、GCP Persistent Disk 等)结合使用。
35. Kubernetes 中的 Pod 优先级和抢占(Pod Priority and Preemption)是什么?
答案:
-
Pod 优先级(Pod Priority):用于定义 Pod 的优先级,高优先级的 Pod 可以抢占低优先级的 Pod 的资源。
-
抢占(Preemption):当高优先级的 Pod 无法调度时,Kubernetes 可以抢占低优先级的 Pod 的资源,以确保高优先级的 Pod 能够调度。
36. Kubernetes 中的 NetworkPolicy 是什么?
答案:
-
NetworkPolicy:是一种用于定义 Pod 之间网络流量的访问控制规则的机制。
-
NetworkPolicy 允许你定义哪些 Pod 可以相互通信,哪些 Pod 不能相互通信。
-
NetworkPolicy 通常与 CNI 插件(如 Calico、Cilium 等)结合使用。
37. Kubernetes 中的 ServiceAccount 是什么?
答案:
-
ServiceAccount:是 Kubernetes 中用于为 Pod 提供身份验证和授权的机制。
-
ServiceAccount 允许 Pod 访问 Kubernetes API,并执行特定的操作。
-
ServiceAccount 通常与 RBAC(Role-Based Access Control)结合使用,定义 Pod 的权限。
38. Kubernetes 中的 PodDisruptionBudget(PDB)是什么?
答案:
-
PodDisruptionBudget(PDB):是一种用于定义应用程序在自愿中断(如节点维护)期间的最小可用 Pod 数量的机制。
-
PDB 确保在自愿中断期间,应用程序的可用性不会低于定义的最小值。
39. Kubernetes 中的 CSI(Container Storage Interface)是什么?
答案:
-
CSI(Container Storage Interface):是一个规范,定义了容器运行时和存储插件之间的接口。
-
Kubernetes 使用 CSI 插件来实现动态存储卷的创建、挂载、卸载等功能。
-
CSI 插件允许 Kubernetes 支持多种存储后端,如 AWS EBS、GCP Persistent Disk、Ceph 等。
40. Kubernetes 中的 Custom Controller 是什么?
答案:
-
Custom Controller:是一种用于扩展 Kubernetes 功能的机制。
-
Custom Controller 通过监听 Kubernetes API 中的资源变化,并根据自定义逻辑调整集群状态。
-
Custom Controller 通常与 CRD(Custom Resource Definition)结合使用,实现自定义资源的管理。
41. Kubernetes 中的 Admission Controller 是什么?
答案:
-
Admission Controller:是一种用于在对象持久化之前拦截 Kubernetes API 请求的机制。
-
Admission Controller 可以用于验证、修改或拒绝 API 请求,如强制执行安全策略、注入默认值等。
-
Kubernetes 内置了多个 Admission Controller,如
NamespaceLifecycle
、LimitRanger
、ResourceQuota
等。
42. Kubernetes 中的 Custom Metrics API 是什么?
答案:
-
Custom Metrics API:是一种用于暴露自定义指标的 API,供 Horizontal Pod Autoscaler(HPA)使用。
-
Custom Metrics API 允许 HPA 根据自定义指标(如请求速率、错误率等)自动调整 Pod 副本数量。
-
Custom Metrics API 通常与 Prometheus Adapter 等监控系统结合使用。
43. Kubernetes 中的 Pod 安全策略(Pod Security Policy)是什么?
答案:
-
Pod 安全策略(Pod Security Policy):是一种用于定义 Pod 安全要求的机制。
-
Pod 安全策略可以限制 Pod 的权限,如禁止特权容器、限制主机网络访问等。
-
Pod 安全策略通常与 RBAC 结合使用,确保只有授权用户可以创建具有特定权限的 Pod。
44. Kubernetes 中的 Resource Limits 和 Requests 是什么?
答案:
-
Resource Limits:定义 Pod 可以使用的最大资源量,如 CPU 和内存。
-
Resource Requests:定义 Pod 所需的最低资源量,如 CPU 和内存。
-
Kubernetes 调度器使用 Resource Requests 来决定将 Pod 调度到哪个节点上,而 Resource Limits 用于限制 Pod 的资源使用。
45. Kubernetes 中的 Downward API 是什么?
答案:
-
Downward API:是一种用于将 Pod 的元数据(如 Pod 名称、IP 地址、标签等)注入到容器中的机制。
-
Downward API 允许容器在运行时访问这些元数据,而不需要硬编码或通过 API 查询。
-
Downward API 可以通过环境变量或卷挂载的方式注入到容器中。
46. Kubernetes 中的 Finalizer 是什么?
答案:
-
Finalizer:是一种用于在对象删除之前执行清理操作的机制。
-
Finalizer 可以确保在对象删除之前,相关的资源(如存储卷、网络规则等)已被清理。
-
Finalizer 通常用于实现自定义资源的清理逻辑。
47. Kubernetes 中的 Garbage Collection 是什么?
答案:
-
Garbage Collection:是一种用于自动清理不再需要的 Kubernetes 资源的机制。
-
Garbage Collection 可以清理孤儿 Pod(Orphaned Pod)、孤儿资源(Orphaned Resource)等。
-
Garbage Collection 通常由 Kubernetes 控制器自动执行。
48. Kubernetes 中的 Leader Election 是什么?
答案:
-
Leader Election:是一种用于在分布式系统中选举领导者的机制。
-
Leader Election 确保在多个实例中只有一个实例作为领导者,负责执行关键任务。
-
Leader Election 通常用于实现高可用性和故障恢复。
49. Kubernetes 中的 Pod 中断预算(Pod Disruption Budget)是什么?
答案:
-
Pod 中断预算(Pod Disruption Budget):是一种用于定义应用程序在自愿中断(如节点维护)期间的最小可用 Pod 数量的机制。
-
Pod 中断预算确保在自愿中断期间,应用程序的可用性不会低于定义的最小值。
50. Kubernetes 中的 Pod 拓扑分布约束(Pod Topology Spread Constraints)是什么?
答案:
-
Pod 拓扑分布约束(Pod Topology Spread Constraints):是一种用于定义 Pod 在不同拓扑域(如节点、区域等)中分布的机制。
-
Pod 拓扑分布约束确保 Pod 在不同拓扑域中均匀分布,提高应用程序的可用性和容错性。
51. Kubernetes 中的 Pod 就绪探针(Readiness Probe)是什么?
答案:
-
Pod 就绪探针(Readiness Probe):用于确定 Pod 是否准备好接收流量。
-
就绪探针定期检查 Pod 的状态,如果探针失败,Kubernetes 会将 Pod 从 Service 的 Endpoint 中移除,停止向该 Pod 发送流量。
-
就绪探针通常用于确保应用程序在启动后完全初始化,避免将流量发送到未准备好的 Pod。
52. Kubernetes 中的 Pod 存活探针(Liveness Probe)是什么?
答案:
-
Pod 存活探针(Liveness Probe):用于确定 Pod 是否处于健康状态。
-
存活探针定期检查 Pod 的状态,如果探针失败,Kubernetes 会重启 Pod。
-
存活探针通常用于检测应用程序的死锁、内存泄漏等问题,确保应用程序始终处于健康状态。
53. Kubernetes 中的 Pod 启动探针(Startup Probe)是什么?
答案:
-
Pod 启动探针(Startup Probe):用于确定 Pod 是否已成功启动。
-
启动探针在应用程序启动期间运行,直到探针成功为止。一旦启动探针成功,Kubernetes 会切换到使用存活探针和就绪探针。
-
启动探针通常用于处理启动时间较长的应用程序,避免在应用程序启动期间触发不必要的重启。
54. Kubernetes 中的 Pod 优先级(Pod Priority)是什么?
答案:
-
Pod 优先级(Pod Priority):用于定义 Pod 的优先级,高优先级的 Pod 可以抢占低优先级的 Pod 的资源。
-
优先级通过
PriorityClass
资源定义,Pod 通过priorityClassName
字段引用PriorityClass
。 -
高优先级的 Pod 在资源不足时可以抢占低优先级的 Pod,确保关键任务能够调度。
55. Kubernetes 中的 Pod 抢占(Pod Preemption)是什么?
答案:
-
Pod 抢占(Pod Preemption):是 Kubernetes 中的一种调度策略,用于在资源不足时抢占低优先级的 Pod 的资源。
-
当高优先级的 Pod 无法调度时,Kubernetes 会尝试抢占低优先级的 Pod,以确保高优先级的 Pod 能够调度。
-
抢占策略通过
PriorityClass
和PreemptionPolicy
字段控制。
56. Kubernetes 中的 Pod 亲和性和反亲和性(Pod Affinity and Anti-Affinity)是什么?
答案:
-
Pod 亲和性(Pod Affinity):用于定义 Pod 之间的亲和性规则,确保 Pod 调度到特定的节点或与其他 Pod 一起调度。
-
Pod 反亲和性(Pod Anti-Affinity):用于定义 Pod 之间的反亲和性规则,确保 Pod 不会调度到特定的节点或与其他 Pod 一起调度。
-
亲和性和反亲和性通过
affinity
字段定义,支持requiredDuringSchedulingIgnoredDuringExecution
和preferredDuringSchedulingIgnoredDuringExecution
两种策略。
57. Kubernetes 中的节点亲和性和反亲和性(Node Affinity and Anti-Affinity)是什么?
答案:
-
节点亲和性(Node Affinity):用于定义 Pod 与节点之间的亲和性规则,确保 Pod 调度到具有特定标签的节点上。
-
节点反亲和性(Node Anti-Affinity):用于定义 Pod 与节点之间的反亲和性规则,确保 Pod 不会调度到具有特定标签的节点上。
-
节点亲和性和反亲和性通过
nodeAffinity
字段定义,支持requiredDuringSchedulingIgnoredDuringExecution
和preferredDuringSchedulingIgnoredDuringExecution
两种策略。
58. Kubernetes 中的 Pod 拓扑分布约束(Pod Topology Spread Constraints)是什么?
答案:
-
Pod 拓扑分布约束(Pod Topology Spread Constraints):是一种用于定义 Pod 在不同拓扑域(如节点、区域等)中分布的机制。
-
Pod 拓扑分布约束确保 Pod 在不同拓扑域中均匀分布,提高应用程序的可用性和容错性。
-
拓扑分布约束通过
topologySpreadConstraints
字段定义,支持maxSkew
、topologyKey
和whenUnsatisfiable
等参数。
59. Kubernetes 中的 Pod 中断预算(Pod Disruption Budget)是什么?
答案:
-
Pod 中断预算(Pod Disruption Budget):是一种用于定义应用程序在自愿中断(如节点维护)期间的最小可用 Pod 数量的机制。
-
Pod 中断预算确保在自愿中断期间,应用程序的可用性不会低于定义的最小值。
-
中断预算通过
minAvailable
或maxUnavailable
字段定义,确保在自愿中断期间至少有指定数量的 Pod 可用。
60. Kubernetes 中的 Pod 安全上下文(Pod Security Context)是什么?
答案:
-
Pod 安全上下文(Pod Security Context):是一种用于定义 Pod 和容器的权限和访问控制的机制。
-
安全上下文可以设置 Pod 和容器的用户 ID、组 ID、SELinux 上下文、特权模式等。
-
安全上下文通过
securityContext
字段定义,确保 Pod 和容器在运行时具有适当的权限和访问控制。
61. Kubernetes 中的 Pod 网络策略(Network Policy)是什么?
答案:
-
Pod 网络策略(Network Policy):是一种用于定义 Pod 之间网络流量的访问控制规则的机制。
-
网络策略允许你定义哪些 Pod 可以相互通信,哪些 Pod 不能相互通信。
-
网络策略通常与 CNI 插件(如 Calico、Cilium 等)结合使用,实现细粒度的网络访问控制。
62. Kubernetes 中的 Pod 资源配额(Resource Quotas)是什么?
答案:
-
Pod 资源配额(Resource Quotas):是一种用于限制 Namespace 中可以使用的资源总量的机制。
-
资源配额可以限制 CPU、内存、Pod 数量、Service 数量等资源的使用。
-
资源配额通过
ResourceQuota
资源定义,确保 Namespace 中的资源使用不会超过定义的限制。
63. Kubernetes 中的 Pod 限制范围(Limit Range)是什么?
答案:
-
Pod 限制范围(Limit Range):是一种用于定义 Pod 和容器的资源请求和限制的默认值和范围的机制。
-
限制范围可以设置 Pod 和容器的最小和最大 CPU、内存请求和限制。
-
限制范围通过
LimitRange
资源定义,确保 Pod 和容器在创建时具有适当的资源请求和限制。
64. Kubernetes 中的 Pod 调度器(Scheduler)是什么?
答案:
-
Pod 调度器(Scheduler):是 Kubernetes 中负责将 Pod 调度到合适的节点上运行的组件。
-
调度器根据 Pod 的资源需求、节点资源使用情况、亲和性和反亲和性规则等因素,选择最合适的节点。
-
调度器通过
kube-scheduler
组件实现,支持自定义调度策略和插件。
65. Kubernetes 中的 Pod 控制器(Controller)是什么?
答案:
-
Pod 控制器(Controller):是 Kubernetes 中负责管理 Pod 生命周期的组件。
-
控制器根据用户定义的期望状态,自动创建、更新和删除 Pod。
-
常见的控制器包括 Deployment、StatefulSet、DaemonSet、Job 和 CronJob 等。
66. Kubernetes 中的 Pod 自愈机制(Self-Healing)是什么?
答案:
-
Pod 自愈机制(Self-Healing):是 Kubernetes 中确保应用程序高可用性的关键功能。
-
当 Pod 失败或节点故障时,Kubernetes 会自动重新创建 Pod 或重新调度 Pod 到其他节点上。
-
自愈机制通过控制器和调度器实现,确保应用程序始终处于期望状态。
67. Kubernetes 中的 Pod 滚动更新(Rolling Update)是什么?
答案:
-
Pod 滚动更新(Rolling Update):是 Kubernetes 中用于更新 Deployment 的一种策略。
-
滚动更新的过程如下:
-
创建新版本的 Pod:逐步创建新版本的 Pod,直到新版本的 Pod 数量达到期望值。
-
删除旧版本的 Pod:逐步删除旧版本的 Pod,直到旧版本的 Pod 数量为零。
-
完成更新:所有 Pod 都更新为新版本。
-
-
滚动更新可以通过
maxSurge
和maxUnavailable
参数控制更新的速度和可用性。
68. Kubernetes 中的 Pod 回滚(Rollback)是什么?
答案:
-
Pod 回滚(Rollback):是 Kubernetes 中用于回滚 Deployment 到之前的版本的一种策略。
-
回滚的过程如下:
-
选择回滚版本:选择要回滚到的历史版本。
-
创建旧版本的 Pod:逐步创建旧版本的 Pod,直到旧版本的 Pod 数量达到期望值。
-
删除新版本的 Pod:逐步删除新版本的 Pod,直到新版本的 Pod 数量为零。
-
完成回滚:所有 Pod 都回滚到旧版本。
-
-
回滚可以通过
kubectl rollout undo
命令实现。
69. Kubernetes 中的 Pod 扩缩容(Scaling)是什么?
答案:
-
Pod 扩缩容(Scaling):是 Kubernetes 中用于调整 Pod 副本数量的机制。
-
扩缩容可以通过手动或自动方式实现:
-
手动扩缩容:通过
kubectl scale
命令手动调整 Pod 副本数量。 -
自动扩缩容:通过 Horizontal Pod Autoscaler(HPA)根据 CPU 使用率、内存使用率等指标自动调整 Pod 副本数量。
-
70. Kubernetes 中的 Pod 生命周期(Lifecycle)是什么?
答案:
-
Pod 生命周期(Lifecycle):包括以下阶段:
-
Pending:Pod 已被 Kubernetes 接受,但尚未调度到节点上。
-
Running:Pod 已被调度到节点上,并且所有容器都已启动。
-
Succeeded:Pod 中的所有容器都已成功终止。
-
Failed:Pod 中的至少一个容器已失败终止。
-
Unknown:由于某种原因,无法获取 Pod 的状态。
-
71. Kubernetes 中的 Init Container 是什么?
答案:
-
Init Container:是 Pod 中的一种特殊容器,用于在主容器启动之前执行初始化任务。
-
Init Container 必须成功完成,主容器才会启动。Init Container 可以用于执行数据库迁移、配置文件生成等任务。
72. Kubernetes 中的 Sidecar 模式是什么?
答案:
-
Sidecar 模式:是一种设计模式,其中在同一个 Pod 中运行一个辅助容器(Sidecar)来增强主容器(Main Container)的功能。
-
Sidecar 容器通常用于日志收集、监控、代理等任务,与主容器共享网络和存储卷。
73. Kubernetes 中的 Pod 亲和性和节点亲和性有什么区别?
答案:
-
Pod 亲和性(Pod Affinity):用于定义 Pod 之间的亲和性规则,确保 Pod 调度到特定的节点或与其他 Pod 一起调度。
-
节点亲和性(Node Affinity):用于定义 Pod 与节点之间的亲和性规则,确保 Pod 调度到具有特定标签的节点上。
74. Kubernetes 中的 PersistentVolume(PV)和 PersistentVolumeClaim(PVC)的生命周期是什么?
答案:
-
PersistentVolume(PV) 的生命周期:
-
Provisioning:管理员创建 PV。
-
Binding:PVC 绑定到合适的 PV。
-
Using:Pod 使用绑定的 PVC。
-
Releasing:Pod 删除 PVC,PV 进入释放状态。
-
Reclaiming:管理员决定如何回收 PV,可以是保留、删除或回收。
-
75. Kubernetes 中的 StorageClass 是什么?
答案:
-
StorageClass:是一种抽象,用于定义不同类型的存储(如 SSD、HDD 等)。
-
StorageClass 允许用户动态创建 PersistentVolume(PV),而不需要预先创建 PV。
-
StorageClass 通常与云平台的存储服务(如 AWS EBS、GCP Persistent Disk 等)结合使用。
76. Kubernetes 中的 Pod 优先级和抢占(Pod Priority and Preemption)是什么?
答案:
-
Pod 优先级(Pod Priority):用于定义 Pod 的优先级,高优先级的 Pod 可以抢占低优先级的 Pod 的资源。
-
抢占(Preemption):当高优先级的 Pod 无法调度时,Kubernetes 可以抢占低优先级的 Pod 的资源,以确保高优先级的 Pod 能够调度。
77. Kubernetes 中的 NetworkPolicy 是什么?
答案:
-
NetworkPolicy:是一种用于定义 Pod 之间网络流量的访问控制规则的机制。
-
NetworkPolicy 允许你定义哪些 Pod 可以相互通信,哪些 Pod 不能相互通信。
-
NetworkPolicy 通常与 CNI 插件(如 Calico、Cilium 等)结合使用。
78. Kubernetes 中的 ServiceAccount 是什么?
答案:
-
ServiceAccount:是 Kubernetes 中用于为 Pod 提供身份验证和授权的机制。
-
ServiceAccount 允许 Pod 访问 Kubernetes API,并执行特定的操作。
-
ServiceAccount 通常与 RBAC(Role-Based Access Control)结合使用,定义 Pod 的权限。
79. Kubernetes 中的 PodDisruptionBudget(PDB)是什么?
答案:
-
PodDisruptionBudget(PDB):是一种用于定义应用程序在自愿中断(如节点维护)期间的最小可用 Pod 数量的机制。
-
PDB 确保在自愿中断期间,应用程序的可用性不会低于定义的最小值。
80. Kubernetes 中的 CSI(Container Storage Interface)是什么?
答案:
-
CSI(Container Storage Interface):是一个规范,定义了容器运行时和存储插件之间的接口。
-
Kubernetes 使用 CSI 插件来实现动态存储卷的创建、挂载、卸载等功能。
-
CSI 插件允许 Kubernetes 支持多种存储后端,如 AWS EBS、GCP Persistent Disk、Ceph 等。
81. Kubernetes 中的 Custom Controller 是什么?
答案:
-
Custom Controller:是一种用于扩展 Kubernetes 功能的机制。
-
Custom Controller 通过监听 Kubernetes API 中的资源变化,并根据自定义逻辑调整集群状态。
-
Custom Controller 通常与 CRD(Custom Resource Definition)结合使用,实现自定义资源的管理。
82. Kubernetes 中的 Admission Controller 是什么?
答案:
-
Admission Controller:是一种用于在对象持久化之前拦截 Kubernetes API 请求的机制。
-
Admission Controller 可以用于验证、修改或拒绝 API 请求,如强制执行安全策略、注入默认值等。
-
Kubernetes 内置了多个 Admission Controller,如
NamespaceLifecycle
、LimitRanger
、ResourceQuota
等。
83. Kubernetes 中的 Custom Metrics API 是什么?
答案:
-
Custom Metrics API:是一种用于暴露自定义指标的 API,供 Horizontal Pod Autoscaler(HPA)使用。
-
Custom Metrics API 允许 HPA 根据自定义指标(如请求速率、错误率等)自动调整 Pod 副本数量。
-
Custom Metrics API 通常与 Prometheus Adapter 等监控系统结合使用。
84. Kubernetes 中的 Pod 安全策略(Pod Security Policy)是什么?
答案:
-
Pod 安全策略(Pod Security Policy):是一种用于定义 Pod 安全要求的机制。
-
Pod 安全策略可以限制 Pod 的权限,如禁止特权容器、限制主机网络访问等。
-
Pod 安全策略通常与 RBAC 结合使用,确保只有授权用户可以创建具有特定权限的 Pod。
85. Kubernetes 中的 Resource Limits 和 Requests 是什么?
答案:
-
Resource Limits:定义 Pod 可以使用的最大资源量,如 CPU 和内存。
-
Resource Requests:定义 Pod 所需的最低资源量,如 CPU 和内存。
-
Kubernetes 调度器使用 Resource Requests 来决定将 Pod 调度到哪个节点上,而 Resource Limits 用于限制 Pod 的资源使用。
86. Kubernetes 中的 Downward API 是什么?
答案:
-
Downward API:是一种用于将 Pod 的元数据(如 Pod 名称、IP 地址、标签等)注入到容器中的机制。
-
Downward API 允许容器在运行时访问这些元数据,而不需要硬编码或通过 API 查询。
-
Downward API 可以通过环境变量或卷挂载的方式注入到容器中。
87. Kubernetes 中的 Finalizer 是什么?
答案:
-
Finalizer:是一种用于在对象删除之前执行清理操作的机制。
-
Finalizer 可以确保在对象删除之前,相关的资源(如存储卷、网络规则等)已被清理。
-
Finalizer 通常用于实现自定义资源的清理逻辑。
88. Kubernetes 中的 Garbage Collection 是什么?
答案:
-
Garbage Collection:是一种用于自动清理不再需要的 Kubernetes 资源的机制。
-
Garbage Collection 可以清理孤儿 Pod(Orphaned Pod)、孤儿资源(Orphaned Resource)等。
-
Garbage Collection 通常由 Kubernetes 控制器自动执行。
89. Kubernetes 中的 Leader Election 是什么?
答案:
-
Leader Election:是一种用于在分布式系统中选举领导者的机制。
-
Leader Election 确保在多个实例中只有一个实例作为领导者,负责执行关键任务。
-
Leader Election 通常用于实现高可用性和故障恢复。
90. Kubernetes 中的 Pod 中断预算(Pod Disruption Budget)是什么?
答案:
-
Pod 中断预算(Pod Disruption Budget):是一种用于定义应用程序在自愿中断(如节点维护)期间的最小可用 Pod 数量的机制。
-
Pod 中断预算确保在自愿中断期间,应用程序的可用性不会低于定义的最小值。
91. Kubernetes 中的 Pod 拓扑分布约束(Pod Topology Spread Constraints)是什么?
答案:
-
Pod 拓扑分布约束(Pod Topology Spread Constraints):是一种用于定义 Pod 在不同拓扑域(如节点、区域等)中分布的机制。
-
Pod 拓扑分布约束确保 Pod 在不同拓扑域中均匀分布,提高应用程序的可用性和容错性。
92. Kubernetes 中的 Pod 就绪探针(Readiness Probe)是什么?
答案:
-
Pod 就绪探针(Readiness Probe):用于确定 Pod 是否准备好接收流量。
-
就绪探针定期检查 Pod 的状态,如果探针失败,Kubernetes 会将 Pod 从 Service 的 Endpoint 中移除,停止向该 Pod 发送流量。
-
就绪探针通常用于确保应用程序在启动后完全初始化,避免将流量发送到未准备好的 Pod。
93. Kubernetes 中的 Pod 存活探针(Liveness Probe)是什么?
答案:
-
Pod 存活探针(Liveness Probe):用于确定 Pod 是否处于健康状态。
-
存活探针定期检查 Pod 的状态,如果探针失败,Kubernetes 会重启 Pod。
-
存活探针通常用于检测应用程序的死锁、内存泄漏等问题,确保应用程序始终处于健康状态。
94. Kubernetes 中的 Pod 启动探针(Startup Probe)是什么?
答案:
-
Pod 启动探针(Startup Probe):用于确定 Pod 是否已成功启动。
-
启动探针在应用程序启动期间运行,直到探针成功为止。一旦启动探针成功,Kubernetes 会切换到使用存活探针和就绪探针。
-
启动探针通常用于处理启动时间较长的应用程序,避免在应用程序启动期间触发不必要的重启。
95. Kubernetes 中的 Pod 优先级(Pod Priority)是什么?
答案:
-
Pod 优先级(Pod Priority):用于定义 Pod 的优先级,高优先级的 Pod 可以抢占低优先级的 Pod 的资源。
-
优先级通过
PriorityClass
资源定义,Pod 通过priorityClassName
字段引用PriorityClass
。 -
高优先级的 Pod 在资源不足时可以抢占低优先级的 Pod,确保关键任务能够调度。
96. Kubernetes 中的 Pod 抢占(Pod Preemption)是什么?
答案:
-
Pod 抢占(Pod Preemption):是 Kubernetes 中的一种调度策略,用于在资源不足时抢占低优先级的 Pod 的资源。
-
当高优先级的 Pod 无法调度时,Kubernetes 会尝试抢占低优先级的 Pod,以确保高优先级的 Pod 能够调度。
-
抢占策略通过
PriorityClass
和PreemptionPolicy
字段控制。
97. Kubernetes 中的 Pod 亲和性和反亲和性(Pod Affinity and Anti-Affinity)是什么?
答案:
-
Pod 亲和性(Pod Affinity):用于定义 Pod 之间的亲和性规则,确保 Pod 调度到特定的节点或与其他 Pod 一起调度。
-
Pod 反亲和性(Pod Anti-Affinity):用于定义 Pod 之间的反亲和性规则,确保 Pod 不会调度到特定的节点或与其他 Pod 一起调度。
-
亲和性和反亲和性通过
affinity
字段定义,支持requiredDuringSchedulingIgnoredDuringExecution
和preferredDuringSchedulingIgnoredDuringExecution
两种策略。
98. Kubernetes 中的节点亲和性和反亲和性(Node Affinity and Anti-Affinity)是什么?
答案:
-
节点亲和性(Node Affinity):用于定义 Pod 与节点之间的亲和性规则,确保 Pod 调度到具有特定标签的节点上。
-
节点反亲和性(Node Anti-Affinity):用于定义 Pod 与节点之间的反亲和性规则,确保 Pod 不会调度到具有特定标签的节点上。
-
节点亲和性和反亲和性通过
nodeAffinity
字段定义,支持requiredDuringSchedulingIgnoredDuringExecution
和preferredDuringSchedulingIgnoredDuringExecution
两种策略。
99. Kubernetes 中的 Pod 拓扑分布约束(Pod Topology Spread Constraints)是什么?
答案:
-
Pod 拓扑分布约束(Pod Topology Spread Constraints):是一种用于定义 Pod 在不同拓扑域(如节点、区域等)中分布的机制。
-
Pod 拓扑分布约束确保 Pod 在不同拓扑域中均匀分布,提高应用程序的可用性和容错性。
-
拓扑分布约束通过
topologySpreadConstraints
字段定义,支持maxSkew
、topologyKey
和whenUnsatisfiable
等参数。
100. Kubernetes 中的 Pod 中断预算(Pod Disruption Budget)是什么?
答案:
-
Pod 中断预算(Pod Disruption Budget):是一种用于定义应用程序在自愿中断(如节点维护)期间的最小可用 Pod 数量的机制。
-
Pod 中断预算确保在自愿中断期间,应用程序的可用性不会低于定义的最小值。
-
中断预算通过
minAvailable
或maxUnavailable
字段定义,确保在自愿中断期间至少有指定数量的 Pod 可用。