devOps学习
一些知识点
XXX
一、基础概念与流程
什么是 DevOps?核心目标是什么?
- DevOps:一种结合开发(Dev)与运维(Ops)的文化与实践,强调自动化、协作和持续交付。
- 核心目标:缩短软件交付周期,提高部署频率,确保系统稳定性和快速故障恢复。
CI/CD 流程的具体步骤?
- 持续集成(CI):代码提交后自动触发构建、测试(单元测试、集成测试)。
- 持续交付/部署(CD):将通过测试的代码自动部署到测试/生产环境。
- 工具链示例:GitLab CI、Jenkins、GitHub Actions、Argo CD。
基础设施即代码(IaC)的优势及常用工具?
- 优势:版本控制、环境一致性、快速重建。
- 工具:Terraform(多云编排)、Ansible(配置管理)、AWS CloudFormation(AWS 专用)。
二、工具与实践
Jenkins Pipeline 如何实现多阶段部署?
- 示例 Jenkinsfile:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15pipeline {
agent any
stages {
stage('Build') {
steps { sh 'mvn clean package' }
}
stage('Test') {
steps { sh 'mvn test' }
}
stage('Deploy to Staging') {
when { branch 'main' }
steps { sh 'kubectl apply -f staging.yaml' }
}
}
}
- 示例 Jenkinsfile:
Docker 与虚拟机的区别?
Docker 虚拟机(VM) 共享宿主机内核,轻量级 独立内核,资源占用高 秒级启动 分钟级启动 隔离性较弱(基于进程/命名空间) 完全隔离(Hypervisor) Kubernetes 中如何实现滚动更新?
- 通过
Deployment
配置:1
2
3
4
5
6spec:
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1 # 允许超出副本数的最大 Pod 数
maxUnavailable: 0 # 更新期间不可用 Pod 的最大数量
- 通过
三、监控与日志
Prometheus + Grafana 的监控流程?
- Prometheus:定时拉取目标服务的指标数据(通过 exporter)。
- Grafana:可视化监控面板,支持 PromQL 查询。
- 告警:通过 Alertmanager 配置规则(如 CPU 使用率 > 80%)。
ELK/EFK 日志系统的组成及作用?
- Elasticsearch:分布式搜索和分析引擎,存储日志。
- Logstash/Fluentd:日志收集、过滤和转发。
- Kibana:可视化日志数据并分析。
如何排查 Kubernetes Pod 的日志问题?
1
2kubectl logs <pod-name> -c <container-name> # 查看指定容器日志
kubectl describe pod <pod-name> # 查看 Pod 事件详情
四、云与自动化
Terraform 的核心概念?
- Provider:定义云平台(如 AWS、Azure)。
- Resource:声明基础设施组件(如 EC2 实例)。
- State 文件:记录当前基础设施状态,用于增量更新。
AWS/Azure/GCP 常用服务有哪些?
- 计算:EC2(AWS)、VM(Azure)、Compute Engine(GCP)。
- 存储:S3(AWS)、Blob Storage(Azure)、Cloud Storage(GCP)。
- 容器服务:EKS(AWS)、AKS(Azure)、GKE(GCP)。
如何实现跨云容灾?
- 策略:数据多云备份(如 S3 跨区域复制)、应用多区域部署、DNS 流量切换(如 Route 53)。
五、安全与合规
DevSecOps 的核心实践?
- 左移安全:在 CI/CD 流程中集成安全扫描(如 SAST、DAST)。
- 工具链:SonarQube(代码质量)、Trivy(容器漏洞扫描)、Vault(密钥管理)。
Kubernetes 如何管理敏感信息?
- Secret 对象:存储密码、令牌等敏感数据(Base64 编码)。
- 加密方案:使用 Kubernetes 的 etcd 加密或外部 Vault 集成。
六、高频场景题
如何优化 CI/CD 管道的执行速度?
- 并行执行测试任务。
- 使用缓存(如 Maven/Gradle 依赖缓存)。
- 拆分大型单体管道为多个小任务。
部署失败如何快速回滚?
- Kubernetes:
kubectl rollout undo deployment/<name>
。 - Terraform:
terraform apply -auto-approve -refresh=false -backup=backup.tfstate -state=previous.tfstate
。
- Kubernetes:
如何实现蓝绿发布或金丝雀发布?
- 蓝绿发布:通过负载均衡切换流量到新版本。
- 金丝雀发布:逐步将小部分流量导入新版本(如 Istio 流量权重)。
七、进阶问题
什么是 GitOps?核心工具是什么?
- GitOps:以 Git 作为唯一声明式基础设施和应用的来源,实现自动化同步。
- 工具:Argo CD、Flux CD。
服务网格(Service Mesh)的作用?
- 处理服务间通信的治理(如流量管理、熔断、链路追踪),与业务代码解耦。
- 工具:Istio、Linkerd。
Serverless 架构的优缺点?
- 优点:无需管理服务器,按需付费,自动扩缩容。
- 缺点:冷启动延迟,调试困难,供应商锁定风险。