跳转至

学习历程

这个网站的内容按主题整理;这一页按学习的顺序记录每个阶段(Phase)做了什么、得出了什么结论、内容整理到了哪个主题页。

  • 每个 Phase 一个目录(01-network/ 等),用 Terraform 建、验证、再 destroy
  • 详细的过程记录(日期、命令、报错原文)在仓库的 notes/ 里,不放网站

一览

Phase 内容 主题页
0 环境准备 安全、费用护栏
1 网络(VCN) 网络、Terraform
2 Compute + Ansible 计算和负载均衡
3 Module / Remote State / import Terraform
4 3 层架构 网络、计算和负载均衡
5a 静态检查(tflint / checkov) Terraform
5b Resource Manager Terraform
6 OKE(Kubernetes) OKE
7 网站发布 + CI/CD CI/CD
8 网站自动停止 费用护栏
9 安全・运维 安全、网络
10 同一个网站放到 AWS AWS 对照、CI/CD
11 Kubernetes 基础 Kubernetes、OKE

Phase 0:环境准备

本机装 Terraform,建 API Key、Compartment tf-lab、Budget 告警。规则从第一天定下:只用 Always Free,区域只用大阪。

Phase 1:网络

最小的网络(VCN / Internet Gateway / Route Table / Security List / Subnet)。重点不是网络本身,而是熟悉 Terraform:state 是什么、plan 的符号、在 Console 手动改了之后(drift)Terraform 怎么处理。

Phase 2:Compute + Ansible

在 Phase 1 的网络里建 A1 VM 跑 nginx。所在网络屏蔽了 22 端口 → 改用 Cloud Shell 的 private network 登录。一开始用 cloud-init 装 nginx,后来改成 cloud-init 只做最小初始化、nginx 交给 Ansible(Phase 2.5)。

Phase 3:Module / Remote State / import

解决到 Phase 2 为止暴露的问题:state 只在一台 PC 上 → 放进 Object Storage;复制粘贴代码 → module + for_each;Console 手动建的资源 → import。

Phase 4:3 层架构

LB(public subnet)→ 私有 VM ×2 → Autonomous DB。NAT Gateway / Service Gateway 按用途分开出口,SSH 走 OCI Bastion,NSG 按层建、互相引用。

事后发现的问题

Security List 放行了整个 VCN 的 22 端口,和 NSG 取并集,"SSH 只能从 Bastion 进"其实不成立。当时只做了正向测试。代码已修正(未重新部署)。详见 网络设计。

Phase 5a:静态检查

对 Phase 4 的代码跑 tflint / checkov,按指出的问题改(IMDS v2、传输中加密),有意不改的写 skip 注释留理由。apply 时两台 VM 同时重启导致 502 → 学到"in-place ≠ 不停机"。

Phase 5b:Resource Manager

用 OCI 托管的 Terraform(Resource Manager)跑同一套代码:Stack、Job(plan / apply / destroy)、drift 检测。

Phase 6:OKE

OKE Basic cluster + A1 worker ×2,API endpoint 放私有 subnet、kubectl 在 Cloud Shell 执行。部署 nginx + Service LB,做自愈 / 扩容 / drain 实验。学到 K8s 间接建的 LB 不在 Terraform 的 state 里,删除顺序很重要。

Phase 7:网站发布 + CI/CD

这个网站本身:MkDocs(中文 + 日文)→ Object Storage 公开 bucket。GitHub 在所在网络被屏蔽 → 用 OCI DevOps:push → Build Pipeline 检查、构建、上传。

Phase 8:网站自动停止

公开网站被大量访问会产生费用 → Monitoring Alarm(请求数)和 Budget(实际费用)触发 Functions,把 bucket 改成不公开。端到端测试:约 3.5 分钟后自动停止。

Phase 9:安全・运维

只有 Service Gateway 的私有 VM(完全出不了公网);Vault 管密钥和 Secret,VM 用 Instance Principal 只能读被授权的 Secret;访问日志 / Audit → Connector Hub → CMK 加密的归档 bucket;Flow Logs 在 Logging Search 里看。

Phase 10:同一个网站放到 AWS

Route 53 注册域名、ACM、CloudFront + 私有 S3(OAC)、S3 backend + use_lockfile;OCI DevOps 的 build 同时发布到 AWS(Access Key 放 OCI Vault);CloudFront 固定价格方案的 Free 档。AWS 侧唯一的费用是域名(一年 $16 + 税)。

Phase 11:Kubernetes 基础

先讲课再动手:第 1〜8 课讲容器、K8s 架构、核心对象、网络、配置和存储、可靠性、权限和运维。动手部分复用 06-oke/:A1 容量不足重试后建好 OKE,确认了 Service LB 的 listener 是 TCP、健康检查是 kube-proxy 的 :10256/healthz。