基于项目实际 k8s/ 目录 YAML 文件的完整学习指南。
📋 项目 k8s/ 目录实际文件清单
根据项目文档, k8s/ 目录包含以下文件:
Table
| 文件 | 作用 |
|---|---|
deploy.sh |
AKS 部署脚本 |
cleanup.sh |
AKS 清理脚本 |
namespace.yaml |
创建隔离的 Namespace |
configmap.yaml |
应用配置(非敏感) |
secret.yaml |
敏感数据(密码、Token) |
persistent-volumes.yaml |
持久化存储 |
backend-deployment.yaml |
后端 Deployment |
web-frontend-deployment.yaml |
Web 前端 Deployment |
auth-frontend-deployment.yaml |
认证前端 Deployment |
ingress.yaml |
Ingress 统一入口 |
horizontal-pod-autoscaler.yaml |
HPA 自动扩缩容 |
resource-quota.yaml |
资源配额限制 |
network-policy.yaml |
网络策略(安全隔离) |
monitoring.yaml |
监控配置 |
kustomization.yaml |
Kustomize 配置管理 |
🚀 完整学习步骤(基于项目实际文件)
前置准备:启动 minikube
powershell
# 1. 确保 Docker Desktop 已启动
# 2. 启动 minikube(给足够资源)
minikube start --driver=docker --memory=4096 --cpus=2
# 3. 验证
kubectl get nodes
步骤 1:逐文件学习 & 部署(推荐顺序)
进入项目 k8s 目录:
powershell
cd D:\k8sproject\kubernetes-microservices\k8s
1.1 Namespace(命名空间)
文件 :namespace.yaml
yaml
# 内容大概长这样
apiVersion: v1
kind: Namespace
metadata:
name: camp
学习要点 :Namespace 是 K8s 的资源隔离单位,所有 CAMP 资源都放在 camp 命名空间里。
powershell
kubectl apply -f namespace.yaml
kubectl get namespace
1.2 ConfigMap(配置数据)
文件 :configmap.yaml
学习要点:存放非敏感配置,如 API 地址、应用名称等。Pod 启动时会挂载这些配置为环境变量或文件。
powershell
kubectl apply -f configmap.yaml
kubectl get configmap -n camp
kubectl describe configmap -n camp
思考:为什么用 ConfigMap 而不是直接写在 Deployment 里?
1.3 Secret(敏感数据)
文件 :secret.yaml
学习要点:存放密码、JWT Token 等敏感信息,K8s 会自动 base64 编码存储。
powershell
kubectl apply -f secret.yaml
kubectl get secret -n camp
# 查看解码后的值
kubectl get secret <secret-name> -n camp -o jsonpath='{.data.password}' | base64 -d
⚠️ 重要:实际项目中,Secret 不应该直接提交到 Git,应该用 Sealed Secret 或 Vault 管理。
1.4 PersistentVolume(持久化存储)
文件 :persistent-volumes.yaml
学习要点:文件上传后需要持久保存,否则 Pod 重启数据就丢了。
powershell
kubectl apply -f persistent-volumes.yaml
kubectl get pvc -n camp
思考 :emptyDir(临时)和 PersistentVolumeClaim(持久)的区别?
1.5 Deployment(三个应用服务)
文件:
-
backend-deployment.yaml -
web-frontend-deployment.yaml -
auth-frontend-deployment.yaml
学习要点:Deployment 管理 Pod 的创建、更新、扩缩容。
powershell
# 逐个部署
kubectl apply -f backend-deployment.yaml
kubectl apply -f web-frontend-deployment.yaml
kubectl apply -f auth-frontend-deployment.yaml
# 查看状态
kubectl get deployment -n camp
kubectl get pods -n camp
kubectl describe pod <pod-name> -n camp # 排错用
重点观察:
-
replicas: 1--- 几个副本? -
image: ghcr.io/...--- 镜像从哪来? -
env:--- 环境变量怎么注入的? -
volumeMounts:--- 怎么挂载存储的?
1.6 Service(网络暴露)
⚠️ 注意:项目文档中没有单独的
service.yaml,Service 定义通常在 Deployment 文件里,或者有独立的 Service YAML。需要查看实际文件确认。
学习要点:Service 给 Pod 提供稳定的网络访问入口。
powershell
kubectl get svc -n camp
1.7 Ingress(统一入口)
文件 :ingress.yaml
学习要点:Ingress 是集群的"网关",把外部流量路由到不同的 Service。
powershell
# 先启用 minikube 的 Ingress 插件
minikube addons enable ingress
# 部署
kubectl apply -f ingress.yaml
# 查看
kubectl get ingress -n camp
访问方式:
powershell
# 获取 minikube IP
minikube ip
# 配置 hosts(把 <minikube-ip> 映射到 ingress 里的 host)
# 编辑 C:\Windows\System32\drivers\etc\hosts
# 添加: <minikube-ip> camp.local
然后访问:
- http://camp.local/auth → 认证页面

- http://camp.local/ → Web 前端

- http://camp.local/api → 后端 API

1.8 HPA(自动扩缩容)
文件 :horizontal-pod-autoscaler.yaml
学习要点:根据 CPU/内存使用率自动调整 Pod 数量。
powershell
kubectl apply -f horizontal-pod-autoscaler.yaml
kubectl get hpa -n camp
测试 HPA:
powershell
# 给 Pod 加压,观察是否会自动扩容
kubectl run -it --rm load-generator --image=busybox -n camp -- /bin/sh
# 在容器里执行:while true; do wget -q -O- http://camp-backend-service:8000; done
1.9 Resource Quota(资源配额)
文件 :resource-quota.yaml
学习要点:限制 Namespace 能使用的总资源,防止某个应用占满集群。
powershell
kubectl apply -f resource-quota.yaml
kubectl get resourcequota -n camp
1.10 Network Policy(网络策略)
文件 :network-policy.yaml
学习要点:控制 Pod 之间的网络访问,实现"零信任"安全。
powershell
kubectl apply -f network-policy.yaml
kubectl get networkpolicy -n camp
思考:如果不配置 Network Policy,集群内所有 Pod 都能互相访问,有什么风险?
1.11 Monitoring(监控)
文件 :monitoring.yaml
学习要点:配置 ServiceMonitor 等监控资源,配合 Prometheus 采集指标。
1.12 Kustomize(配置管理)
文件 :kustomization.yaml
学习要点:Kustomize 是 K8s 原生的配置管理工具,可以管理不同环境的配置差异。
powershell
# 一键部署所有资源
kubectl apply -k .
步骤 2:使用项目自带脚本部署
项目提供了 deploy.sh 脚本,可以直接用:
powershell
cd D:\k8sproject\kubernetes-microservices\k8s
# 查看脚本用法
./deploy.sh --help
# AKS 部署(如果你有 Azure 账号)
./deploy.sh
# 或者直接用 Kustomize
kubectl apply -k .
步骤 3:验证部署
powershell
# 查看所有资源
kubectl get all -n camp
# 查看 Pod 日志
kubectl logs -f deployment/camp-backend -n camp
kubectl logs -f deployment/camp-web-frontend -n camp
kubectl logs -f deployment/camp-auth-frontend -n camp
# 进入 Pod 内部调试
kubectl exec -it <pod-name> -n camp -- sh
# 测试 API
kubectl port-forward svc/camp-backend-service 8000:8000 -n camp
# 然后访问 http://localhost:8000/docs
步骤 4:清理资源
powershell
# 用项目自带的清理脚本
./cleanup.sh
# 或者手动删除
kubectl delete namespace camp
📚 学习检查清单
完成部署后,确认你理解了:
-
Namespace 的作用 --- 为什么把所有资源放在
camp命名空间? -
ConfigMap vs Secret --- 什么放 ConfigMap,什么放 Secret?
-
Deployment ---
replicas、strategy、resources各是什么意思? -
Service ---
ClusterIP、NodePort、LoadBalancer的区别? -
Ingress --- 没有 Ingress 怎么访问?有了 Ingress 流量怎么走的?
-
PersistentVolume --- 为什么上传的文件需要 PVC?不用会怎样?
-
HPA --- 自动扩缩容的触发条件是什么?
-
Resource Quota --- 和 Pod 的
resources.limits有什么区别? -
Network Policy --- 默认情况下 K8s 网络是全开放的吗?
-
Kustomize --- 和 Helm 相比有什么优缺点?
🎯 下一步挑战
-
修改副本数:把后端从 1 个副本改成 3 个,观察负载均衡
-
模拟故障:删除一个 Pod,看 Deployment 如何自动恢复
-
资源限制:给某个 Pod 设置很低的内存限制,观察 OOMKilled
-
配置热更新:修改 ConfigMap,看应用是否自动刷新(需要配合 volume 挂载)
-
切换到 Helm :用项目
helm/目录重新部署,对比两种方式的差异