基于项目实际 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/ 目录重新部署,对比两种方式的差异

相关推荐
张忠琳4 小时前
【k3s】AutoK3s v0.9.3 Part 1 入口与 CLI 命令模块 — 超深度逐行分析之三
云原生·容器·kubernetes·k3s·autok3s
m0_525724727 小时前
AIOps全链路智能运维架构揭秘
云原生·devops
xiaoxiangsiyan10 小时前
企业日常运维高频应用服务全解
运维·网络·云原生·容器·dns
AR_xsy11 小时前
docker--资源配额 配置
运维·docker·容器
国际云,接待11 小时前
Docker 容器突然退出、服务莫名重启:从 OOMKilled 到内存泄漏的生产排查手册
运维·docker·容器
阿里云云原生11 小时前
一次请求只做一次决策:阿里云 AI 网关智能路由如何替大模型应用选模型
云原生
橙-极纪元12 小时前
把docker的镜像文件从一台服务器中,迁移至另一台服务器
服务器·docker·容器
zhangjw3413 小时前
第41篇:微服务入门:架构理念+核心组件,理解微服务本质
微服务·云原生·架构
RobinDevNotes13 小时前
K8s+Ray+vLLM打穿大模型全生命周期(有实践步骤)
人工智能·云原生·容器·kubernetes·生活·vllm
雨声不在14 小时前
docker-android 重启后镜像起不来
android·docker·容器