- 教程
- 云原生
【免费下载链接】learn-to-cloud
A courseware built on the belief that anyone can learn foundational cloud engineering skills with the right guide and discipline
本篇文章带你解读开源课程 learn-to-cloud(位于仓库根目录的 docs/phase4/README.md 及其葡萄牙语版本 i18n/pt/docusaurus-plugin-content-docs/current/phase4/README.md)中的第 4 阶段内容:DevOps 基础。你将系统理解 DevOps 作为一种文化而非单一工具的本质,掌握 CI/CD、基础设施即代码(IaC)、容器化、容器编排与监控五大实践,并获得可复制的每周学习计划、上手任务、实战项目与能力验收清单。
DevOps 是什么:先理解文化,再学习工具
第 4 阶段课程开篇就点明了一个关键立场:DevOps 是"文化",而不是某个具体的工具或服务。它涵盖的是"把解决方案从实现阶段带到持续更新阶段"所涉及的一切,目标是让软件交付更高效、更可靠。
DevOps 并非云计算的专属概念,它在**本地数据中心(on-premise)和混合云(hybrid)**模型中同样适用。它也不局限于某个固定职位——虽然很多公司设有专职的 DevOps 工程师岗位,但课程明确指出:如果你的目标是成为 DevOps 工程师,本阶段只提供入门级介绍,后续还需要更深入的学习与实战积累。
课程建议学习者先阅读以下行业资料建立认知(此处仅列出名称,便于对照学习,不附外部链接):
- Microsoft 官方的《What is DevOps?》;
- AWS 官方的《What is DevOps?》;
- IBM 的《A complete guide to DevOps》;
此外还推荐了两本经典读物:小说形式的《The Phoenix Project》(以虚构故事讲解 DevOps 文化的重要性,读起来很有趣)和更接近教科书风格的《The DevOps Handbook》(主题相近、内容更系统)。
前置要求:从第 3 阶段无缝衔接
进入本阶段前,你需要已经完成:
- 第 2 阶段的版本控制学习(Git 相关基础,详见 i18n/pt/docusaurus-plugin-content-docs/current/phase2/README.md);
- 第 3 阶段云平台基础(含 Capstone 结业项目,见 docs/phase3/README.md);
- 若此前完成了 [Cloud Resume Challenge](云简历挑战赛),它会提前向你展示 DevOps 的概念,若还不熟悉,建议回头完成它再进入本阶段。
阶段路线图:5 周五大主题
课程为第 4 阶段规划了 5 个主题,每项大约投入 1 周时间:
| 顺序 | 主题 | 建议投入时间 |
|---|---|---|
| 1 | 使用 GitHub Actions 实现 CI/CD | 1 周 |
| 2 | 使用 Terraform 实现 IaC | 1 周 |
| 3 | 使用 Docker 进行容器化 | 1 周 |
| 4 | 使用 Kubernetes 进行容器编排 | 1 周 |
| 5 | 使用 Prometheus 进行监控 | 1 周 |
课程强调:这份时间线是应学习者要求添加的参考,你可以完全按自己的节奏安排。每一项 DevOps 实践都很重要,但以上 5 项是入门/初级岗位最常用的能力组合。仓库中英文版课程为每个主题准备了独立文档:1-containers.md、2-cicd.md、3-infrastructure-as-code.md、4-container-orchestration.md、5-monitoring.md,下文每个主题的操作细节均来自这些文档。
主题一:CI/CD 与 GitHub Actions——告别手动构建部署
在完成第 3 阶段后,你会遇到一个现实痛点:每次代码变更都要手动执行构建与推送命令,繁琐且容易出错。CI/CD(持续集成 / 持续部署)管线就是为了自动化这个过程:每次代码变更后自动完成构建、测试与部署。
常见的 CI/CD 工具有 Jenkins、GitHub Actions、GitLab CI 等,它们基于代码提交、Pull Request、定时事件等触发器自动执行任务并部署代码。课程推荐从 GitHub Actions 入手(配合仓库本身即托管在 GitHub 的工程实践,上手成本最低)。
基础 CI/CD 管线上手任务(针对上一阶段容器化的应用):
- 为你的容器化应用搭建一条基础 CI/CD 管线;
- 使用 GitHub Actions(或 Jenkins)自动完成:构建应用 → 运行测试 → 构建 Docker 镜像 → 推送镜像到容器仓库(如 DockerHub、AWS ECR、GCP GCR);
- 配置管线在代码提交到
main分支时自动触发; - 添加简单的通知机制,在部署成功或失败时提醒你。
可选进阶挑战:实现多环境部署管线——先部署到 staging 环境运行测试,通过后再提升(promote)到生产环境。
仓库本身就是一个持续交付的实例:根目录 Dockerfile 定义了开发、生产构建、多阶段服务的完整镜像流程,package.json 中的start、build、serve、deploy等 npm 脚本构成了站点构建与发布的基本工序,可以作为"把项目自动打包成可交付产物"的直观参照。
主题二:基础设施即代码(IaC)与 Terraform
IaC 允许你用代码而非手动点击控制台的方式来管理和供给基础设施,从而保证云资源管理的一致性、可重复性与可扩展性。Terraform 之所以流行,是因为它是**云平台无关(cloud-agnostic)**的——同一份配置可以部署到任意云厂商。
核心命令生命周期:
terraform init:初始化工作目录;terraform plan:预览将要执行的变更;terraform apply:真正创建资源;terraform destroy:销毁资源、完成清理。
基础 IaC 上手项目:
- 在你的系统上安装 Terraform;
- 编写 Terraform 配置文件,实现以下任选目标:在偏好的云平台上创建一台虚拟机;配置安全组以允许 SSH 访问;或向所选云厂商部署一个静态站点;
- 依次执行
terraform init→terraform plan→terraform apply完成部署; - 在云平台控制台验证资源确实已创建;
- 最后执行
terraform destroy清理资源。
可选进阶挑战:结合 GitHub Copilot 设计模块化 Terraform(复用第 2 阶段学到的 AI 协作能力):
- 将基础设施组织为可复用模块:VPC(公有/私有子网与路由)、Web 服务层(计算与负载均衡)、数据库层(托管数据库与备份配置)、安全层(安全组、IAM 角色、加密);
- 使用变量(variables)参数化配置;
- 创建模块输出(outputs)用于模块间通信;
- 实现后端状态(state)管理;
- 部署并验证资源,完成后销毁清理。
课程同时列出了若干自测问题供深入思考,例如:IaC 的收益是什么?Terraform 如何保证资源管理的幂等性?terraform state文件的用途?如何管理 API 密钥等敏感数据?plan与apply的区别?以及如何使用编码助手生成 IaC 模板、如何保证 AI 生成 IaC 的质量与安全——这些问题都指向"AI 辅助基础设施开发"这一现代 DevOps 实践。
主题三:Docker 容器化——从 Dockerfile 到镜像仓库
容器化是现代应用部署与管理的核心手段:它将软件、工具及其依赖打包成轻量、可移植的容器。相比虚拟机,容器在资源利用上更高效,并能在开发、测试、生产环境之间保持高度一致,同时简化部署与扩缩容,并提供应用间的隔离。
常见的容器化工具包括 Docker、Podman、containerd 等,课程以 Docker 为主线。
基础容器化项目 7 步走:
- 创建一个简单应用(或复用现有应用);
- 为应用编写 Dockerfile;
- 构建 Docker 镜像;
- 在本地运行容器并测试功能;
- 注册 DockerHub(或其他容器仓库)账号;
- 为镜像打标签(tag)并推送到仓库;
- 在另一台机器上拉取并运行镜像,验证可移植性。
容器仓库:需要理解镜像仓库(Container Registry)的概念,并至少实践一种主流仓库的推送流程:DockerHub、AWS ECR、Azure Container Registry、Google Container Registry。
仓库中的多阶段 Dockerfile 示例:本仓库根目录的 Dockerfile 就是一个完整的容器化范例,它展示了 Docusaurus 站点的多阶段构建策略:
# Stage 1: Base image. FROM node:lts as base ENV FORCE_COLOR=0 RUN corepack enable WORKDIR /opt/docusaurus # Stage 2a: Development mode. FROM base as dev EXPOSE 3000 CMD [ -d "node_modules" ] && npm run start --host 0.0.0.0 --poll 1000 || npm run install && npm run start --host 0.0.0.0 --poll 1000 # Stage 2b: Production build mode. FROM base as prod COPY . /opt/docusaurus/ RUN npm ci RUN npm run build # Stage 3a: Serve with `docusaurus serve`. FROM prod as serve EXPOSE 3000 CMD ["npm", "run", "serve", "--", "--host", "0.0.0.0", "--no-open"] # Stage 3b: Serve with Caddy. FROM caddy:2-alpine as caddy COPY --from=prod /opt/docusaurus/Caddyfile /etc/caddy/Caddyfile COPY --from=prod /opt/docusaurus/build /var/docusaurus这个示例直观体现了容器化的几个关键实践:多阶段构建(base → dev/prod → serve/caddy,避免把构建工具链带进运行镜像)、环境变量控制输出(FORCE_COLOR=0让日志更易读)、npm ci保证依赖安装的可复现性,以及镜像间通过COPY --from只传递构建产物。学习时可以对照这份真实配置理解每一行指令的作用。
进阶任务:以容器方式本地运行 GitHub MCP Server(将容器能力与 AI 工具链结合):
- 确保已安装 Docker Desktop 与 GitHub Copilot;
- 在 Docker Desktop 中安装官方 GitHub MCP Server;
- 创建 GitHub Personal Access Token 并提供给服务器;
- 在 VSCode 命令面板中执行
docker mcp gateway run启用 MCP Gateway; - 在 GitHub Copilot 中启用 Agent 模式;
- 查询自己的仓库并执行 GitHub 操作,完成探索与测试。
常见问题排查:参考 Docker 官方常见问题与解决方案文档,以及 Dockerfile 最佳实践文档(关注层数、缓存利用、安全扫描等主题)。
主题四:Kubernetes 容器编排——从 Pod 到 Service
学会单机容器化之后,自然要面对"如何编排大量容器"的问题,这正是 Kubernetes(常简称 K8s)的用武之地:它是开源容器编排平台,自动化容器的部署、扩缩容与管理,广泛应用于云原生环境,保证应用的高可用、可扩展与韧性。
为什么需要 Kubernetes?当应用复杂度上升后,手动管理容器变得困难,K8s 提供:
- 自动化部署与扩缩容:基于资源用量或自定义指标自动部署、扩缩容器;
- 自愈能力:重启失败容器、替换无响应容器、在健康节点上重新调度容器;
- 负载均衡:在容器间分发流量以保证高可用;
- 服务发现:自动为服务分配 DNS 名称与 IP;
- 声明式配置:用 YAML/JSON 清单定义应用的期望状态。
核心概念:
- 集群(Cluster):由管理集群并调度工作负载的Master 节点与运行容器化应用的Worker 节点组成;
- Pod:Kubernetes 中最小的可部署单元,可包含一个或多个容器,共享存储、网络与单一 IP;
- Service:将应用暴露到网络,常见类型有ClusterIP(集群内访问)、NodePort(在每个节点的特定端口暴露)、LoadBalancer(对接云厂商实现外部暴露);
- Deployment:声明式管理应用的期望状态,处理滚动更新、回滚与扩缩容;
- ConfigMap 与 Secret:分别以键值对形式存储配置数据与密码/API 密钥等敏感数据。
本地与云端环境:本地开发可用 Minikube(单节点集群)或 Kind(在 Docker 容器中运行集群);云端则推荐托管服务:AWS EKS、Azure AKS、Google GKE(课程还提供了一个用 Terraform 在 Azure AKS 上搭建最小 K8s 集群的视频示例,与主题二形成联动)。
常用命令:
# 查看集群信息 kubectl cluster-info # 列出集群中所有节点 kubectl get nodes # 部署应用 kubectl apply -f deployment.yaml # 查看运行中的 Pod kubectl get pods # 查看 Pod 日志 kubectl logs <pod-name> # 删除资源 kubectl delete -f deployment.yaml上手练习:安装 Minikube 或 Kind 后,用下面这份 YAML 创建 Deployment(2 个 nginx 副本):
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:latest ports: - containerPort: 80然后依次执行:
kubectl apply -f deployment.yaml kubectl get pods kubectl expose deployment nginx-deployment --type=NodePort --port=80最后在浏览器中通过 NodePort 访问应用。思考题包括:Pod 与容器的区别、kubectl apply与kubectl create的区别、如何扩缩容 Deployment、托管 K8s 服务的收益等。
主题五:监控与可观测性——Prometheus、Grafana 与 AI Agent
监控与可观测性是理解应用与基础设施健康、性能和可靠性的关键实践,尤其对分布式、动态、跨多服务运行的云原生应用至关重要:它们能帮助快速发现问题、缩短停机时间,为系统健康与用户体验提供可见性,支撑主动告警与排障,并通过识别瓶颈与故障支撑可扩展性与可靠性。
核心概念:
- Metrics(指标):关于系统的量化数据(CPU、内存、请求量等);
- Alerting(告警):基于指标阈值的自动化通知;
- Dashboards(仪表盘):指标的图形化展示,便于快速洞察;
- Instrumentation(插桩):通过代码或 exporter 暴露指标。
上手任务 1:搭建 Prometheus。创建最小配置prometheus.yml:
global: scrape_interval: 15s scrape_configs: - job_name: 'prometheus' static_configs: - targets: ['localhost:9090']用 Docker 安装 Prometheus:
docker run \ -p 9090:9090 \ -v /path/to/prometheus.yml:/etc/prometheus/prometheus.yml \ prom/prometheus之后按需把应用的指标端点加入static_configs。
上手任务 2:搭建 Grafana:
docker run -d --name=grafana -p 3000:3000 grafana/grafana访问http://localhost:3000(默认账号密码均为admin),添加 Prometheus 数据源(URL 填http://host.docker.internal:9090或http://localhost:9090),也可按需接入云厂商指标(如 AWS CloudWatch、Azure Monitor)。
上手任务 3:创建仪表盘。新建仪表盘并用 PromQL 查询添加面板(如up、http_requests_total),可视化应用或基础设施指标。
上手任务 4:为示例应用插桩。Node.js 应用可用prom-client暴露指标,Python 应用可用prometheus_client,随后把指标端点加入 Prometheus 配置并在 Grafana 中可视化。
上手任务 5:用 n8n 构建 AI Agent 实现自动化告警响应——这是本主题的亮点,把监控与 AI 代理工作流结合:
docker run -d -p 5678:5678 --name n8n n8nio/n8n:latest访问http://localhost:5678创建账号登录后,按以下步骤构建 Agent:
- 创建 Schedule 触发器(例如每 1–2 分钟);
- 查询 Prometheus API 获取特定指标;
- 添加 If 节点,判断指标是否超过阈值;
- 调用 LLM 分析异常,给出根因与修复建议;
- 通过邮件或 Slack 发送分析结果;
- (可选)添加自动修复步骤。
测试:故意向被监控应用施压(制造高流量或错误),验证 Agent 能否检测异常、分析根因并采取行动。
AI Agent 之所以能增强监控体系,是因为它能够:在无人工延迟的情况下即时响应告警;自动分析日志与指标定位根因;独立执行修复动作(重启服务、扩缩资源、回滚部署);从事件中学习改进后续响应;把团队从重复排障中解放出来,聚焦长期可靠性。
阶段验收:结束时你必须掌握的能力
课程为本阶段设定了明确的能力验收标准:
- 能够解释每一项 DevOps 实践:它们为什么重要、各自做什么、每项实践最流行的工具有哪些;
- 在 GitHub 上拥有个人项目,且至少 2 个项目满足以下要求:
- 配置了 CI/CD 管线;
- 每个项目都有 IaC 文件;
- 每个项目都实现了监控,并能读懂日志与指标数据;
- 当项目出问题时,知道如何排查解决。
进阶路线:值得关注的 DevOps 认证
课程为想继续深入的学习者推荐了两条认证方向(此处仅列名称,供检索对照):
- AWS Certified DevOps Engineer – Professional;
- Microsoft Certified: DevOps Engineer Expert。
如何自测:把 AI 当成面试官
课程建议用 AI 助手(如 ChatGPT、Claude、Google Gemini)检验理解程度:让它扮演面试官,一次问一个问题、不立即给答案、针对回答给出反馈并引导修正,每个答案后补充真实案例。可以这样开场:
I'm learning about containers and Docker. I'd like you to act as an interviewer: - Ask me questions one at a time about containerization concepts - Don't provide the answers immediately - Give me feedback on my responses - If I'm incorrect, guide me toward the right answer - Share relevant real-world examples after each answer Can we start?小技巧:把上下文告诉 AI,例如"我正在用 Docker 容器化一个 Node.js 应用,请围绕这个场景提问",能让提问更贴近实战。仓库英文版各主题文档(1-containers.md、2-cicd.md、3-infrastructure-as-code.md、4-container-orchestration.md、5-monitoring.md)都附带了完整的自测问题清单与主题完成清单,建议逐项对照打勾。
结语
learn-to-cloud 第 4 阶段以"DevOps 是一种文化"为起点,用 5 周时间串起 CI/CD、IaC、容器化、容器编排与监控五大实践,并以"每个项目都要有管线、IaC 和监控"作为硬性验收标准,确保学习者不只"知道"而是真正"做到"。完成本阶段后,你便可以带着这套自动化、可观测的工程能力进入第 5 阶段——云安全(Securing Your Cloud Applications),把安全实践嵌入到你已构建的 DevOps 体系中。
- 教程
- 云原生
【免费下载链接】learn-to-cloud
A courseware built on the belief that anyone can learn foundational cloud engineering skills with the right guide and discipline
相关推荐
learn-to-cloud 第 4 阶段:DevOps 基础——从 CI/CD 到 Kubernetes 与可观测性的完整学习路线
learn to cloud 第 4 阶段:DevOps 基础——从 CI/CD 到 Kubernetes 与可观测性的完整学习路线 本篇技术指南以 learn
教程云原生learn-to-cloud 第四阶段学习指南:掌握 DevOps 基础(容器化、CI/CD、Terraform、Kubernetes 与可观测性)
learn to cloud 第四阶段学习指南:掌握 DevOps 基础(容器化、CI/CD、Terraform、Kubernetes 与可观测性) 本指南对应
教程云原生learn-to-cloud 阶段四:DevOps 基础——从 CI/CD、IaC 到容器与监控的完整学习路线
learn to cloud 阶段四:DevOps 基础——从 CI/CD、IaC 到容器与监控的完整学习路线 本指南对应 learn to cloud 开源课
教程云原生
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考