实施DevOps与监控

jonathan
2022-05-06 / 0 评论

实施DevOps与监控

完成一套简单从环境安装、软件开发到应用发布的简单生命周期可持续的软件、应用管理流程。

背景

  • 环境部署:项目实施每次部署环境都需要从头安装服务端软件,需要提一套简单流程让安装软件不需要每次都重复该项工作,并可复用,可迭代,多版本。

  • 可持续软件发布:项目实施软件开发、测试、发布没有统一的标准、流程、规范。需要提供一套标准、规范的devops流程。

  • 软件监控:项目实施发布后,性能、异常没有很好的监控,需要提供一套完整的监控体系进行监控和异常报警。

  • 性能优化:提供异常、性能优化wiki供项目实施参考。

项目实施的环境安装

  • 周期:项目实施的环境安装是一次性的。一般在项目初期的开发环境安装和测试环境安装。项目即将发布时环境的安装。
  • 差异性:一般主要是实施单位的差异,每个公的环境不用、软件标准、服务器配置不同。
  • 重复性:主要体现在多个实施单位、很多中间件、服务器环境是相同的。

使用Ansible进行环境的安装,该开源软件提供web ui界面帮助用户简单、流程化的完成环境的安装。

Ansible Awx的详细介绍参考Ansible Awx的介绍文档。基本的流程如下:

1. 脚本维护与版本控制

  • 实施团队或开发团队根据需求更新 Ansible 脚本。
  • 更改会通过 Pull Request 或合适的代码审查流程推送到 Git 仓库。
  • 使用 Git 标签或分支管理不同版本的 Ansible 脚本,以适应不同版本的软件或不同客户的配置需求。

2. AWX 配置与准备

  • 系统管理员或 DevOps 团队为实施团队配置 AWX,包括用户权限、团队、项目和作业模板。
  • 在 AWX 中设置相应的 Git 仓库作为项目来源,确保 AWX 可以访问并同步该仓库。

3. 客户环境准备

  • 实施团队与客户沟通,收集和配置目标服务器的信息。
  • 在 AWX 中设置相应的库存,将客户的服务器信息录入。
  • 如果需要,还可以为特定的客户或服务器组设置变量。

4. 软件部署

  • 实施团队在 AWX 中选择合适的作业模板,并针对特定的库存执行它,以在客户的服务器上部署软件。
  • 可以在 AWX 的 UI 中实时监控部署过程。
  • 如有需要,可以调整 Ansible 脚本或 AWX 变量,然后重新运行作业模板。

5. 验证与确认

  • 实施团队和/或客户验证软件是否已正确安装并按预期运行。
  • 如有问题,返回到步骤 1 或步骤 4 进行调整。

6. 文档和培训

  • 为客户提供任何相关的文档,说明如何使用或维护新安装的软件。
  • 如有需要,为客户提供相关培训。

7. 支持与维护

  • 实施团队或支持团队提供后续的技术支持,帮助客户解决可能出现的任何问题。
  • 当软件有更新或需要变更配置时,回到步骤 1 开始新的部署周期。

这个流程提供了从脚本维护到客户软件部署的完整视图,以及后续的支持。当然,每个公司的具体需求和流程可能会有所不同,所以你可能需要根据你的实际情况进行调整。

sequenceDiagram
    participant 脚本开发者
    participant 系统管理员
    participant 实施团队
    participant 客户
    participant 支持团队
    participant 公司
    
    脚本开发者->>系统管理员: 推送更新的 Ansible 脚本到 Git
    系统管理员->>系统管理员: 使 AWX 与 Git 仓库同步
    公司->>实施团队: 提供 AWX 离线版本
    客户->>实施团队: 提供目标服务器详情
    实施团队->>系统管理员: 请求 AWX 访问权限
    系统管理员->>实施团队: 在 AWX 上授予权限
    实施团队->>AWX: 在 AWX 中配置库存
    实施团队->>AWX: 运行作业模板进行软件部署
    AWX->>客户: 在客户的服务器上部署软件
    客户->>实施团队: 提供部署反馈
    实施团队->>脚本开发者: 报告脚本中的问题或需要的更改
    客户->>支持团队: 报告部署后的问题或提问
    支持团队->>客户: 提供解决方案和答案

可持续软件发布

  • 周期:软件开发、测试、发布、上线、迭代。
  • 客户差异:客户已有devops流程与没有devops流程
  • 复杂度:是单体应用还是微服务应用,代码管理是git还是svn。

综合考虑使用jenkins作为构建工具,主要因为jenkins专注于构建,生态完整,老牌开源产品,市场用户大,且PipeLine支持图形页面设计。详细devops流程请参考Devops流程

基于普通环境的devops流程:

sequenceDiagram
    participant 项目经理 as 项目经理
    participant 开发人员 as 开发人员
    participant 测试人员
    participant 运维人员 as 运维人员
    participant Jenkins

    项目经理->>开发人员: 定义需求
    开发人员->>项目经理: 讨论技术可行性
    测试人员->>项目经理: 了解需求为测试做准备
    
    开发人员->>开发人员: 本地编码
    开发人员->>Jenkins: 推送代码至版本控制系统

    开发人员->>开发人员: 代码审查
    Jenkins->>开发人员: 触发CI流程
    开发人员->>Jenkins: 关注构建与测试结果

    Jenkins->>开发人员: 执行静态代码检查 & 单元测试
    Jenkins->>测试人员: 报告代码覆盖率
    测试人员->>Jenkins: 使用JMeter进行性能测试
    开发人员->>Jenkins: 基于性能结果优化代码

    运维人员->>Jenkins: 配置预生产环境
    测试人员->>Jenkins: 在预生产环境执行集成测试
    
    运维人员->>Jenkins: 部署至生产环境
    测试人员->>运维人员: 验证生产环境部署

    运维人员->>Jenkins: 监控生产环境
    开发人员->>测试人员: 基于生产反馈修复问题

    项目经理->>所有人: 组织项目回顾
    所有人->>项目经理: 分享反馈与经验教训

基于k8s部署的环境

sequenceDiagram
    participant 项目经理 as 项目经理
    participant 开发人员 as 开发人员
    participant 测试人员
    participant 运维人员 as 运维人员
    participant Jenkins
    participant K8s as Kubernetes

    项目经理->>开发人员: 定义需求
    开发人员->>项目经理: 讨论技术可行性
    测试人员->>项目经理: 了解需求为测试做准备
    
    开发人员->>开发人员: 本地编码
    开发人员->>Jenkins: 推送代码至版本控制系统

    开发人员->>开发人员: 代码审查
    Jenkins->>开发人员: 触发CI流程
    开发人员->>Jenkins: 关注构建与测试结果

    Jenkins->>开发人员: 执行静态代码检查 & 单元测试
    Jenkins->>测试人员: 报告代码覆盖率
    测试人员->>Jenkins: 使用JMeter进行性能测试
    开发人员->>Jenkins: 基于性能结果优化代码

    Jenkins->>K8s: 使用Docker构建容器镜像
    K8s->>Jenkins: 确认镜像构建成功

    运维人员->>K8s: 配置预生产K8s环境
    Jenkins->>K8s: 在K8s预生产环境部署应用
    测试人员->>K8s: 在预生产环境执行集成测试
    
    运维人员->>K8s: 部署应用至K8s生产环境
    测试人员->>运维人员: 验证K8s生产环境部署

    运维人员->>K8s: 使用K8s监控生产环境
    开发人员->>测试人员: 基于生产反馈修复问题

    项目经理->>所有人: 组织项目回顾
    所有人->>项目经理: 分享反馈与经验教训

监控

搭建一个监控体系来监控 Kubernetes (K8s) 上运行的 Spring Boot 应用需要考虑几个方面:指标收集、日志收集、告警以及可视化。在本指南中,我们将使用 SkyWalking、Prometheus、Grafana 和 Elasticsearch (ES) 来完成这一任务。以下是如何整合这些组件的基本步骤:

  1. SkyWalking:用于分布式追踪,提供深入的性能指标和应用拓扑视图。

  2. Prometheus:用于收集和存储指标数据。

  3. Grafana:用于可视化 Prometheus 和 SkyWalking 的数据。

  4. Elasticsearch (ES):用于存储和查询日志数据。

步骤如下:

1. 搭建 SkyWalking

  1. 在 Kubernetes 集群中部署 SkyWalking。

  2. 修改 Spring Boot 应用以包含 SkyWalking Java Agent。这通常涉及将 Java Agent JAR 文件添加到 JVM 的启动参数中,并配置 Agent 连接到 SkyWalking OAP 服务器。

  3. skyWalking可观测sql的链路执行,java线程的执行链路,http请求的执行链路、打印log日志。

2. 搭建 Prometheus

  1. 使用 prometheus-operator 在 Kubernetes 上部署 Prometheus。它允许更容易地管理 Prometheus 实例,并与 Alertmanager 和其他相关组件一起工作。

  2. 为 Spring Boot 应用配置 micrometer,使其发布 Prometheus 格式的指标。

  3. 定义 ServiceMonitor 或 PodMonitor 资源,让 Prometheus 自动发现并抓取 Spring Boot 应用的指标。

3. 搭建 Grafana

  1. 在 Kubernetes 上部署 Grafana。

  2. 配置 Grafana 使用 Prometheus 作为数据源。

  3. 导入或创建用于 Spring Boot 应用和 Kubernetes 的仪表板。

4. 集成 Elasticsearch

  1. 在 Kubernetes 上部署 Elasticsearch。

  2. 配置 Spring Boot 使用 logback 或其他日志框架将日志发送到 Elasticsearch。

  3. 可以使用 Kibana 或 Grafana 为 Elasticsearch 创建仪表板,以可视化日志数据。

5. 警告和通知

  1. 使用 Prometheus 的 Alertmanager 来定义警告规则和接收警告。

  2. 配置 Alertmanager 将警告发送到所需的通知渠道,如 Slack、Email 等。

此步骤只是概述,具体的实施可能涉及更多的配置和调整,特别是考虑到 Kubernetes 和 Spring Boot 应用的特定需求和环境。确保在生产环境部署前进行充分的测试。

更多业务链路日志可以通过自定义skywalking自定义封装

kibana是否使用可以再讨论,应该不需要复杂的日志查询

评论

博主关闭了当前页面的评论