高级运维工程师面试题汇总-【DEVOPS】
DevOps
1. gitlab runner做了哪些优化
答案:
-
Runner 配置与标签优化:
-
使用 标签 对 Runner 进行分类,将不同类型的任务(如前端构建、后端测试、Docker 构建)定向到具有特定环境和资源的 Runner 上执行。
-
配置 并发数,根据 Runner 所在机器的资源配置合理的并发作业数,避免资源争抢。
-
-
缓存与制品优化:
-
配置
cache
关键字,缓存依赖目录(如node_modules
,.m2/repository
),大幅加速后续流水线执行。 -
使用
artifacts
关键字在作业间传递构建产物,避免重复构建。
-
-
依赖拉取优化:
-
对于 Docker 执行器,使用 本地 Docker 镜像仓库镜像 或 Docker 层缓存 来加速镜像拉取和构建。
-
使用
pre-clone-script
来优化 Git 仓库的准备工作。
-
-
执行器选择:
-
在资源充足且环境一致要求高的场景下,使用 Docker 执行器 实现环境隔离。
-
对性能要求极高的任务,可使用 Shell 执行器 以减少虚拟化开销。
-
-
资源与清理:
-
定期清理旧的流水线日志和制品,释放磁盘空间。
-
为 Runner 配置监控,确保其健康状态。
-
2. 怎么实现多集群逐个发布
答案:
实现多集群逐个发布(又名“滚动发布”或“分批次发布”)的核心思想是分阶段、可控制地将新版本应用部署到不同的集群或环境中。
-
环境定义:明确定义发布顺序,例如:开发集群 -> 测试集群 -> 预发布集群 -> 生产集群 A -> 生产集群 B。
-
流水线设计:
-
流水线被设计为多个阶段,每个阶段对应一个集群的部署。
-
每个部署阶段结束后,可以加入人工审批或自动化测试环节,确认无误后再触发下一阶段的部署。
-
-
配置管理:使用 Helm、Kustomize 等工具,通过参数化(如不同的
values.yaml
)来管理不同集群的配置差异。 -
实现工具:
-
Jenkins Pipeline:使用
input
步骤实现人工审批,使用lock
资源控制并发。 -
GitOps 工具:使用 Argo CD ApplicationSet 的
strategy: rollingSync
,可以自动按顺序更新多个集群的应用。在更新每个集群前,可以配置presync
钩子进行健康检查或人工验证。
-
3. 蓝绿部署、灰度发布、金丝雀发布区别☆
答案:
-
蓝绿部署:
-
过程:部署一套全新的生产环境(绿),与当前运行的环境(蓝)完全隔离。测试通过后,一次性将负载均衡器的流量从蓝环境全部切换到绿环境。
-
优点:发布和回滚速度极快(切换流量即可),风险低。
-
缺点:需要两套完整的资源,成本高。
-
-
金丝雀发布:
-
过程:将新版本先部署到一小部分用户或服务器(如 5%),让这部分用户先行体验新功能。验证无误后,逐步扩大新版本的范围,直到完全替代旧版本。
-
优点:可以实时监控新版本的性能表现,发现问题只影响少量用户,风险可控。
-
缺点:发布周期较长。
-
-
灰度发布:
-
过程:与金丝雀发布类似,但划分用户的维度更丰富。不随机分配流量,而是根据特定规则(如用户ID、地理位置、用户标签等)将新版本定向发布给特定用户群体。
-
优点:可以进行精准的A/B测试,功能针对性地开放。
-
关系:通常认为金丝雀发布是灰度发布的一种特例,即仅按随机比例进行灰度。
-
4. 什么是测试左移?(Shift-Left testing)
答案:
测试左移是一种软件质量保证理念,强调在软件开发生命周期中尽早地进行测试,将测试活动从传统的开发后期“向左移动”到开发的早期阶段(如需求、设计、编码阶段)。
-
核心实践:
-
在编码阶段,由开发人员编写和执行单元测试。
-
采用 TD
-