基于自建 6 节点离线 K8s 集群的端到端 DevOps 落地工程 📅 最近更新: 2026-07-07 | 状态: 全部完成 ✅
这是一套从零搭建的 完整 K8s DevOps 平台,在自建离线集群上实战落地了 CI/CD 三方案、可观测性三支柱、灰度发布、弹性伸缩、国产数据库部署等核心能力。
核心亮点:
- 🔄 CI/CD 三方案对比: Jenkins + GitLab CI + ArgoCD GitOps,从传统到云原生全覆盖
- 📊 可观测性三支柱: Metrics/Logs/Traces 全链路打通,支持 Trace-Log 关联查询
- 🚦 灰度发布实战: Argo Rollouts Canary + BlueGreen,含权重调整与自动回滚
- 🇨🇳 国产数据库部署: 崖山 YashanDB + 达梦 DM8 K8s 部署实战
- 🔐 安全合规: 镜像签名(Trivy)、Sealed Secrets、cert-manager
| 节点 | 角色 | CPU | 内存 | 磁盘 |
|---|---|---|---|---|
| master1-3 | Control Plane | 2核 | 2GB | 50GB |
| worker1-2 | Worker | 4核 | 8GB | 100GB |
| harbor | 镜像仓库 | 2核 | 2GB | 100GB |
K8s: v1.28.15 | OS: CentOS 7.9 | 网络: Calico | 存储: NFS
┌─────────────────────────────────────────────────────────┐
│ 流量入口层 │
│ nginx-ingress + Gateway API + ExternalDNS │
├─────────────────────────────────────────────────────────┤
│ 灰度发布层 │
│ Argo Rollouts (Canary / BlueGreen) │
├─────────────────────────────────────────────────────────┤
│ CI/CD 交付层 (三方案) │
│ ┌──────────────┬──────────────┬──────────────────┐ │
│ │ 方案1 │ 方案2 │ 方案3 │ │
│ │ Jenkins+ │ GitLab CI+ │ Argo Rollouts │ │
│ │ ArgoCD │ ArgoCD │ GitOps │ │
│ └──────────────┴──────────────┴──────────────────┘ │
├─────────────────────────────────────────────────────────┤
│ 可观测性层 │
│ Metrics: Prometheus + Grafana (28 targets) │
│ Logs: Loki + Promtail (多租户) │
│ Traces: SkyWalking (Java Agent 无侵入) │
│ Storage: Elasticsearch 集群 │
├─────────────────────────────────────────────────────────┤
│ 数据 & 存储层 │
│ 崖山YashanDB | 达梦DM8 | NFS Provisioner │
├─────────────────────────────────────────────────────────┤
│ 安全 & 治理层 │
│ Sealed Secrets | cert-manager | Harbor + Trivy │
├─────────────────────────────────────────────────────────┤
│ K8s 核心能力层 │
│ KEDA + HPA 弹性伸缩 | RBAC | NetworkPolicy │
└─────────────────────────────────────────────────────────┘
cloud-native-platform/
├── CI-CD总览/ # CI/CD 理论 + 三方案对比
│ ├── CI-CD-GitOps-三套方案对比.md # 方案选型决策矩阵
│ └── CICD生态工具速览-理论补充.md # 工具链全景
│
├── 镜像仓库/ # Harbor 私有镜像仓库
│
├── K8s基础/ # K8s 核心三基石
│ └── K8s-三基石-HPA-存储-Ingress.md # 自愈/弹性/服务发现
│
├── 流量入口/ # 流量管理
│ ├── monitoring-ingress.yaml # 可观测性 Ingress
│ └── gateway-demo.yaml # Gateway API 示例
│
├── 方案1-Jenkins-ArgoCD/ # CI/CD 方案一
│ ├── 方案一-Jenkins-ArgoCD实施指南.md # 完整实施步骤
│ ├── 关键配置详解.md # Jenkinsfile/ArgoCD配置
│ ├── 端到端操作实录.md # 操作留痕
│ ├── 故障排查手册.md # 常见问题
│ ├── 项目结构对照.md # 代码结构对照
│ ├── 配置文件/ # YAML 配置集
│ ├── 辅助项目-nginx-gitops-demo/ # Demo: Nginx GitOps
│ └── 辅助项目-snownlp-observability-demo/ # Demo: 情感分析+可观测性
│
├── 方案2-GitLab-ArgoCD/ # CI/CD 方案二
│
├── 方案3-Argo-Rollouts/ # 灰度发布方案
│ ├── 端到端操作实录.md # 灰度操作全记录
│ ├── 故障排查手册.md # 灰度排障
│ ├── argocd/ # ArgoCD 配置
│ ├── k8s/ # K8s Rollout 资源
│ └── sealed-secrets/ # 加密密钥
│
├── 可观测性/ # 三大支柱
│ ├── 01-metrics/ # Prometheus + Grafana
│ ├── 02-logs/ # Loki + Promtail
│ ├── 03-traces/ # SkyWalking
│ ├── 04-es-storage/ # ES 集群
│ ├── scripts/ # 部署脚本
│ └── 可观测性三大支柱-操作留痕与排障手册.md
│
├── 弹性伸缩/ # KEDA + HPA
│ └── keda-cron-demo.yaml # Cron 伸缩示例
│
├── 存储管理/ # NFS Provisioner
│
├── 密钥管理/ # Sealed Secrets + cert-manager
│
├── 数据库部署/ # 国产数据库
│ ├── 01-崖山YashanDB部署.md
│ ├── 02-达梦DM8部署.md
│ └── 03-常见踩坑汇总.md
│
├── 部署工具/ # Helm 部署工具
│
└── 全局参考/ # 全局配置文件
| 维度 | 方案1: Jenkins+ArgoCD | 方案2: GitLab CI+ArgoCD | 方案3: Argo Rollouts |
|---|---|---|---|
| CI 引擎 | Jenkins Pipeline | GitLab CI | ArgoCD (纯GitOps) |
| CD 方式 | ArgoCD 自动同步 | ArgoCD 自动同步 | Argo Rollouts 渐进式 |
| 灰度策略 | 手动切换 | 手动切换 | Canary / BlueGreen 自动化 |
| 配置管理 | Jenkinsfile + ConfigMap | .gitlab-ci.yml | Rollout CRD |
| 密钥管理 | Jenkins Credentials | GitLab Variables | Sealed Secrets |
| 适用场景 | 传统企业过渡 | GitLab 全家桶 | K8s 原生灰度 |
| 学习成本 | ⭐⭐⭐ | ⭐⭐ | ⭐⭐ |
| 灵活性 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ |
方案1: Git Push → Jenkins Build → Docker Push → ArgoCD Sync → K8s
方案2: Git Push → GitLab CI Build → Docker Push → ArgoCD Sync → K8s
方案3: Git Push → ArgoCD Sync → Argo Rollouts Canary → K8s (渐进式)
| 指标 | 详情 |
|---|---|
| 采集目标 | 28 targets (Node/K8s组件/Pods/Harbor) |
| 存储 | Thanos 长期存储方案 |
| 面板 | 预配置 Dashboard (集群/节点/应用) |
| 告警 | Alertmanager + 路由分组 |
| 能力 | 实现 |
|---|---|
| 日志采集 | Promtail DaemonSet 全节点采集 |
| 多租户 | 按 namespace 隔离 |
| Trace 关联 | 通过 TraceID 关联 Loki 日志 ↔ SkyWalking Trace |
| 能力 | 实现 |
|---|---|
| 接入方式 | Java Agent 无侵入 |
| 存储后端 | Elasticsearch 7.x |
| 拓扑展示 | 服务拓扑 + 调用链 |
基于 Argo Rollouts 实现两种灰度策略:
v1 (90%) → v2 (10%) → v2 (30%) → v2 (100%)
↓ 异常 ↓ 正常
自动回滚 v1 全量切换 v2
v1 (Active) + v2 (Preview) → 流量切换 → v2 (Active)
↓ 异常
快速回切 v1
配套能力: Sealed Secrets 密钥加密 + cert-manager 证书自动管理
| 策略 | 组件 | 场景 |
|---|---|---|
| HPA | metrics-server | CPU/内存指标伸缩 |
| KEDA | KEDA Operator | Cron 定时伸缩 + 自定义指标 |
镜像安全: Harbor → Trivy 漏洞扫描 → 签名验证
运行时安全: NetworkPolicy → RBAC → Pod Security
密钥安全: Sealed Secrets 加密 → cert-manager 自动签发
治理: Falco 运行时监控 + CIS 基线检查
| 数据库 | 部署方式 | 特点 |
|---|---|---|
| 崖山 YashanDB | StatefulSet + NFS | 国产自研,Oracle 兼容 |
| 达梦 DM8 | StatefulSet + NFS | 老牌国产数据库 |
含完整部署步骤 + 踩坑汇总 + 故障排查
# 1. Harbor 镜像仓库已部署 (192.168.1.61:80)
# 2. K8s 集群正常运行
# 3. NFS Provisioner 已配置
# 4. Helm 3.12+ 已安装# 阶段1: 基础设施
# → 镜像仓库 + NFS 存储 + 密钥管理
# 阶段2: 可观测性
# → Prometheus + Grafana + Loki + SkyWalking
# 阶段3: CI/CD
# → Jenkins / GitLab CI + ArgoCD
# 阶段4: 灰度发布
# → Argo Rollouts + Canary 策略
# 阶段5: 数据库
# → 崖山 YashanDB / 达梦 DM8# 检查所有组件状态
kubectl get pods -A --sort-by='.status.phase'
# 检查 Prometheus targets
kubectl port-forward -n monitoring svc/prometheus-server 9090:80
# 浏览器: http://localhost:9090/targets
# 检查 ArgoCD 应用同步
kubectl get applications -n argocd
# 检查 Rollout 状态
kubectl argo rollouts list rollouts -A| 分类 | 组件 | 版本 | 用途 |
|---|---|---|---|
| 镜像仓库 | Harbor | v2.x | 镜像存储 + 漏洞扫描 |
| CI | Jenkins / GitLab CI | latest | 构建流水线 |
| CD/GitOps | ArgoCD | v2.x | 声明式部署 |
| 灰度发布 | Argo Rollouts | v1.x | Canary / BlueGreen |
| Metrics | Prometheus + Grafana | v2.x | 指标采集 + 可视化 |
| Logs | Loki + Promtail | v2.x | 日志聚合 |
| Traces | SkyWalking | v9.x | 链路追踪 |
| 日志存储 | Elasticsearch | 7.x | SkyWalking 存储后端 |
| 弹性伸缩 | KEDA + HPA | v2.x | 指标驱动伸缩 |
| 存储 | NFS Provisioner | v4.x | 动态 PVC |
| 密钥 | Sealed Secrets + cert-manager | latest | 加密 + 证书 |
| 流量 | nginx-ingress + Gateway API | v1.x | 流量入口 |
| 数据库 | 崖山 YashanDB / 达梦 DM8 | latest | 国产数据库 |
- 📚 cloud-native-fullstack-course — 云原生全栈实战课程 (35模块)
提示: 本项目在离线环境中完整运行,所有外部依赖已通过 Harbor 镜像仓库本地化。