#!/bin/bash

echo "=== Kubernetes 集群架构 ==="

echo "🎛️ 控制平面组件（Master Node）："
echo "├── kube-apiserver           # API 服务器，集群的前端"
echo "├── etcd                     # 分布式键值存储，保存集群状态"
echo "├── kube-scheduler           # 调度器，决定 Pod 运行在哪个节点"
echo "├── kube-controller-manager  # 控制器管理器，维护集群状态"
echo "└── cloud-controller-manager # 云控制器管理器（可选）"

echo "\n🔧 工作节点组件（Worker Node）："
echo "├── kubelet                  # 节点代理，管理 Pod 生命周期"
echo "├── kube-proxy               # 网络代理，实现服务负载均衡"
echo "├── container-runtime        # 容器运行时（Docker、containerd 等）"
echo "└── Pod                      # 最小部署单元，包含一个或多个容器"

echo "\n=== 核心概念详解 ==="

echo "\n🫘 Pod（豆荚）："
echo "  📝 定义：Kubernetes 中最小的部署单元"
echo "  🔗 特性："
echo "    - 包含一个或多个紧密相关的容器"
echo "    - 共享网络和存储"
echo "    - 同一 Pod 内的容器可以通过 localhost 通信"
echo "    - 拥有唯一的 IP 地址"
echo "    - 生命周期一致（一起创建、一起销毁）"
echo "  💡 使用场景："
echo "    - 主容器 + 辅助容器（sidecar 模式）"
echo "    - 需要共享文件系统的容器组"
echo "    - 需要本地通信的微服务"

echo "\n🌐 Service（服务）："
echo "  📝 定义：为一组 Pod 提供稳定的网络端点"
echo "  🔗 功能："
echo "    - 实现负载均衡和服务发现"
echo "    - 提供稳定的 DNS 名称"
echo "    - 抽象底层 Pod 的变化"
echo "  📋 类型："
echo "    - ClusterIP：集群内部访问（默认）"
echo "    - NodePort：通过节点端口暴露"
echo "    - LoadBalancer：云负载均衡器"
echo "    - ExternalName：DNS 别名"

echo "\n🚀 Deployment（部署）："
echo "  📝 定义：管理 Pod 的副本数量和更新策略"
echo "  🔗 功能："
echo "    - 管理 ReplicaSet"
echo "    - 支持滚动更新和回滚"
echo "    - 确保应用的高可用性"
echo "    - 声明式配置"
echo "  💡 优势："
echo "    - 自动故障恢复"
echo "    - 零停机更新"
echo "    - 版本管理"

echo "\n📁 Namespace（命名空间）："
echo "  📝 定义：提供资源隔离的虚拟集群"
echo "  🔗 功能："
echo "    - 支持多租户环境"
echo "    - 资源配额管理"
echo "    - 访问控制"
echo "  📋 默认命名空间："
echo "    - default：默认命名空间"
echo "    - kube-system：系统组件"
echo "    - kube-public：公共资源"
echo "    - kube-node-lease：节点心跳"

echo "\n=== 资源关系图 ==="
echo "\n📊 Kubernetes 资源层次结构："
echo ""
echo "┌─────────────────────────────────────────┐"
echo "│                Cluster                  │"
echo "├─────────────────────────────────────────┤"
echo "│  ┌─────────────┐  ┌─────────────────┐   │"
echo "│  │ Namespace 1 │  │   Namespace 2   │   │"
echo "│  │             │  │                 │   │"
echo "│  │ ┌─────────┐ │  │ ┌─────────────┐ │   │"
echo "│  │ │Deployment│ │  │ │ StatefulSet │ │   │"
echo "│  │ │         │ │  │ │             │ │   │"
echo "│  │ │ ┌─────┐ │ │  │ │ ┌─────────┐ │ │   │"
echo "│  │ │ │ Pod │ │ │  │ │ │   Pod   │ │ │   │"
echo "│  │ │ └─────┘ │ │  │ │ └─────────┘ │ │   │"
echo "│  │ └─────────┘ │  │ └─────────────┘ │   │"
echo "│  │             │  │                 │   │"
echo "│  │ ┌─────────┐ │  │ ┌─────────────┐ │   │"
echo "│  │ │ Service │ │  │ │   Service   │ │   │"
echo "│  │ └─────────┘ │  │ └─────────────┘ │   │"
echo "│  └─────────────┘  └─────────────────┘   │"
echo "└─────────────────────────────────────────┘"

echo "\n=== 工作流程示例 ==="
echo "\n🔄 典型的应用部署流程："
echo "\n1️⃣ 创建 Deployment："
echo "   kubectl create deployment nginx --image=nginx:1.20"
echo "   ↓"
echo "2️⃣ Deployment 创建 ReplicaSet："
echo "   ReplicaSet 确保指定数量的 Pod 副本"
echo "   ↓"
echo "3️⃣ ReplicaSet 创建 Pod："
echo "   Pod 被调度到合适的工作节点"
echo "   ↓"
echo "4️⃣ 创建 Service 暴露应用："
echo "   kubectl expose deployment nginx --port=80"
echo "   ↓"
echo "5️⃣ 应用可以通过 Service 访问"

echo "\n=== 网络模型 ==="
echo "\n🌐 Kubernetes 网络要求："
echo "  1. 每个 Pod 都有唯一的 IP 地址"
echo "  2. Pod 之间可以直接通信（无需 NAT）"
echo "  3. 节点和 Pod 之间可以直接通信"
echo "  4. Pod 看到的自己的 IP 就是其他 Pod 看到的 IP"

echo "\n🔌 网络组件："
echo "  - CNI (Container Network Interface)：网络插件接口"
echo "  - kube-proxy：实现 Service 的负载均衡"
echo "  - CoreDNS：集群内 DNS 服务"
echo "  - Ingress Controller：HTTP/HTTPS 路由"

echo "\n📋 常用 CNI 插件："
echo "  - Flannel：简单的覆盖网络"
echo "  - Calico：支持网络策略的解决方案"
echo "  - Weave：易于安装和使用"
echo "  - Cilium：基于 eBPF 的高性能网络"

echo "\n=== 存储模型 ==="
echo "\n💾 存储类型："
echo "  - Volume：Pod 级别的存储"
echo "  - PersistentVolume (PV)：集群级别的存储资源"
echo "  - PersistentVolumeClaim (PVC)：存储请求"
echo "  - StorageClass：动态存储供应"

echo "\n📁 常用 Volume 类型："
echo "  - emptyDir：临时存储"
echo "  - hostPath：宿主机路径"
echo "  - configMap：配置文件"
echo "  - secret：敏感信息"
echo "  - nfs：网络文件系统"

echo "\n=== 安全模型 ==="
echo "\n🔐 安全机制："
echo "  - RBAC (Role-Based Access Control)：基于角色的访问控制"
echo "  - ServiceAccount：Pod 的身份标识"
echo "  - NetworkPolicy：网络访问策略"
echo "  - PodSecurityPolicy：Pod 安全策略"
echo "  - Admission Controllers：准入控制器"

echo "\n=== 监控和日志 ==="
echo "\n📊 监控组件："
echo "  - Metrics Server：资源使用情况"
echo "  - Prometheus：监控和告警"
echo "  - Grafana：可视化仪表板"
echo "  - Jaeger：分布式追踪"

echo "\n📝 日志管理："
echo "  - kubectl logs：查看 Pod 日志"
echo "  - Fluentd/Fluent Bit：日志收集"
echo "  - Elasticsearch：日志存储和搜索"
echo "  - Kibana：日志可视化"

echo "\n=== 常用命令 ==="
echo "\n⚡ 基础操作命令："
echo "  # 查看集群信息"
echo "  kubectl cluster-info"
echo "  kubectl get nodes"
echo "  "
echo "  # 管理 Pod"
echo "  kubectl get pods"
echo "  kubectl describe pod <pod-name>"
echo "  kubectl logs <pod-name>"
echo "  "
echo "  # 管理 Deployment"
echo "  kubectl get deployments"
echo "  kubectl scale deployment <name> --replicas=3"
echo "  kubectl rollout status deployment/<name>"
echo "  "
echo "  # 管理 Service"
echo "  kubectl get services"
echo "  kubectl expose deployment <name> --port=80"
echo "  "
echo "  # 配置管理"
echo "  kubectl apply -f <file.yaml>"
echo "  kubectl delete -f <file.yaml>"

echo "\n=== 总结 ==="
echo "\n🎯 Kubernetes 核心价值："
echo "  1. 🚀 自动化部署和扩缩容"
echo "  2. 🔄 自愈能力和故障恢复"
echo "  3. 🌐 服务发现和负载均衡"
echo "  4. 📦 声明式配置管理"
echo "  5. 🔧 滚动更新和回滚"
echo "  6. 💾 存储编排"
echo "  7. 🔐 安全和访问控制"

echo "\n💡 学习建议："
echo "  1. 从基础概念开始（Pod、Service、Deployment）"
echo "  2. 实践操作（minikube 或云平台）"
echo "  3. 学习 YAML 配置文件编写"
echo "  4. 掌握 kubectl 命令行工具"
echo "  5. 了解网络和存储模型"
echo "  6. 学习监控和故障排除"

echo "\n✅ Kubernetes 概念演示完成！"