基于项目实际 k8s/ 目录 YAML 文件的完整学习指南。

基于项目实际 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

然后访问:


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 --- replicasstrategyresources 各是什么意思?

  • Service --- ClusterIPNodePortLoadBalancer 的区别?

  • Ingress --- 没有 Ingress 怎么访问?有了 Ingress 流量怎么走的?

  • PersistentVolume --- 为什么上传的文件需要 PVC?不用会怎样?

  • HPA --- 自动扩缩容的触发条件是什么?

  • Resource Quota --- 和 Pod 的 resources.limits 有什么区别?

  • Network Policy --- 默认情况下 K8s 网络是全开放的吗?

  • Kustomize --- 和 Helm 相比有什么优缺点?


🎯 下一步挑战

  1. 修改副本数:把后端从 1 个副本改成 3 个,观察负载均衡

  2. 模拟故障:删除一个 Pod,看 Deployment 如何自动恢复

  3. 资源限制:给某个 Pod 设置很低的内存限制,观察 OOMKilled

  4. 配置热更新:修改 ConfigMap,看应用是否自动刷新(需要配合 volume 挂载)

  5. 切换到 Helm :用项目 helm/ 目录重新部署,对比两种方式的差异

相关推荐
码上上班3 小时前
docker课程
java·docker·容器
取谖慕12.7 小时前
Docker容器从入门到精通
docker·容器·eureka
人间凡尔赛9 小时前
K8s 十年之变:从 Cloud Native 到 AI Native,2026 年后端架构的范式革命
后端·云原生·架构
名字还没想好☜9 小时前
Kubernetes CrashLoopBackOff 排查全流程:从 describe 到日志到 exit code
运维·docker·云原生·容器·kubernetes
冰封之寂10 小时前
Docker 部署与基础命令详解:从安装到容器管理全流程指南
linux·运维·docker·容器
Cloud云卷云舒11 小时前
AI Agent记忆系统:分层记忆体系的技术架构与实践
云原生·ai-native·haishandb
Ulyanov11 小时前
Python雷达电子对抗仿真引擎(一):打破单体瓶颈,构建微服务与ECS架构的顶层设计
开发语言·python·微服务·云原生·架构·雷达电子对抗
spider_xcxc13 小时前
Helm 部署 K8s 集群完整笔记
java·开发语言·kubernetes
窝子面13 小时前
认识Docker与启动容器与镜像的关系
运维·docker·容器