Kubernetes 面试题与答案(专业 – 6 年经验)
Source: Dev.to
请提供您希望翻译的具体文本内容,我将按照要求保留源链接、格式和代码块,仅翻译正文部分。谢谢!
1. Kubernetes 架构
Q1. 当你运行 kubectl apply -f deployment.yaml 会发生什么?
答案:
当你运行 kubectl apply 时,请求会发送到 kube‑apiserver。
- API 服务器验证 YAML,检查身份验证和授权,并将期望状态存储在 etcd 中。
- 控制器检测到新的期望状态并创建一个 ReplicaSet。
- scheduler 决定 Pod 应该运行在哪个节点上。
- 该节点上的 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) 使用 Roles、ClusterRoles、RoleBindings 和 ClusterRoleBindings 来管理集群中 谁可以做什么。
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.yamlvalues-stage.yamlvalues-prod.yaml
在安装/升级 chart 时为每个环境覆盖相应的 values。
9. GitOps & Argo CD
Q20. What is GitOps?
Answer:
GitOps 将 Git 视为单一事实来源,用于期望的集群状态。集群会持续将其实时状态与 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:
kubectl logs <pod>– 检查容器日志。kubectl describe pod <pod>– 查看事件和状态详情。- 检查最近的配置或 secret 更改。
- 如有必要,在本地测试容器镜像。
Q24. 生产环境宕机。第一步怎么做?
Answer:
- 查看警报和监控仪表盘。
- 检查 pod 和节点状态(
kubectl get pods、kubectl get nodes)。 - 确认最近的部署或配置更改。
- 如有必要,回滚有问题的更改。
- 向相关方通报状态和预计恢复时间。
11. 云 Kubernetes(EKS 示例)
Q25. 什么是 EKS 中的 IRSA?
答案:
IAM Roles for Service Accounts (IRSA) 允许 Pod 安全地承担 AWS IAM 角色,消除在容器中嵌入静态 AWS 凭证的需求。
Q26. 节点组和 Fargate 的区别?
答案:
| Feature | Node Groups | Fargate |
|---|---|---|
| Control | 您管理 EC2 实例(大小、AMI 等) | 完全托管的无服务器 Pod |
| Cost | 为 EC2 实例付费(可能更低) | 每个 Pod 成本更高,但无需基础设施管理 |
| Use‑case | 需要自定义操作系统、GPU 等的工作负载 | 简单工作负载、突发任务,或希望零运维的场景 |
12. 设计与架构
Q27. 如何 …
(根据需要继续剩余的问题。)
您会为多个团队设计 Kubernetes 吗?
回答
- 独立的命名空间
- 按团队的 RBAC
- 资源配额
- 网络策略
- 按环境的 GitOps
Q28. 单集群还是多集群?
Answer
- 小团队 → Single cluster
- 大型组织 / 合规 → Multiple clusters
取决于风险、成本和隔离需求。
最终面试技巧(非常重要)
面试官关注以下方面:
- 清晰的思考
- 生产经验
- 权衡取舍
- 安全思维