发布于 2026-01-06 0 阅读
0

CTO DevOps 手册:简单原则和示例

CTO DevOps 手册:简单原则和示例

作为公司首席技术官,务必把 DevOps 部分做好。


本手册旨在帮助您清晰了解 DevOps:

  1. 了解什么是 DevOps(用简单的话来说)
  2. 了解DevOps能实现什么(以简单目标为例)
  3. 获取简明的“何时做什么”DevOps 指南

我在文章末尾添加了一个额外内容。
这是一个可供参考的生产环境部署示例。

本文的目标读者是谁?

您可能是一位希望以正确方式开始使用 DevOps 的创始人。

你可能是一家拥有 1000 名员工的公司的首席技术官,希望获得一些简单的原则。

或者,也许你是一名软件工程师,你想了解你公司的 DevOps 方法是否有效。

如果你正在寻找一本简单的 DevOps 操作手册,那就是它了。

了解预期结果

贵公司需要具备的两项能力

  1. 向顾客提供产品
  2. 构建和改进产品

构建、改进和维护软件所需的能力

  1. 进行实验并测试更改

DevOps 的含义很简单

开发人员和运维人员共同承担构建和改进系统的责任。

实际操作中:

  1. 开发人员负责“运营”。
  2. DevOps工程师的职责是使系统能够“运行”,并且他们自己也要完成一些操作。

运营= 提供、监控、保护、配置、部署、扩展。

选择一种平衡:推动者、执行者或自动化者

DevOps角色最终将需要在以下两方面之间取得平衡:

  1. 赋能者:提供实现 DevOps 目标所需的工具和知识
  2. 执行者:执行实现 DevOps 目标的任务
  3. 自动化程序:自动执行任何重复性操作

了解应该启用、执行或自动化哪些操作。

  • 提供基础设施
  • 确保系统安全
  • 部署工作负载
  • 监控系统
  • 从问题中恢复过来
  • 放大或缩小
  • 跟踪和测试变更
  • 自动化流程

选择合适的工具

  • 具备状态管理功能 = 节省自动化状态感知流程(例如 Terraform)的时间
  • 拥有庞大的社区和完善的文档 = 节省处理常见问题(例如 Kubernetes)的时间
  • 具有多种接口类型:API、CLI、UI = 节省与现有系统(例如 Vault)集成的时间

您也可以点击此处阅读有关选择工具的信息。

设定有意义的目标

遵循DevOps目标将使您朝着正确的方向前进:

  1. 一键式环境:让端到端测试变得轻松快捷
  2. 原子提交:确保经过测试的更改在生产环境中也能正常工作。
  3. 将共享部分和特定环境部分分开:随着公司规模的扩大,可以进行端到端测试。

如果您想了解更多有用的 DevOps 目标,欢迎在此预约免费咨询。

赋能因素:选择工具与知识的平衡

开发者要么拥有完成某件事所需的知识,要么拥有完成某件事所需的工具。

  • 更依赖知识:如果你希望开发人员为 DevOps 工作做出贡献。
  • 更依赖工具:如果你想将操作对开发人员进行抽象化。

如果两者之间的平衡并非有意为之,那就是偶然的。

行动者:做事要有充分的理由

  1. 这是一次性任务吗?
  2. 它能教会你开发者是如何工作的吗?
  3. 你是否直接对任务结果负责?

如果您对以上问题的回答为“否”,请启用或自动执行该操作。

多做练习 = 学习系统的使用案例

做得太多 = 无法规模化,过度依赖知识

自动化者:要有充分的理由进行自动化。

  1. 以前发生过吗?
  2. 这种事有可能再次发生吗?
  3. 自动化操作会比手动操作更省时间吗?
  4. 自动化操作能让你了解公司一项重要的流程吗?

如果您对 4 个问题中的 2 个回答“是”,请将其自动化!

自动化程度越高,对操作系统的专业知识依赖就越少。

自动化程度过高会导致系统感知能力下降。

PS:您还可以允许开发人员自动执行此操作。

创建可用的 DevOps 容量

公司的DevOps需求会有高峰期。

一个月需要 2 名 DevOps 工程师,下个月只需要一半。

在大型项目和小型任务之间切换是很常见的。

这一点尤其适用于新公司。

打破“DevOps 任务必须由 DevOps 工程师完成”的假设。

DevOps 能力分为 3 种类型。

  1. 非灵活岗位:团队中的一名全职 DevOps 工程师
  2. 半灵活型:能够为DevOps目标做出贡献的关键开发人员
  3. 完全灵活:一家灵活的DevOps服务公司或自由职业者

您可以点击此处阅读更多关于计算公司所需 DevOps 容量的信息

何时关注什么:常见困境

适用场景:你独自工作,且系统很简单

重点:简化开发——将应用 Docker 化,创建提交后运行测试的流水线

何时需要:您需要能够快速创建新环境(用于开发或为客户服务)

重点:实现“一键式环境”:使用 IaC(例如 Terraform)+ 部署工具(取决于平台)。

何时需要进行端到端测试:您希望对每一项代码修改进行测试,但代码修改数量众多。

重点:将“一键式环境”拆分为包含共享资源的“基础”环境和包含特定环境资源的“环境”环境

何时需要:您希望统一和标准化工作负载的部署、监控、扩展、配置和安全方式

重点:实现类似 Kubernetes 的编排器

何时:当您的系统有很多活动部件,并且您希望确保经过测试的更改能够奏效时。

重点:实施 GitOps 并考虑使用单体仓库(越早越好)

何时:您希望 DevOps 工作由开发团队完成

重点:使用“真正的”IaC工具(Pulumi Typescript/Python),完整的“操作方法”(见上文)文档

切勿:在没有充分理由的情况下,投入大量时间研究新技术。

总是

  • 将你的代码放在 Git 中
  • 监控基本要素:CPU、内存、磁盘、网络、应用日志、云费用
  • 高可用性架构师
  • 部署前进行测试

额外内容:CTO 接近生产环境时的示例设置

图片描述

2 个 AWS 账户

  • 一个用于开发和搭建
  • 另一个用于生产

Github 中的 Monorepo

  • 用于本地开发的 Docker-Compose

2 个基础设施即代码项目:'base' 和 'apps'

  • 基础资源 = 共享资源(例如,VPC、RDS、ECS 集群、EKS 集群)
  • apps = 特定于环境的资源(例如,Lambda 函数、ECS 服务、Kubernetes 命名空间)
  • 每个环境一个配置文件

GitHub Actions 工作流:开发工作流

  • 结账分支并本地开发+测试变更
  • 创建拉取请求:将拉取请求的“apps”环境部署到“开发”环境“base”上
  • 合并到主分支时:将“主”分支上的“apps”环境部署到“开发”环境“base”上。
  • 手动:从“主”分支部署到“测试”/“生产”环境“基础”分支

设置说明

  • 避免在条件资源部署的代码中提及环境名称。
  • 使用每个环境的配置文件来声明是否应该创建资源。
  • 可以使用 Terraform、Terragrunt、Pulumi、CDK 和其他 IaC 工具来实现。
  • 为了实现高可用性,生产环境中的每个工作负载应该有两个实例。

如果您想在您的初创公司中看到这种设置,请点击此处预约通话👈🏼

PS:我会不定期更新此页面,所以您可能想再次访问。


另一个福利:面向普通人的DevOps词典

学期 定义 工具
环境 整个系统的运行实例
CI(持续集成) 通过确定单一数据源(主分支/主分支),使开发人员能够协作。 Jenkins、GitHub Actions、GitLab CI
CD(持续交付) 创建一个可用于生产环境的制品(已测试、已标记) JFrog Artifactory、Nexus、AWS ECR
CD(持续部署) 所有可用的交付物(工件)都会自动部署。 ArgoCD、Jenkins、AWS CodeDeploy
监测/可观测性 从应用程序和基础架构中收集指标/跟踪/日志,对其进行分析和显示,并设置警报。 Prometheus、Jaeger、Elasticsearch、Fluentd、OpenTelemetry
基础设施 工作负载运行所依赖的资源、数据存储所依赖的资源以及网络流量所经过的资源。 服务器、数据库、网络路由器和交换机
云基础设施 与上述相同,但特指在云端。 AWS EC2、AWS RDS、GCP Compute Engine、Azure 虚拟机
计算和数据服务由远程地点提供,供您构建系统。 AWS、Azure、GCP
容器化与虚拟化 利用内核和操作系统特性创建虚拟机或隔离进程(又称运行容器)的技术 Docker、vSphere、KVM
秘密管理 存储和检索敏感配置信息(例如,令牌、密码) Hashicorp Vault、AWS Secrets Manager、SealedSecrets
配置管理 通常指为工作负载准备服务器(例如,创建目录和文件,启动进程) Ansible、Chef、Puppet
版本控制 以版本控制的方式(Git)保存代码 GitHub、GitLab
GitOps 构建该系统与 Git 中描述的方法相同。 Flux、ArgoCD、Jenkins
单体仓库 公司的所有代码都存放在一个 Git 仓库中。 NX,Turborepo
聚雷波 不同组件使用多个 Git 仓库
基础设施即代码 (IaC) 使用幂等代码和状态管理创建云基础设施 Terraform、Pulumi、CDK、Crossplane
部署 执行、运行或安装这些工件 ArgoCD、Jenkins、AWS CodeDeploy、脚本(Bash、Python 等)
编曲家 将工作负载动态分配给节点池 Kubernetes、Nomad、AWS ECS
身份验证与授权 确保每个人、每项工作或每项资源只能访问必要的内容(其他工作和资源)。 AWS IAM、OpenID、OpenVPN、Twingate、Istio
服务发现 利用 DNS 暴露可用工作负载 Consul、CoreDNS

获取更多实用建议

我会在“MeteorOps Newsletter”上分享一些实用的小技巧。
你可以在这里订阅👈🏼

文章来源:https://dev.to/meteorops/the-cto-devops-handbook-simple-principles-and-examples-2jcb