DevOps与自动化原理

DevOps与自动化原理

一、CI/CD

1.1 CI/CD核心概念

复制代码
┌─────────────────────────────────────────────────────────────────┐
│                    CI/CD流水线                                    │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  ┌──────────────────────────────────────────────────────────┐  │
│  │                    持续集成(CI)                           │  │
│  │                                                          │  │
│  │  代码提交 → 自动构建 → 自动测试 → 代码质量检查           │  │
│  │                                                          │  │
│  │  核心实践:                                               │  │
│  │  ├── 频繁提交(每日多次)                                  │  │
│  │  ├── 自动化构建                                          │  │
│  │  ├── 自动化测试(单元/集成/端到端)                        │  │
│  │  └── 快速反馈(< 10分钟)                                  │  │
│  └──────────────────────────────────────────────────────────┘  │
│                              │                                   │
│                              ▼                                   │
│  ┌──────────────────────────────────────────────────────────┐  │
│  │                    持续交付(CD)                           │  │
│  │                                                          │  │
│  │  CI通过 → 自动部署到Staging → 验收测试 → 人工审批 → 生产│  │
│  │                                                          │  │
│  │  核心实践:                                               │  │
│  │  ├── 一键部署                                            │  │
│  │  ├── 环境一致性                                          │  │
│  │  ├── 回滚机制                                            │  │
│  │  └── 特性开关                                            │  │
│  └──────────────────────────────────────────────────────────┘  │
│                              │                                   │
│                              ▼                                   │
│  ┌──────────────────────────────────────────────────────────┐  │
│  │                    持续部署(CD)                           │  │
│  │                                                          │  │
│  │  CI通过 → 自动部署到Staging → 自动测试 → 自动部署到生产 │  │
│  │                                                          │  │
│  │  核心实践:                                               │  │
│  │  ├── 全自动化部署                                        │  │
│  │  ├── 金丝雀发布                                          │  │
│  │  ├── 自动回滚                                            │  │
│  │  └── 全面监控                                            │  │
│  └──────────────────────────────────────────────────────────┘  │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘

1.2 云原生CI/CD流水线

复制代码
┌─────────────────────────────────────────────────────────────────┐
│                云原生CI/CD完整流水线                              │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  开发者 ──► Git Push ──► CI/CD系统                               │
│                                  │                               │
│  ┌───────────────────────────────┼───────────────────────────┐  │
│  │                    CI阶段                                 │  │
│  │                                                           │  │
│  │  ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐        │  │
│  │  │ 代码检出│→│ 代码扫描│→│ 编译构建│→│ 单元测试│        │  │
│  │  └─────────┘ └─────────┘ └─────────┘ └─────────┘        │  │
│  │       │                                                  │  │
│  │       ▼                                                  │  │
│  │  ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐        │  │
│  │  │ 集成测试│→│ 镜像构建│→│ 安全扫描│→│ 镜像签名│        │  │
│  │  └─────────┘ └─────────┘ └─────────┘ └─────────┘        │  │
│  │       │                                                  │  │
│  │       ▼                                                  │  │
│  │  ┌─────────┐ ┌─────────┐                                │  │
│  │  │ SBOM生成│→│ 制品发布│                                │  │
│  │  └─────────┘ └─────────┘                                │  │
│  └───────────────────────────────────────────────────────────┘  │
│                              │                                   │
│                              ▼                                   │
│  ┌───────────────────────────────────────────────────────────┐  │
│  │                    CD阶段                                 │  │
│  │                                                           │  │
│  │  ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐        │  │
│  │  │清单更新 │→│策略验证 │→│金丝雀部署│→│流量验证 │        │  │
│  │  └─────────┘ └─────────┘ └─────────┘ └─────────┘        │  │
│  │       │                                                  │  │
│  │       ▼                                                  │  │
│  │  ┌─────────┐ ┌─────────┐ ┌─────────┐                    │  │
│  │  │全量发布 │→│冒烟测试 │→│监控确认 │                    │  │
│  │  └─────────┘ └─────────┘ └─────────┘                    │  │
│  └───────────────────────────────────────────────────────────┘  │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘

1.3 Argo CD配置示例

复制代码
# Argo CD Application
apiVersion:argoproj.io/v1alpha1
kind:Application
metadata:
name:my-app
namespace:argocd
annotations:
    notifications.argoproj.io/subscribe.on-deployed.slack:deployments
spec:
project:default
source:
    repoURL:https://github.com/org/k8s-manifests.git
    targetRevision:main
    path:overlays/production
    kustomize:
      images:
      -my-registry/my-app:latest
destination:
    server:https://kubernetes.default.svc
    namespace:production
syncPolicy:
    automated:
      prune:true
      selfHeal:true
      allowEmpty:false
    syncOptions:
    -CreateNamespace=true
    -PrunePropagationPolicy=foreground
    -ServerSideApply=true
    retry:
      limit:5
      backoff:
        duration:5s
        factor:2
        maxDuration:3m
---
# AppProject - 多团队隔离
apiVersion:argoproj.io/v1alpha1
kind:AppProject
metadata:
name:team-a
namespace:argocd
spec:
description:TeamAProject
sourceRepos:
-'https://github.com/team-a/*'
destinations:
-namespace:'team-a-*'
    server:https://kubernetes.default.svc
clusterResourceWhitelist:
-group:''
    kind:Namespace
namespaceResourceBlacklist:
-group:''
    kind:ResourceQuota
roles:
-name:admin
    policies:
    -p,proj:team-a:admin,applications,*,team-a/*,allow
    groups:
    -team-a-admins

二、GitOps

2.1 GitOps核心原则

复制代码
┌─────────────────────────────────────────────────────────────────┐
│                    GitOps核心原则                                  │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  1. 声明式                                                       │
│  ├── 系统描述为声明式配置                                        │
│  ├── Git仓库作为Single Source of Truth                           │
│  └── 配置版本化、可审计                                          │
│                                                                  │
│  2. 版本控制                                                     │
│  ├── 所有变更通过Git提交                                         │
│  ├── 变更历史可追溯                                              │
│  └── 回滚=Git revert                                            │
│                                                                  │
│  3. 自动应用                                                     │
│  ├── Git变更自动触发部署                                         │
│  ├── 控制循环持续调谐                                            │
│  └── 期望状态vs实际状态持续对比                                  │
│                                                                  │
│  4. 持续协调                                                     │
│  ├── 软件代理持续监控                                            │
│  ├── 偏差自动纠正                                                 │
│  └── 确保实际状态=期望状态                                       │
│                                                                  │
│  GitOps vs 传统CI/CD:                                            │
│  ┌──────────────────────────────────────────────────────────┐  │
│  │ 传统: CI系统推送变更到集群(需要集群访问权限)              │  │
│  │ GitOps: 集群内代理拉取变更(无需外部访问权限)              │  │
│  └──────────────────────────────────────────────────────────┘  │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘

2.2 GitOps工作流程

复制代码
┌─────────────────────────────────────────────────────────────────┐
│                    GitOps工作流程                                 │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  Push模式:                                                      │
  ┌────────┐    ┌────────┐    ┌────────┐    ┌────────┐           │
│  │ 开发者 │───►│ Git仓库│───►│ CI/CD  │───►│ K8s集群│           │
│  └────────┘    └────────┘    └────────┘    └────────┘           │
│                                推送部署                          │
│                                                                  │
│  Pull模式(推荐):                                                │
│  ┌────────┐    ┌────────┐                   ┌────────┐         │
│  │ 开发者 │───►│ Git仓库│◄──────轮询/事件────│Argo CD │         │
│  └────────┘    └────────┘                   └────┬───┘         │
│                                                  │              │
│                                                  │ 拉取+应用    │
│                                                  ▼              │
│                                             ┌────────┐          │
│                                             │ K8s集群│          │
│                                             └────────┘          │
│                                                                  │
│  完整流程:                                                       │
│  1. 开发者提交代码到应用仓库                                     │
│  2. CI构建镜像并推送到仓库                                       │
│  3. CI更新配置仓库中的镜像标签                                   │
│  4. GitOps工具检测到配置变更                                     │
│  5. 自动同步变更到Kubernetes集群                                 │
│  6. 持续监控确保状态一致                                         │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘

2.3 GitOps工具对比

特性 Argo CD Flux Jenkins X
模式 Pull Pull Push/Pull
UI 丰富的Web UI CLI为主 Web UI
多集群 原生支持 支持 支持
RBAC 内置 OIDC 内置
通知 丰富 丰富 内置
学习曲线
社区活跃
适用场景 企业级 轻量级 全流程

三、IaC(基础设施即代码)

3.1 IaC核心原则

复制代码
┌─────────────────────────────────────────────────────────────────┐
│                    IaC核心原则                                    │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  1. 声明式 vs 命令式                                             │
│  ├── 声明式: 描述期望状态(Terraform/K8s YAML)                   │
│  └── 命令式: 描述操作步骤(Shell/Ansible)                        │
│                                                                  │
│  2. 幂等性                                                       │
│  ├── 多次执行结果一致                                            │
│  ├── 已存在的资源不重复创建                                      │
│  └── 部分失败可安全重试                                          │
│                                                                  │
│  3. 不可变基础设施                                               │
│  ├── 替换而非修改                                                │
│  ├── 容器镜像不可变                                              │
│  └── 蓝绿部署/金丝雀发布                                         │
│                                                                  │
│  4. 版本控制                                                     │
│  ├── 基础设施定义纳入Git管理                                     │
│  ├── 变更可审计                                                  │
│  └── 可回滚                                                      │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘

3.2 Terraform配置示例

复制代码
# EKS集群Terraform配置
module "eks" {
  source  = "terraform-aws-modules/eks/aws"
  version = "~> 19.0"

  cluster_name    = "production"
  cluster_version = "1.28"

  cluster_endpoint_private_access = true
  cluster_endpoint_public_access  = true

  vpc_id     = module.vpc.vpc_id
  subnet_ids = module.vpc.private_subnets

  eks_managed_node_groups = {
    system = {
      min_size       = 2
      max_size       = 5
      desired_size   = 3
      instance_types = ["m5.large"]

      labels = {
        role = "system"
      }

      taints = [{
        key    = "CriticalAddonsOnly"
        effect = "NO_SCHEDULE"
      }]
    }

    application = {
      min_size       = 3
      max_size       = 20
      desired_size   = 5
      instance_types = ["m5.xlarge"]

      labels = {
        role = "application"
      }
    }
  }

  cluster_addons = {
    coredns = {
      most_recent = true
    }
    kube-proxy = {
      most_recent = true
    }
    vpc-cni = {
      most_recent    = true
      before_compute = true
      configuration_values = jsonencode({
        env = {
          ENABLE_PREFIX_DELEGATION = "true"
          WARM_PREFIX_TARGET       = "1"
        }
      })
    }
  }

  cluster_security_group_additional_rules = {
    ingress_nodes_8443 = {
      description                = "Node to control plane 8443"
      protocol                   = "tcp"
      from_port                  = 8443
      to_port                    = 8443
      source_node_security_group = true
    }
  }

  tags = {
    Environment = "production"
    Terraform   = "true"
  }
}

3.3 Crossplane配置示例

复制代码
# Crossplane - K8s原生IaC
apiVersion:aws.upbound.io/v1beta1
kind:ProviderConfig
metadata:
name:aws-provider
spec:
credentials:
    source:Secret
    secretRef:
      namespace:crossplane-system
      name:aws-creds
      key:creds
---
# 使用Crossplane创建S3 Bucket
apiVersion:s3.aws.upbound.io/v1beta1
kind:Bucket
metadata:
name:my-app-bucket
annotations:
    crossplane.io/external-name:my-app-bucket-12345
spec:
forProvider:
    region:us-east-1
    versioning:
      -enabled:true
    serverSideEncryptionConfiguration:
      -rule:
          -applyServerSideEncryptionByDefault:
              -sseAlgorithm:AES256
providerConfigRef:
    name:aws-provider
---
# CompositeResourceDefinition - 抽象基础设施
apiVersion:apiextensions.crossplane.io/v1
kind:CompositeResourceDefinition
metadata:
name:xapps.example.org
spec:
group:example.org
names:
    kind:XApp
    plural:xapps
versions:
-name:v1alpha1
    served:true
    referenceable:true
    schema:
      openAPIV3Schema:
        type:object
        properties:
          spec:
            type:object
            properties:
              parameters:
                type:object
                properties:
                  environment:
                    type:string
                  region:
                    type:string

3.4 IaC工具对比

工具 类型 语言 状态管理 适用场景
Terraform 声明式 HCL State文件 通用IaC
Pulumi 声明式 Python/Go/TS State文件 开发者友好
Crossplane 声明式 YAML K8s CRD K8s原生IaC
Ansible 命令式 YAML 配置管理
CDKTF 声明式 TS/Python State文件 开发者IaC

四、混沌工程

4.1 混沌工程原则

复制代码
┌─────────────────────────────────────────────────────────────────┐
│                    混沌工程原则                                    │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  1. 建立系统稳态假设                                             │
│  ├── 定义"正常"行为的可测量指标                                  │
│  └── 例如: P99延迟<200ms, 成功率>99.9%                          │
│                                                                  │
│  2. 假设稳态在控制组和实验组中都会持续                           │
│  ├── 控制组: 正常运行                                            │
│  └── 实验组: 注入故障                                            │
│                                                                  │
│  3. 引入真实世界事件                                             │
│  ├── 服务器崩溃                                                  │
│  ├── 网络延迟/分区                                               │
│  ├── 依赖服务故障                                                │
│  └── 资源耗尽                                                    │
│                                                                  │
│  4. 观察差异                                                     │
│  ├── 稳态是否被破坏?                                             │
│  ├── 系统如何反应?                                               │
│  └── 恢复时间多久?                                               │
│                                                                  │
│  混沌实验设计流程:                                               │
│  ┌──────────────────────────────────────────────────────────┐  │
│  │ 1. 定义稳态假设 → 2. 选择故障注入 → 3. 执行实验         │  │
│  │         ▲                                        │        │  │
│  │         └──────── 5. 改进系统 ← 4. 验证假设 ────────┘        │  │
│  └──────────────────────────────────────────────────────────┘  │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘

4.2 Chaos Mesh配置

复制代码
# 网络延迟注入
apiVersion:chaos-mesh.org/v1alpha1
kind:NetworkChaos
metadata:
name:network-delay
namespace:chaos-testing
spec:
action:delay
mode:one
selector:
    namespaces:
    -production
    labelSelectors:
      app:my-service
delay:
    latency:"100ms"
    correlation:"25"
    jitter:"50ms"
duration:"5m"
---
# Pod故障注入
apiVersion:chaos-mesh.org/v1alpha1
kind:PodChaos
metadata:
name:pod-failure
namespace:chaos-testing
spec:
action:pod-failure
mode:one
selector:
    namespaces:
    -production
    labelSelectors:
      app:my-service
duration:"30s"
scheduler:
    cron:"@every 10m"
---
# IO延迟注入
apiVersion:chaos-mesh.org/v1alpha1
kind:IOChaos
metadata:
name:io-delay
namespace:chaos-testing
spec:
action:delay
mode:one
selector:
    namespaces:
    -production
    labelSelectors:
      app:my-service
volumePath:/data
path:"/data/**/*"
delay:"500ms"
percent:50
duration:"5m"
---
# StressChaos - CPU/内存压力
apiVersion:chaos-mesh.org/v1alpha1
kind:StressChaos
metadata:
name:cpu-stress
namespace:chaos-testing
spec:
mode:one
selector:
    namespaces:
    -production
    labelSelectors:
      app:my-service
stressors:
    cpu:
      workers:2
      load:80
duration:"3m"

4.3 混沌实验安全准则

复制代码
┌─────────────────────────────────────────────────────────────────┐
│                  混沌实验安全准则                                 │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  实验前:                                                         │
│  ├── 明确实验目标和假设                                          │
│  ├── 确定爆炸半径(影响范围)                                      │
│  ├── 制定回滚方案                                                │
│  ├── 在非生产环境先验证                                          │
│  └── 通知相关人员                                                │
│                                                                  │
│  实验中:                                                         │
│  ├── 实时监控系统指标                                            │
│  ├── 设置自动终止条件                                            │
│  ├── 限制故障影响范围                                            │
│  └── 准备随时手动终止                                            │
│                                                                  │
│  实验后:                                                         │
│  ├── 记录实验结果                                                │
│  ├── 分析系统行为                                                │
│  ├── 制定改进计划                                                │
│  └── 验证改进效果                                                │
│                                                                  │
│  渐进式混沌:                                                     │
│  Level 1: 非生产环境,小范围故障                                  │
│  Level 2: 非生产环境,组合故障                                    │
│  Level 3: 生产环境,小范围故障(游戏日)                            │
│  Level 4: 生产环境,自动持续混沌                                  │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘

五、平台工程

5.1 平台工程核心理念

复制代码
┌─────────────────────────────────────────────────────────────────┐
│                    平台工程架构                                   │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  ┌──────────────────────────────────────────────────────────┐  │
│  │                 开发者自助服务                             │  │
│  │  ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐       │  │
│  │  │服务创建 │ │数据库申请│ │环境管理 │ │监控查看 │       │  │
│  │  └─────────┘ └─────────┘ └─────────┘ └─────────┘       │  │
│  │  ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐       │  │
│  │  │部署管理 │ │密钥管理 │ │日志查看 │ │告警配置 │       │  │
│  │  └─────────┘ └─────────┘ └─────────┘ └─────────┘       │  │
│  └──────────────────────────────────────────────────────────┘  │
│                              │                                   │
│                              ▼                                   │
│  ┌──────────────────────────────────────────────────────────┐  │
│  │                   内部开发者平台(IDP)                     │  │
│  │                                                          │  │
│  │  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐     │  │
│  │  │ Backstage   │  │ Port        │  │ Kratix      │     │  │
│  │  │ (Spotify)   │  │ (GetPort)   │  │             │     │  │
│  │  └─────────────┘  └─────────────┘  └─────────────┘     │  │
│  └──────────────────────────────────────────────────────────┘  │
│                              │                                   │
│                              ▼                                   │
│  ┌──────────────────────────────────────────────────────────┐  │
│  │                   平台抽象层                              │  │
│  │  ├── 集群管理(Crossplane/Cluster API)                     │  │
│  │  ├── 服务网格(Istio/Linkerd)                              │  │
│  │  ├── 可观测性(Prometheus/OTel)                            │  │
│  │  ├── 安全(Vault/Kyverno)                                  │  │
│  │  └── CI/CD(Argo CD/Tekton)                                │  │
│  └──────────────────────────────────────────────────────────┘  │
│                              │                                   │
│                              ▼                                   │
│  ┌──────────────────────────────────────────────────────────┐  │
│  │                   基础设施层                              │  │
│  │  ├── Kubernetes集群                                       │  │
│  │  ├── 云服务(AWS/GCP/Azure)                                │  │
│  │  └── 物理基础设施                                          │  │
│  └──────────────────────────────────────────────────────────┘  │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘

5.2 Backstage配置示例

复制代码
# Backstage应用模板
apiVersion:scaffolder.backstage.io/v1beta3
kind:Template
metadata:
name:microservice-template
title:MicroserviceTemplate
description:创建新的微服务项目
spec:
owner:platform-team
type:service
parameters:
-title:服务配置
    required:
    -name
    -owner
    properties:
      name:
        title:服务名称
        type:string
        pattern:'^[a-z][a-z0-9-]*$'
      owner:
        title:团队
        type:string
        ui:field:OwnerPicker
      description:
        title:描述
        type:string
      language:
        title:编程语言
        type:string
        enum: [go, java, python, node]
        default:go
steps:
-id:template
    name:生成代码
    action:fetch:template
    input:
      url:./skeleton
      values:
        name:${{parameters.name}}
        owner:${{parameters.owner}}
        language:${{parameters.language}}
-id:publish
    name:发布到Git
    action:publish:github
    input:
      allowedHosts: ['github.com']
      description:${{parameters.description}}
      repoUrl:github.com?owner=my-org&repo=${{parameters.name}}
-id:register
    name:注册到Backstage
    action:catalog:register
    input:
      catalogInfoUrl:https://github.com/my-org/${{parameters.name}}/blob/main/catalog-info.yaml
output:
    links:
    -title:仓库
      url:${{steps.publish.output.remoteUrl}}
    -title:打开目录
      icon:catalog
      entityRef:${{steps.register.output.entityRef}}

5.3 平台工程成熟度

复制代码
┌─────────────────────────────────────────────────────────────────┐
│                  平台工程成熟度模型                               │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  Level 1: 脚本化                                                 │
│  ├── 手动操作为主                                                │
│  ├── 少量自动化脚本                                              │
│  └── 开发者提交工单                                              │
│                                                                  │
│  Level 2: 自助服务                                               │
│  ├── 标准化模板                                                  │
│  ├── 自助服务门户                                                │
│  └── 基础自动化流程                                              │
│                                                                  │
│  Level 3: 平台化                                                 │
│  ├── 内部开发者平台(IDP)                                         │
│  ├── 统一技术栈                                                  │
│  ├── 黄金路径(Golden Path)                                       │
│  └── 完整的自助能力                                              │
│                                                                  │
│  Level 4: 智能化                                                 │
│  ├── 自动化治理                                                  │
│  ├── 智能推荐                                                     │
│  ├── 自愈能力                                                    │
│  └── 持续优化                                                    │
│                                                                  │
│  关键指标:                                                       │
│  ├── 开发者满意度(DX)                                            │
│  ├── 服务创建时间                                                │
│  ├── 平台采用率                                                  │
│  └── 平均恢复时间(MTTR)                                         │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘

六、DevOps度量体系

6.1 DORA四大关键指标

复制代码
┌─────────────────────────────────────────────────────────────────┐
│                  DORA四大关键指标                                 │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  1. 部署频率(Deployment Frequency)                              │
│  ├── 定义: 成功部署到生产的频率                                  │
│  ├── 精英团队: 按需(每天多次)                                   │
│  ├── 高绩效: 每周-每月                                          │
│  ├── 中绩效: 每月-每半年                                        │
│  └── 低绩效: 超过半年                                           │
│                                                                  │
│  2. 变更前置时间(Lead Time for Changes)                         │
│  ├── 定义: 从代码提交到部署到生产的时间                          │
│  ├── 精英团队: < 1天                                            │
│  ├── 高绩效: 1天-1周                                            │
│  ├── 中绩效: 1周-1月                                            │
│  └── 低绩效: > 1月                                              │
│                                                                  │
│  3. 变更失败率(Change Failure Rate)                              │
│  ├── 定义: 部署导致生产故障的比例                                │
│  ├── 精英团队: 0-15%                                            │
│  ├── 高绩效: 16-30%                                             │
│  ├── 中绩效: 31-45%                                             │
│  └── 低绩效: > 45%                                              │
│                                                                  │
│  4. 服务恢复时间(MTTR)                                          │
│  ├── 定义: 从服务中断到恢复的时间                                │
│  ├── 精英团队: < 1小时                                          │
│  ├── 高绩效: < 1天                                              │
│  ├── 中绩效: 1天-1周                                            │
│  └── 低绩效: > 1周                                              │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘

6.2 DevOps度量仪表盘

复制代码
# Prometheus规则 - DORA指标
apiVersion:monitoring.coreos.com/v1
kind:PrometheusRule
metadata:
name:dora-metrics
namespace:monitoring
spec:
groups:
-name:dora
    rules:
    # 部署频率
    -record:dora:deployments:count:1d
      expr:sum(increase(deployment_total[1d]))

    # 变更前置时间
    -record:dora:lead_time:seconds
      expr:|
        time() - on(app) group_left(commit_timestamp)
        label_replace(
          git_commit_timestamp{branch="main"},
          "app", "$1", "repo", "(.*)"
        )

    # 变更失败率
    -record:dora:failure_rate:ratio
      expr:|
        sum(rate(deployment_total{status="failed"}[7d]))
        /
        sum(rate(deployment_total[7d]))

    # MTTR
    -record:dora:mttr:seconds
      expr: |
        avg_over_time(
          (time() - incident_start_time)
          [30d:5m]
        )

参考资料

  • Argo CD Documentation

  • Flux Documentation

  • GitOps Principles

  • Terraform Documentation

  • Crossplane Documentation

  • Chaos Mesh Documentation

  • Backstage Documentation

  • DORA Metrics

相关推荐
炸炸鱼.1 天前
Kubernetes高级调度02:Taint/Toleration、Cordon/Drain、亲和性与反亲和性完全指南
云原生·容器·kubernetes
海兰1 天前
Kibana Dashboard as Code:Elastic 9.4 如何用 Terraform 和类型化 API 终结“JSON 垃圾袋“
云原生·json·terraform
geshifei1 天前
K8s 容器运行 UnixBench — 代理机器执行记录
云原生·容器·kubernetes
阿里云云原生1 天前
可观测性的终局?从“面向数据”到“面向对象”,UModel 如何为 AI Agent 注入认知地图
云原生·agent
李南想做条咸鱼1 天前
k8s集群容器访问域名第一次不通,第二次必通如何解决
云原生·容器·kubernetes
ん贤1 天前
Volcano 详细笔记
云原生·volcano
Elastic 中国社区官方博客2 天前
Elasticsearch Agent Builder 黑客松(Hackathon)
大数据·人工智能·elasticsearch·搜索引擎·云原生·全文检索
^ω^。2 天前
K8s知识
云原生·容器·kubernetes
sbjdhjd2 天前
从 0 到 1 构建高可用企业级 NoSql 数据库 Redis 集群
linux·运维·redis·云原生·kubernetes·开源·云计算
还在忙碌的吴小二2 天前
Spring Cloud Alibaba 微服务解决方案新手入门指南
微服务·云原生·架构