可以直接执行的操作手册
好,那第一周从 Day 1 开始,我来给你一个可以直接执行的操作手册。
第一周:K8s 从零实操
Day 1:环境搭建,跑通第一个服务
bash
# 第一步:安装工具(Mac) brew install minikube kubectl # Windows 用户用这个 # choco install minikube kubernetes-cli # 第二步:启动本地 K8s 集群 minikube start --cpus=2 --memory=4096 # 验证成功 kubectl get nodes # 看到这个就对了: # NAME STATUS ROLES AGE VERSION # minikube Ready control-plane 1m v1.28.0 # 第三步:部署你的第一个服务(用现成的 nginx 练手) kubectl create deployment nginx --image=nginx kubectl expose deployment nginx --port=80 --type=NodePort # 访问它 minikube service nginx --url # 浏览器打开输出的地址,看到 nginx 欢迎页就成功了 # 第四步:看看刚才发生了什么 kubectl get deployments kubectl get pods kubectl get services
今天目标:看到 nginx 页面,建立信心。
Day 2-3:部署自己的服务
先写一个最简单的 Python 服务:
python
# app.py
from fastapi import FastAPI
app = FastAPI()
@app.get("/health")
def health():
return {"status": "ok", "service": "fleet-api"}
@app.get("/vehicles/{vid}")
def get_vehicle(vid: str):
return {"id": vid, "battery": 85, "online": True}
dockerfile
# Dockerfile FROM python:3.11-slim WORKDIR /app RUN pip install fastapi uvicorn COPY app.py . CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "8080"]
bash
# 用 minikube 自带的 Docker(关键!不然镜像找不到) eval $(minikube docker-env) docker build -t fleet-api:v1 .
然后写 K8s 配置文件:
yaml
# fleet.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: fleet-api
spec:
replicas: 2
selector:
matchLabels:
app: fleet-api
template:
metadata:
labels:
app: fleet-api
spec:
containers:
- name: fleet-api
image: fleet-api:v1
imagePullPolicy: Never # 用本地镜像
ports:
- containerPort: 8080
resources:
requests:
memory: "64Mi"
cpu: "100m"
limits:
memory: "128Mi"
cpu: "200m"
readinessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 5
periodSeconds: 3
---
apiVersion: v1
kind: Service
metadata:
name: fleet-api
spec:
selector:
app: fleet-api
ports:
- port: 80
targetPort: 8080
type: NodePort
bash
kubectl apply -f fleet.yaml kubectl get pods # 等 STATUS 变成 Running minikube service fleet-api --url # 访问你自己的服务 curl <url>/health curl <url>/vehicles/v001
Day 2 目标:自己的服务跑在 K8s 上。
Day 3:加上 ConfigMap 和 Secret:
yaml
# config.yaml apiVersion: v1 kind: ConfigMap metadata: name: fleet-config data: LOG_LEVEL: "INFO" MAX_VEHICLES: "1000" --- apiVersion: v1 kind: Secret metadata: name: fleet-secret type: Opaque stringData: DB_PASSWORD: "my-secret-password"
yaml
# 在 Deployment 的 containers 里加上:
env:
- name: LOG_LEVEL
valueFrom:
configMapKeyRef:
name: fleet-config
key: LOG_LEVEL
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: fleet-secret
key: DB_PASSWORD
Day 4-5:故障排查演练
这是面试最爱考的,每个故障练一遍,建立肌肉记忆:
bash
# 故障一:ImagePullBackOff # 制造故障 kubectl set image deployment/fleet-api fleet-api=fleet-api:v999 kubectl get pods # 看到 ImagePullBackOff # 排查 kubectl describe pod <pod-name> # 看 Events 段,会看到: # Failed to pull image "fleet-api:v999": not found # 恢复 kubectl set image deployment/fleet-api fleet-api=fleet-api:v1 # 故障二:OOMKilled # 把内存限制改得极小 kubectl set resources deployment/fleet-api \ --limits=memory=1Mi kubectl get pods # 看到 OOMKilled 或 CrashLoopBackOff # 排查 kubectl describe pod <pod-name> # 看到:Last State: Terminated, Reason: OOMKilled # 恢复 kubectl set resources deployment/fleet-api \ --limits=memory=128Mi # 故障三:服务不通 # 把 Service 的 selector 改错 kubectl edit service fleet-api # 把 app: fleet-api 改成 app: wrong-label kubectl get endpoints fleet-api # 看到 ENDPOINTS 是 <none>,说明没有 Pod 匹配 # 故障四:手动删 Pod,验证自愈 kubectl delete pod <pod-name> kubectl get pods -w # 看到新 Pod 立刻被创建
Day 6-7:滚动更新和 HPA
bash
# 滚动更新 # 修改 app.py,改个返回值,重新构建 eval $(minikube docker-env) docker build -t fleet-api:v2 . kubectl set image deployment/fleet-api fleet-api=fleet-api:v2 kubectl rollout status deployment/fleet-api # 看更新过程 kubectl rollout history deployment/fleet-api # 看版本历史 # 出问题了,回滚 kubectl rollout undo deployment/fleet-api kubectl rollout status deployment/fleet-api # 确认回滚完成 # HPA 自动扩缩容 minikube addons enable metrics-server # 先启用指标采集 kubectl autoscale deployment fleet-api \ --min=2 --max=10 --cpu-percent=50 kubectl get hpa # 查看 HPA 状态
第一周结束时你应该能做到
✅ 本地搭好 K8s 环境
✅ 把自己写的服务部署上去
✅ 用 ConfigMap/Secret 管理配置
✅ 看到 CrashLoopBackOff / OOMKilled 知道怎么排查
✅ 能做滚动更新和回滚
✅ 理解 HPA 自动扩缩容
面试里可以说:“我在本地搭过完整的 K8s 环境,部署过自己的服务,模拟过各种故障场景的排查和恢复。”
第一周搞定后,第二周 FastAPI + Terraform 按之前的计划走。
你现在机器是 Mac 还是 Windows?安装环节有什么问题随时来问。
