FDE Training · Module 02

02

云原生与基础设施

模块 02 · 云原生与基础设施部署

本章目标:掌握"客户现场交付"的核心能力——把装好的东西真正跑起来、连起来、升级起来、出问题能救回来。这是 FDE 和高谈阔论者最大的区别:你能上手把环境端起来。


2.1 云平台(至少精通一个)

2.1.1 挑一个,别贪多

  • AWS / Azure / 阿里云 / 腾讯云,精通一个,其他约等于换皮。
  • 所谓"精通",最低标准是能回答这 5 件套:
名词 一句话人话
VPC 你的私有网络,隔离的"小区"
安全组 小区进出门口的名册,谁放行谁拦截
IAM 车钥匙分配系统,决定谁能用哪个车的哪个功能
对象存储(S3/OSS) 无限大的文件仓库,放文档、图片、模型切片
KMS 保险箱,存加密钥匙,别人拿不到明文

2.1.2 客户现场最常见的坑(提前知道)

  • 客户云环境和你的测试云环境网络不通:先看安全组/网络 ACL/对等连接/白名单。
  • IAM 权限太细:客户给的最小权限经常"够看不够用",要提前要全一点。
  • 对象存储权限:私有桶默认不能公网读,接口要带签名。

2.2 Docker:把服务打包成"一键可跑"

2.2.1 一个像样的 Dockerfile

# 多阶段构建:小镜像、跑得快
FROM python:3.11-slim AS builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

FROM python:3.11-slim
WORKDIR /app
COPY --from=builder /usr/local/lib/python3.11/site-packages /usr/local/lib/python3.11/site-packages
COPY . .
ENV PYTHONUNBUFFERED=1
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8080"]

要点:用基础镜像、分层缓存、non-root 用户、小体积;别 COPY . . 一把梭把 token 打进镜像。

2.2.2 命令行必须熟练

docker build -t my-app:v1 .
docker run -d -p 8080:8080 --name review my-app:v1
docker logs -f review
docker exec -it review bash       # 进容器排障
docker ps -a                      # 看容器和状态(Exited/OOM)
docker compose up -d              # 多服务一把起

2.2.3 容器安全底线

  • 不用 root 运行:USER appuser。
  • 不把密钥写进镜像:用环境变量/挂载/KMS。
  • 定期更新基础镜像,扫描漏洞(trivy 等)。
  • 理解镜像层:每层是一层叠,别放敏感信息。

2.3 Kubernetes(K8s):能写 yaml、能排障

2.3.1 一个最小的 Deployment + 健康检查

apiVersion: apps/v1
kind: Deployment
metadata:
  name: review-api
  labels: { app: review-api }
spec:
  replicas: 2
  selector:
    matchLabels: { app: review-api }
  template:
    metadata:
      labels: { app: review-api }
    spec:
      containers:
        - name: review-api
          image: my-registry/review-api:v1.2.3
          ports: [ { containerPort: 8080 } ]
          resources:
            requests: { cpu: "500m", memory: "512Mi" }
            limits:   { cpu: "1000m", memory: "1Gi" }
          livenessProbe:
            httpGet: { path: /api/health, port: 8080 }
            initialDelaySeconds: 5
            periodSeconds: 10

记牢这四个词:Pod(最小单位)、Deployment(管理副本)、Service(统一入口)、ConfigMap/Secret(配置与密钥)。

2.3.2 排障三连(忘掉重装,先看状态)

kubectl get pods                          # 看 Pod 状态(Pending/CrashLoop/OOM)
kubectl describe pod <name>               # 看事件、资源、被拒原因
kubectl logs -f <name> --previous         # 看崩溃前一次日志
kubectl exec -it <name> -- sh             # 进容器看环境

常见三问三答:

  • Pending:资源不够 / nodeSelector 匹配不上 / PVC 起不来。
  • ErrorImagePull:镜像地址错 / 私有仓库没配 secret / 标签不存在。
  • CrashLoopBackOff + OOMKilled:内存超限,调 limits 或应用本身内存泄漏。

2.3.3 网络策略 & 资源限制

  • 网络策略(NetworkPolicy):默认最小放开,只允许需要的服务互相访问。
  • 资源限制(requests/limits):一定要设,否则一个模型服务能吃掉整台机器。

2.4 IaC:基础设施即代码(可复现客户环境)

  • Terraform / CloudFormation:把"机器、网络、存储"用代码声明,客户环境能一键重建、能 review、能审计。
  • 为什么 FDE 要学:你不想在客户那边手点半小时控制台造环境;写一份 tf,所有环境一致。
# example.tf(示意)
resource "aws_instance" "review_app" {
  ami           = "ami-xxxxx"
  instance_type = "t3.medium"
  security_groups = [aws_security_group.app_sg.name]
  tags = { Name = "review-app" }
}

要点:状态文件(state)别丢,Terraform 依赖它对比变更;加密存储 state。


2.5 CI/CD:发布可回滚的流水线

  • GitHub Actions / GitLab CI / Jenkins,会一个,理解概念即可。
  • FDE 关心的核心:
    1. 代码提交 → 自动构建镜像 → 推到私有仓库 → 自动部署。
    2. 可回滚:保留上一版镜像,出问题一条命令回退。
    3. 环境分离:dev → staging → prod,别一提交就上生产。
# .github/workflows/release.yml(示意)
name: build-and-deploy
on:
  push:
    branches: [ main ]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: docker build -t my-registry/review-api:${{ github.sha }} .
      - run: docker push my-registry/review-api:${{ github.sha }}
      # ... deploy step

2.6 网络:客户现场排障超高频

2.6.1 必须懂的基础

  • TCP/IP / DNS / 代理 / 内网穿透 / 防火墙 / 负载均衡。
  • 客户最常见的"我的 AI 连不通模型服务",八成是网络或权限,三成是配置。

2.6.2 排障命令背下来

ping <host>           # 通不通
curl -v <url>         # 看 HTTP 详情、DNS、握手、跳转
nslookup <域名>       # DNS 解析对不对
telnet <host> <port>  # 端口通不通
ss -tunlp             # 本地监听端口
traceroute <host>     # 走到哪一步断了

2.6.3 三个高频坑

  1. DNS:客户内网域名解析不了外部模型 API → 检查 /etc/resolv.conf、内网 DNS、是否需要走代理。
  2. 代理:客户走 HTTP 代理访问外网,你的服务要配 HTTPS_PROXY。
  3. 双网卡/网关:应用起不来、外连不通,先看路由。内网穿透(如 frp/ngrok)是客户隔离环境调试的救命工具。

2.7 操作系统:Linux 深度运维(重点)

2.7.1 现场必会命令

journalctl -u my-service -f   # systemd 服务日志
df -h / free -h               # 磁盘 / 内存
top / htop                    # CPU 内存占用
lsof -i:8080                  # 谁占用了端口
systemctl status/restart my-service
ps aux | grep <name>          # 找进程

这几条在 FDE 驻场时各管一摊:客户说"服务起不来/内存打满/OOM 了",先 systemctl status 看服务状态、journalctl -u xxx -f 跟日志;客户说"端口被占/连不上",用 ss -tunlp 加 lsof -i:8080 定位谁占了端口;要限制容器吃资源就碰 cgroup(docker run --memory、K8s 的 requests/limits 本质也是给它画像);要放行或拦流量就上 iptables/防火墙规则。这六条是驻场第一天就该焊在手上的肌肉记忆,出问题先扫一遍状态、别急着重装。系统化的 Linux 命令与运维,回 tech-linux.html 补。

2.7.2 看内核/系统报错

  • /var/log/syslog、dmesg(内核日志)、/var/log/messages。
  • 模型服务 OOM:看 dmesg 里的 killed process。
  • Windows 服务器:会看事件查看器、IIS 日志即可,FDE 主力还是 Linux。

2.7.3 systemd 一个服务示例

# /etc/systemd/system/review-api.service
[Unit]
Description=Review API
After=network.target

[Service]
User=appuser
WorkingDirectory=/opt/review
ExecStart=/opt/review/.venv/bin/uvicorn main:app --host 0.0.0.0 --port 8080
Restart=always
EnvironmentFile=/etc/review-api.env

[Install]
WantedBy=multi-user.target

2.8 模块练习

  1. 用 Dockerfile 构建一个 FastAPI 服务镜像(非 root、多阶段),docker run 跑通 /api/health。
  2. 写一份最小 K8s Deployment + Service + livenessProbe,手动制造一次 OOM 并完整排障到恢复。
  3. 用 Terraform 在云上(minikube/本地模拟也行)定义一台机器 + 一个安全组,apply 一遍。
  4. 搭一个 GitHub Actions 流水线:push 触发构建镜像并打 tag。
  5. 模拟一次"客户内网访问不了外网模型 API"的排障,用 curl/nslookup/traceroute 逐步定位到 DNS/代理问题。

2.9 本章面试题

  1. "Docker 和虚拟机区别?" → 答:Docker 共享宿主机内核,只隔离进程/文件/网络/资源视图,更轻、秒级启动;虚拟机有独立内核 + 硬件虚拟化,隔离更强但更重。
  2. "K8s 里一个 Pod 一直 CrashLoopBackOff 你怎么排查?" → 答:kubectl describe 看事件(是否 OOM、镜像拉取失败)→ kubectl logs --previous 看崩溃前日志 → 进容器手动跑命令验证 → 定位代码/配置/资源问题修掉。
  3. "为什么要 IaC(Terraform)?" → 答:环境可复现、可 review、可审计,避免手点控制台导致的环境漂移;客户环境出问题能一键重建到已知好状态。
  4. "客户内网连不上你的模型服务,你先查什么?" → 答:先确认是网络还是配置:用 ping/telnet 探连通性 → curl -v 看 DNS 和握手 → 检查防火墙/安全组/代理/路由 → 对照日志确认服务本身活着。网络问题别瞎升级服务。
  5. "容器镜像安全你注意什么?" → 答:不用 root 跑、密钥不入镜像(用 env/k8s secret/KMS)、用基础镜像并定期更新、扫描漏洞、私有仓库、staging 与 prod 隔离。

2.10 小结

  • 云讲"精通一个横向套用":VPC/安全组/IAM/存储/KMS 五件套先说人话。
  • Docker 打包 + K8s 编排 + 排障三连是客户交付的常态功。
  • IaC + CI/CD 让环境可复现、可回滚。
  • 网络排障 + Linux 运维是现场最高频的"救火"能力。
  • 下一章进入 AI 核心第一站:怎么把大模型部署起来、调起来。

延伸阅读 · 去本站教学页补齐基础

本页由 FDE 培养课程文档生成,完整课程见 FDE 培养 · 课程总览。