Kubernetes 面试题与答案(专业 – 6 年经验)

发布: (2025年12月30日 GMT+8 04:05)
9 min read
原文: Dev.to

Source: Dev.to

请提供您希望翻译的具体文本内容,我将按照要求保留源链接、格式和代码块,仅翻译正文部分。谢谢!

1. Kubernetes 架构

Q1. 当你运行 kubectl apply -f deployment.yaml 会发生什么?

答案:

当你运行 kubectl apply 时,请求会发送到 kube‑apiserver

  1. API 服务器验证 YAML,检查身份验证和授权,并将期望状态存储在 etcd 中。
  2. 控制器检测到新的期望状态并创建一个 ReplicaSet
  3. scheduler 决定 Pod 应该运行在哪个节点上。
  4. 该节点上的 kubelet 拉取镜像并启动容器。

Q2. 什么是 etcd,为什么它至关重要?

答案:

  • etcd 是一个 分布式键值存储,保存整个集群的状态。
  • 如果 etcd 宕机或损坏,Kubernetes 将无法正常工作。
  • 因此,在生产环境中必须做好备份、加密以及高可用 etcd 的部署。

2. 工作负载与控制器

Q3. Deployment、StatefulSet 与 DaemonSet 的区别?

回答:

资源使用场景
Deployment无状态应用(例如 Web 服务)
StatefulSet有状态应用(例如数据库、Kafka)——提供稳定的网络 ID 和持久化存储
DaemonSet每个节点一个 Pod——通常用于日志、监控或安全代理

Q4. 何时使用 Job 或 CronJob?

回答:

  • Job – 一次性任务,例如数据库迁移。
  • CronJob – 定时重复任务,如备份或清理作业。

3. 网络(非常重要)

Q5. 流量如何从互联网到达 Pod?

Answer:

Typical flow:

Internet → Load Balancer → Ingress → Service → Pod
  • Ingress 处理路由规则。
  • Service 将流量负载均衡到相应的 Pod。
  • Pod 最终提供请求。

Q6. Service 类型的区别?

Answer:

类型暴露方式
ClusterIP仅内部(默认)
NodePort在每个节点的 IP + 端口上暴露服务
LoadBalancer提供云负载均衡器(生产级)

Q7. 什么是 NetworkPolicy?

Answer:

A NetworkPolicy defines 哪些 Pod 可以与哪些 Pod 通信

  • 默认情况下,流量不受限制。
  • 在生产环境中,我们通常会限制流量(零信任)以提升安全性。

4. 配置与密钥

Q8. 你如何在生产环境中管理密钥?

Answer:

尽量避免直接将密钥存放在 Kubernetes 中。常见的集成方式:

  • AWS Secrets Manager
  • AWS SSM Parameter Store
  • HashiCorp Vault

密钥在运行时通过 external‑secrets、CSI 驱动或类似机制注入。

Q9. Kubernetes 密钥是否加密?

Answer:

  • 默认情况下,密钥仅是 base64‑encoded,并未加密。
  • 在生产环境中我们启用 encryption at rest 并通过 RBAC 限制访问。

5. 存储与有状态应用

Q10. 解释 PV、PVC 和 StorageClass。

Answer:

组件描述
PV (PersistentVolume)实际由集群提供的存储资源。
PVC (PersistentVolumeClaim)由 pod/开发者发出的存储请求。
StorageClass定义存储的动态供应方式(例如,类型、回收策略)。

开发者使用 PVC;基础设施层根据 StorageClass 创建并管理 PV

Q11. 你会在 Kubernetes 中运行数据库吗?

Answer:

是的,但需要谨慎。对于生产数据库,请确保:

  • 通过 StatefulSets 部署
  • 使用 持久存储(合适的 PV)
  • 实施可靠的 备份策略
  • 应用 反亲和规则 将副本分散

通常,使用托管数据库服务可能是更好的选择。

6. 资源管理与扩展

Q12. requests 与 limits 的区别?

答案:

  • Requests – 对容器保证的资源(用于调度)。
  • Limits – 容器可使用的最大资源。

如果 pod 超过其 memory limit,则会被 OOMKilled,即使节点还有可用内存。

Q13. HPA 如何工作?

答案:

Horizontal Pod Autoscaler (HPA) 根据 CPU、内存或自定义指标(例如来自 Prometheus)的度量来扩缩 pod 副本的数量。

Q14. 为什么我的 pod 在节点还有内存的情况下仍然重启?

答案:

因为 pod 超过了它的 memory limit,而不是节点的总内存。Limits 是对每个容器强制执行的。

7. 安全(高级)

Q15. 如何确保 Kubernetes 集群的安全?

答案:

  • 实施 RBAC 并遵循最小权限原则。
  • 非 root 用户运行容器。
  • 应用 Pod Security Standards(或 PSP)。
  • 使用 NetworkPolicies 限制流量。
  • 扫描容器镜像以发现漏洞。
  • 部署准入控制器(例如 OPA/Gatekeeper)以执行策略。

Q16. 什么是 RBAC?

答案:

基于角色的访问控制(Role‑Based Access Control,RBAC) 使用 RolesClusterRolesRoleBindingsClusterRoleBindings 来管理集群中 谁可以做什么

Q17. 如何防止特权容器?

答案:

  • 使用 Pod Security Standards(或旧的 PodSecurityPolicy)来禁止特权提升。
  • 强制执行 OPA/Gatekeeper 策略,阻止特权安全上下文。

8. Helm

Q18. Why do we use Helm?

Answer:

Helm 将 Kubernetes 应用打包为 charts,提供:

  • 版本化发布
  • 用于可重用清单的模板化
  • 通过 values 文件进行环境特定配置

Q19. How do you manage multiple environments with Helm?

Answer:

维护不同的 values 文件:

  • values-dev.yaml
  • values-stage.yaml
  • values-prod.yaml

在安装/升级 chart 时为每个环境覆盖相应的 values。

9. GitOps & Argo CD

Q20. What is GitOps?

Answer:

GitOpsGit 视为单一事实来源,用于期望的集群状态。集群会持续将其实时状态与 Git 仓库进行对齐。

Q21. What does Argo CD do?

Answer:

Argo CD:

  • 持续比较 Git 中的期望状态与实时集群状态。
  • 同步 更改,检测漂移,并可 自动回滚

Q22. What is the App‑of‑Apps pattern?

Answer:

一个 父 Argo CD 应用 管理多个 子应用,从而实现对大型多服务环境的清晰管理。

10. 故障排除与运维

Q23. Pod 处于 CrashLoopBackOff。该怎么办?

Answer:

  1. kubectl logs <pod> – 检查容器日志。
  2. kubectl describe pod <pod> – 查看事件和状态详情。
  3. 检查最近的配置或 secret 更改。
  4. 如有必要,在本地测试容器镜像。

Q24. 生产环境宕机。第一步怎么做?

Answer:

  1. 查看警报和监控仪表盘。
  2. 检查 pod 和节点状态(kubectl get podskubectl get nodes)。
  3. 确认最近的部署或配置更改。
  4. 如有必要,回滚有问题的更改。
  5. 向相关方通报状态和预计恢复时间。

11. 云 Kubernetes(EKS 示例)

Q25. 什么是 EKS 中的 IRSA?

答案:

IAM Roles for Service Accounts (IRSA) 允许 Pod 安全地承担 AWS IAM 角色,消除在容器中嵌入静态 AWS 凭证的需求。

Q26. 节点组和 Fargate 的区别?

答案:

FeatureNode GroupsFargate
Control您管理 EC2 实例(大小、AMI 等)完全托管的无服务器 Pod
Cost为 EC2 实例付费(可能更低)每个 Pod 成本更高,但无需基础设施管理
Use‑case需要自定义操作系统、GPU 等的工作负载简单工作负载、突发任务,或希望零运维的场景

12. 设计与架构

Q27. 如何 …

(根据需要继续剩余的问题。)

您会为多个团队设计 Kubernetes 吗?

回答

  • 独立的命名空间
  • 按团队的 RBAC
  • 资源配额
  • 网络策略
  • 按环境的 GitOps

Q28. 单集群还是多集群?

Answer

  • 小团队 → Single cluster
  • 大型组织 / 合规 → Multiple clusters

取决于风险、成本和隔离需求。

最终面试技巧(非常重要)

面试官关注以下方面:

  • 清晰的思考
  • 生产经验
  • 权衡取舍
  • 安全思维
Back to Blog

相关文章

阅读更多 »

Helm是什么

Helm 是什么?类似于 Wordpress 的应用,需要在前端有一个 Wordpress 容器,后端有一个 MySQL 数据库。这些组件需要手动部署……

我对 Kubernetes 的看法

文章 URL: https://garnaudov.com/writings/how-i-think-about-kubernetes/ 评论 URL: https://news.ycombinator.com/item?id=46396043 点赞数: 31 评论数: 13