DevOps 与云基础设施
本技能面向 DevOps、云基础设施与平台工程,提供云平台、基础设施即代码以及 DevOps 实践的综合参考,适用于在涉及 AWS、GCP、Azure、Kubernetes、Terraform、CI/CD 流水线或基础设施即代码的工作场景中使用。
云平台
AWS
计算方面,列出 EC2 实例类型分类(通用型 t3、m6i、m7g(ARM);计算优化型 c6i、c7g;内存优化型 r6i、x2idn;存储优化型 i3、d3),并给出通过 aws autoscaling create-auto-scaling-group 创建自动伸缩组的命令示例。
无服务器方面,提供 TypeScript 编写的 Lambda 处理器示例(使用 APIGatewayProxyHandler,返回状态码 200)。
存储方面,以表格对比服务与用途、持久性:S3 用于对象存储,持久性 99.999999999%;EBS 用于块存储(EC2),持久性 99.999%;EFS 为共享文件系统,持久性 99.999999999%;FSx 面向 Windows/Lustre,持久性 99.999999999%。
GCP
关键服务示例包括:通过 gcloud container clusters create 创建启用自动伸缩的 GKE 集群(可指定区域、节点数、机器类型、最小/最大节点数);通过 gcloud run deploy 部署 Cloud Run 无服务器容器(指定镜像、托管平台、区域及是否允许未认证访问)。
Azure
关键服务示例包括:通过 az aks create 创建 AKS 集群(指定资源组、名称、节点数、监控插件、生成 SSH 密钥);通过 func init 与 func new 创建 TypeScript Azure Functions(HTTP trigger 模板)。
Kubernetes
核心概念部分提供 Deployment 的 YAML 示例,包含副本数、标签选择器、容器镜像、端口、资源 requests/limits(内存 128Mi/256Mi,CPU 250m/500m)、存活探针与就绪探针(含路径、端口、初始延迟与周期)。
Service 类型部分给出 ClusterIP(内部)与 LoadBalancer(外部)两种 Service 的 YAML 示例。
Ingress 部分提供带 TLS 的 Ingress 示例,使用 nginx ingress class 注解与 cert-manager 的 letsencrypt-prod cluster-issuer,并在 spec.tls 中配置主机与 secretName。
Helm 部分提供 values.yaml 示例,包含 replicaCount、image(repository、tag、pullPolicy)、service、ingress、resources 等字段。
Terraform
提供 AWS 基础设施的 main.tf 示例:声明 aws provider 版本约束(~> 5.0)、使用 S3 作为后端并指定 bucket/key/region、定义 provider 区域;通过 terraform-aws-modules/vpc/aws(版本 5.0.0)创建 VPC,配置名称、CIDR、可用区、私有/公有子网、NAT 网关;通过 terraform-aws-modules/eks/aws(版本 19.0.0)创建 EKS 集群,指定集群名称、版本、VPC 与子网,并配置托管节点组(min/max/desired 与实例类型)。
变量与输出部分提供 variables.tf(含 aws_region 默认值与 environment 的校验条件:仅允许 dev、staging、prod)与 outputs.tf(输出集群 endpoint 与名称)。
CI/CD 流水线
GitHub Actions
提供 .github/workflows/deploy.yml 示例,触发条件为 main 分支的 push 与 pull_request;定义 test、build-and-push、deploy 三个作业:test 作业使用 actions/checkout@v4 与 actions/setup-node@v4(Node 20、npm 缓存),执行 npm ci、npm test、npm run build;build-and-push 依赖 test,仅在 push 时运行,登录 ghcr.io 并使用 docker/build-push-action@v5 以 commit SHA 为标签构建推送镜像;deploy 依赖 build-and-push,仅在 main 分支运行,使用 azure/k8s-deploy@v4 部署 k8s/ 下的清单并指定镜像。
GitLab CI
提供 .gitlab-ci.yml 示例,包含 test、build、deploy 三个阶段:test 使用 node:20 镜像并缓存 node_modules;build 使用 docker:24 与 docker:24-dind 服务,登录并构建推送镜像,仅 main 分支;deploy 使用 bitnami/kubectl:latest,通过 kubectl set image 更新部署,仅 main 分支,环境名为 production。
Docker
多阶段构建示例:构建阶段使用 node:20-alpine,复制 package 文件、npm ci、复制源码、npm run build;生产阶段同样使用 node:20-alpine,创建用户与组(nodejs/nextjs,UID/GID 1001),从构建阶段复制 dist 与 node_modules 并变更属主,切换 USER nextjs,暴露 3000 端口,CMD 运行 node dist/main.js。
Docker Compose 示例:定义 app、db(postgres:16-alpine)、redis(redis:7-alpine)三个服务;app 通过 build 构建、映射端口、设置 DATABASE_URL 与 REDIS_URL 环境变量,依赖 db(service_healthy)与 redis(service_started),并配置 healthcheck;db 设置用户、密码、数据库名与数据卷,配置 pg_isready 健康检查;声明 postgres_data 与 redis_data 数据卷。
监控与可观测性
Prometheus 配置示例:全局 scrape_interval 为 15s,定义 kubernetes-pods 抓取任务,通过 kubernetes_sd_configs(role: pod)与 relabel_configs 依据 pod 注解 prometheus_io_scrape 过滤。
应用指标示例(TypeScript):使用 prom-client 的 Counter 与 Histogram 定义 http_requests_total(标签 method、path、status)与 http_request_duration_seconds(标签 method、path,分桶 0.1、0.5、1、2、5),并注册到 Registry。
安全最佳实践
密钥管理:提供 AWS Secrets Manager 的 create-secret 命令示例(名称 prod/db-credentials 与 JSON 密钥串);提供 Kubernetes external-secrets 的 ExternalSecret 示例,引用 ClusterSecretStore(aws-secrets)并映射 username 字段。
网络策略:提供 NetworkPolicy 示例,通过 podSelector 选择 app: api 的 Pod,声明 Ingress 与 Egress 策略类型,入站允许来自 app: frontend 的 TCP 8080,出站允许指向 app: database 的 TCP 5432。
检查清单
部署前:基础设施即代码已审查;密钥存放于密钥管理器(而非 env 文件);已设置资源限制;已配置健康检查;已启用日志与监控;已定义网络策略;已具备备份策略。
生产就绪:多可用区部署;已配置自动伸缩;已启用 SSL/TLS;已配置 WAF 规则;已测试灾难恢复;已编写运行手册(Runbooks)。