feat: 按 doc_id 重组 ansible/files 与验证框架

- ansible/files 改为与文档 XX-YY 对齐的目录结构,更新相关 playbook 路径
- 新增 scripts/verify.sh 与 ansible/playbooks/verify/*.yml,移除单体 verify-matrix.yml
- 补充 docs/00-02 矩阵状态、00-05 验证框架与流程、00-04 环境与 ylc65 工作机说明
- 增加 k3s 存储准备、Longhorn、local-path 等 playbook 与辅助脚本

Made-with: Cursor
This commit is contained in:
2026-03-26 07:01:14 +08:00
parent a67788de56
commit 8c43761962
192 changed files with 4006 additions and 320 deletions

View File

@@ -0,0 +1,9 @@
# 00-01-k3s-基础概念(占位)
对应文档:[`docs/00-01-k3s-基础概念.md`](../../docs/00-01-k3s-基础概念.md)
## 说明
- 本篇为概念性文档,**不提供可部署的 Kubernetes 清单**。
- 验证方式:按文档理解与对照集群实际输出即可(无 `kubectl apply -f` 目标)。

View File

@@ -0,0 +1,9 @@
# 00-04-部署环境说明(占位)
对应文档:[`docs/00-04-部署环境说明.md`](../../docs/00-04-部署环境说明.md)
## 说明
- 本篇为环境说明文档,**不提供可部署的 Kubernetes 清单**。
- 验证方式:按文档逐项核对你的实际环境信息(节点、磁盘挂载、版本等)。

View File

@@ -0,0 +1,13 @@
# 01-01-k3s-控制节点含traefik占位
对应文档:[`docs/01-01-k3s-控制节点含traefik.md`](../../docs/01-01-k3s-控制节点含traefik.md)
## 说明
- 本篇主要是 **K3s 安装与集群初始化**,核心部署逻辑在 Ansible playbook 中。
- 本目录仅作为 doc_id 对齐占位;不单独维护 K8s manifests。
## 关联(参考)
- Ansible`ansible/playbooks/k3s-init-and-install.yml`

View File

@@ -0,0 +1,13 @@
# 01-02-k3s-工作节点(占位)
对应文档:[`docs/01-02-k3s-工作节点.md`](../../docs/01-02-k3s-工作节点.md)
## 说明
- 本篇主要是 **工作节点加入 K3s 集群** 与节点侧配置。
- 本目录仅作为 doc_id 对齐占位;不单独维护 K8s manifests。
## 关联(参考)
- Ansible`ansible/playbooks/k3s-init-and-install.yml`

View File

@@ -0,0 +1,9 @@
# 01-03-armv7-standalone-docker占位
对应文档:[`docs/01-03-armv7-standalone-docker.md`](../../docs/01-03-armv7-standalone-docker.md)
## 说明
- 本篇为 armv7 设备的 Docker 独立部署说明,**不提供 K3s/Kubernetes 清单**。
- 本目录仅用于 doc_id 对齐占位。

View File

@@ -0,0 +1,9 @@
# 01-04-双控制节点ha占位
对应文档:[`docs/01-04-双控制节点ha.md`](../../docs/01-04-双控制节点ha.md)
## 说明
- 本篇为 HA/双控制节点方案说明,部署更多依赖集群架构与外部 LB 配置。
- 本目录仅用于 doc_id 对齐占位;不提供独立 K8s manifests。

View File

@@ -0,0 +1,9 @@
# 01-05-armv7-nfs服务安装占位
对应文档:[`docs/01-05-armv7-nfs服务安装.md`](../../docs/01-05-armv7-nfs服务安装.md)
## 说明
- 本篇为 armv7 设备上 NFS 服务安装说明,**不提供 K3s/Kubernetes 清单**。
- 本目录仅用于 doc_id 对齐占位。

View File

@@ -0,0 +1,13 @@
# 01-06-节点初始化-ansible-实践(占位)
对应文档:[`docs/01-06-节点初始化-ansible-实践.md`](../../docs/01-06-节点初始化-ansible-实践.md)
## 说明
- 本篇的“真源”是 Ansible playbooks初始化、安装、验证
- 本目录仅用于 doc_id 对齐占位;不单独维护 K8s manifests。
## 关联(参考)
- Ansible`ansible/playbooks/k3s-init-and-install.yml`

View File

@@ -0,0 +1,12 @@
# 02-00-nginx-系列说明(占位)
对应文档:[`docs/02-00-nginx-系列说明.md`](../../docs/02-00-nginx-系列说明.md)
## 清单复用说明
本系列02-0102-04的可部署清单统一收敛在
- `ansible/files/02-05-nginx-matrix/`
本目录仅用于 doc_id 对齐占位。

View File

@@ -0,0 +1,15 @@
# 02-01-nginx-control-ingress占位
对应文档:[`docs/02-01-nginx-control-ingress.md`](../../docs/02-01-nginx-control-ingress.md)
## 真源清单
- 复用清单目录:`ansible/files/02-05-nginx-matrix/`
- 对应文件:`01-control-ingress.yaml`
应用示例:
```bash
kubectl apply -f ansible/files/02-05-nginx-matrix/01-control-ingress.yaml
```

View File

@@ -0,0 +1,15 @@
# 02-02-nginx-control-ingressroute占位
对应文档:[`docs/02-02-nginx-control-ingressroute.md`](../../docs/02-02-nginx-control-ingressroute.md)
## 真源清单
- 复用清单目录:`ansible/files/02-05-nginx-matrix/`
- 对应文件:`02-control-ingressroute.yaml`
应用示例:
```bash
kubectl apply -f ansible/files/02-05-nginx-matrix/02-control-ingressroute.yaml
```

View File

@@ -0,0 +1,15 @@
# 02-03-nginx-worker-ingress占位
对应文档:[`docs/02-03-nginx-worker-ingress.md`](../../docs/02-03-nginx-worker-ingress.md)
## 真源清单
- 复用清单目录:`ansible/files/02-05-nginx-matrix/`
- 对应文件:`03-worker-ingress.yaml`
应用示例:
```bash
kubectl apply -f ansible/files/02-05-nginx-matrix/03-worker-ingress.yaml
```

View File

@@ -0,0 +1,15 @@
# 02-04-nginx-worker-ingressroute占位
对应文档:[`docs/02-04-nginx-worker-ingressroute.md`](../../docs/02-04-nginx-worker-ingressroute.md)
## 真源清单
- 复用清单目录:`ansible/files/02-05-nginx-matrix/`
- 对应文件:`04-worker-ingressroute.yaml`
应用示例:
```bash
kubectl apply -f ansible/files/02-05-nginx-matrix/04-worker-ingressroute.yaml
```

View File

@@ -98,3 +98,4 @@ spec: # Ingress 规则
name: nginx-m1 # Service 名
port: # Service 端口
number: 80 # 端口号

View File

@@ -92,3 +92,4 @@ spec: # 路由规则
services: # 匹配后转发的服务
- name: nginx-m2 # 后端 Service 名称
port: 80 # 后端 Service 端口

View File

@@ -94,3 +94,4 @@ spec: # Ingress 规则
name: nginx-m3 # Service 名称
port: # 后端端口
number: 80 # 端口号

View File

@@ -92,3 +92,4 @@ spec: # IngressRoute 规则
services: # 后端服务列表
- name: nginx-m4 # Service 名称
port: 80 # Service 端口

View File

@@ -10,3 +10,4 @@
| 04-worker-ingressroute.yaml | M4 工作+IngressRoute | /demo-m4 | nodeSelector=ylc64 |
M4 默认指定 ylc64M3 随机工作节点;按实际修改。

View File

@@ -35,3 +35,4 @@ spec: # 路由规则
services: # 匹配到后转发给的服务列表
- name: api@internal # Traefik 内置 API 服务
kind: TraefikService # 该服务的 CRD 类型

View File

@@ -113,3 +113,4 @@ spec: # Ingress 规则
name: nginx-m1 # 共用 Service
port: # 后端端口
number: 80 # 端口号

View File

@@ -96,3 +96,4 @@ spec: # 规则
services: # 后端服务
- name: nginx-m2 # 后端 Service
port: 80 # 端口

View File

@@ -108,3 +108,4 @@ spec: # Ingress 规则
name: nginx-m3 # 后端 Service 名称
port: # 后端端口
number: 80 # 端口号

View File

@@ -96,3 +96,4 @@ spec: # 规则
services: # 后端服务
- name: nginx-m4 # 后端 Service 名称
port: 80 # 后端端口

View File

@@ -38,3 +38,4 @@ spec: # chart 注入配置的具体内容
nodeSelector: # 把 Traefik Pod 固定到指定节点(配合 RWO 本地存储更安全)
kubernetes.io/hostname: ylc61 # 固定节点主机名(按你的实际节点修改)

View File

@@ -92,3 +92,4 @@ spec: # Ingress 规则
name: tomcat-test05 # Service 名称
port: # Service 端口
number: 8080 # 端口号

View File

@@ -0,0 +1,74 @@
# 03-03 Traefik Dashboard + ACME合并版 HelmChartConfig
# 说明:同一 chart 只能有一份 HelmChartConfigname: traefik所以 Dashboard 与 ACME 必须合并。
# 使用前:替换 <YOUR_REAL_EMAIL>;创建 cloudflare-api-token Secret按实际修改 nodeSelector/trustedIPs/hosts。
---
apiVersion: helm.cattle.io/v1
kind: HelmChartConfig
metadata:
name: traefik
namespace: kube-system
spec:
valuesContent: |-
ports:
web:
expose: true
websecure:
expose: true
traefik:
expose: true
additionalArguments:
# Dashboard
- "--api.dashboard=true"
- "--api.insecure=true"
# ACMECloudflare DNS-01
- "--certificatesresolvers.cloudflare.acme.dnschallenge.resolvers=1.1.1.1:53,1.0.0.1:53"
- "--certificatesresolvers.cloudflare.acme.email=<YOUR_REAL_EMAIL>"
- "--certificatesresolvers.cloudflare.acme.storage=/data/acme.json"
# - "--certificatesresolvers.cloudflare.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory"
- "--certificatesresolvers.cloudflare.acme.dnschallenge.provider=cloudflare"
- "--certificatesresolvers.cloudflare.acme.dnschallenge.propagation.delayBeforeChecks=600"
# 健康检查:/ping 走 443给 HAProxy https httpchk 用)
- "--ping=true"
- "--ping.entryPoint=websecure"
# PROXY protocolHAProxy 前置时需要)
- "--entrypoints.web.proxyProtocol.trustedIPs=192.168.2.0/24"
- "--entrypoints.websecure.proxyProtocol.trustedIPs=192.168.2.0/24"
env:
- name: CF_DNS_API_TOKEN
valueFrom:
secretKeyRef:
name: cloudflare-api-token
key: api-token
nodeSelector:
kubernetes.io/hostname: ylc61
# persistence将 /data 持久化local-path PVC保证 acme.json 落盘
persistence:
enabled: true
name: data
accessMode: ReadWriteOnce
size: 128Mi
path: /data
---
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: traefik-dashboard
namespace: kube-system
spec:
entryPoints:
- web
routes:
- match: PathPrefix(`/dashboard`) || PathPrefix(`/api`)
kind: Rule
services:
- name: api@internal
kind: TraefikService

View File

@@ -35,3 +35,4 @@ spec: # Deployment 期望状态
secretKeyRef: # 从 Secret 的 key 取值
name: cloudflared-credentials # Secret 名称
key: TUNNEL_TOKEN # Secret 中的 key

View File

@@ -0,0 +1,9 @@
{
"nodePathMap": [
{
"node": "DEFAULT_PATH_FOR_NON_LISTED_NODES",
"paths": ["/storage/storage"]
}
]
}

View File

@@ -39,3 +39,4 @@ spec: # Deployment 的期望状态副本数、选择器、Pod 模板等)
- name: data # Pod 内的卷名(给 volumeMounts 用)
persistentVolumeClaim: # 使用 PVC 作为卷来源
claimName: local-pvc-demo # 绑定到哪个 PVC必须与上面 PVC metadata.name 且同 namespace

View File

@@ -10,8 +10,8 @@ spec: # PV 规格
- ReadWriteMany # RWX多节点可读写
persistentVolumeReclaimPolicy: Retain # 回收策略:删除 PVC 后保留底层数据
nfs: # 存储后端NFS
server: 192.168.2.22 # NFS 服务器地址
path: /data/nfs # NFS 导出目录
server: <NFS_SERVER_IP> # NFS 服务器地址示例192.168.2.22;应用前必须替换)
path: <NFS_EXPORT_PATH> # NFS 导出目录(示例:/sdcard应用前必须替换
---
apiVersion: v1 # PVC 使用的核心 API 版本
kind: PersistentVolumeClaim # 资源类型:持久卷声明
@@ -25,3 +25,4 @@ spec: # PVC 规格
requests: # 配额请求
storage: 5Gi # 申请容量
volumeName: nfs-pv-demo # 显式绑定到指定 PV

View File

@@ -0,0 +1,14 @@
# Longhorn Helm values — 本仓库实验室(四节点 10G+32G/storage 独立挂载)
# Charthttps://charts.longhorn.io 字段说明见官方 chart values.yaml与 app 同版本 tag
# 使用helm upgrade --install longhorn longhorn/longhorn -n longhorn-system --create-namespace -f values-lab.yaml --version 1.7.2
defaultSettings:
defaultDataPath: /storage/longhorn
# 字符串形式,与 chart 一致32G 数据盘实验环境先省空间,要演练 HA 可改为 "2" 或 "3"
defaultReplicaCount: "1"
persistence:
defaultClass: true
defaultClassReplicaCount: 1
defaultFsType: ext4

View File

@@ -0,0 +1,9 @@
# 03-08-k3s-ha-集群配置与切换(占位)
对应文档:[`docs/03-08-k3s-ha-集群配置与切换.md`](../../docs/03-08-k3s-ha-集群配置与切换.md)
## 说明
- 本篇偏架构/流程与配置项梳理,具体落地会涉及多节点与外部组件(如 LB/DNS/证书)。
- 本目录仅用于 doc_id 对齐占位;暂无独立可复用 manifests。

View File

@@ -0,0 +1,9 @@
# 03-09-k3s-gitops-集群配置管理(占位)
对应文档:[`docs/03-09-k3s-gitops-集群配置管理.md`](../../docs/03-09-k3s-gitops-集群配置管理.md)
## 说明
- 本篇为 GitOps 框架草案Argo CD / Flux 等),最终 manifests 取决于选型与版本。
- 本目录仅用于 doc_id 对齐占位;暂无固定清单。

View File

@@ -52,3 +52,4 @@ spec: # Ingress 规则
name: nodejs-demo # Service 名称
port: # Service 端口
number: 80 # 端口号

View File

@@ -56,3 +56,4 @@ spec: # Ingress 规则
name: nodejs-demo # Service 名称
port: # Service 端口
number: 80 # 端口号

View File

@@ -73,3 +73,4 @@ spec: # Ingress 规则
name: nodejs-demo # Service 名称
port: # Service 端口
number: 80 # 端口号

View File

@@ -73,3 +73,4 @@ spec: # Ingress 规则
name: nodejs-demo # Service 名称
port: # Service 端口
number: 80 # 端口号

View File

@@ -80,3 +80,4 @@ spec: # Ingress 规则
name: nodejs-demo # Service 名称
port: # Service 端口
number: 80 # 端口号

View File

@@ -92,3 +92,4 @@ spec: # Ingress 规则
name: nodejs-demo # Service 名称
port: # Service 端口
number: 80 # 端口号

View File

@@ -94,3 +94,4 @@ spec: # Ingress 规则
name: nodejs-demo # Service 名称
port: # Service 端口
number: 80 # 端口号

View File

@@ -107,3 +107,4 @@ spec: # Ingress 规则
name: nodejs-demo # Service 名称
port: # Service 端口
number: 80 # 端口号

View File

@@ -125,3 +125,4 @@ spec: # Ingress 规则
name: nodejs-demo # Service 名称
port: # Service 端口
number: 80 # 端口号

View File

@@ -126,3 +126,4 @@ spec: # Ingress 规则
name: nodejs-demo # Service 名称
port: # Service 端口
number: 80 # 端口号

View File

@@ -131,3 +131,4 @@ spec: # Ingress 规则
name: nodejs-demo # Service 名称
port: # Service 端口
number: 80 # 端口号

View File

@@ -138,3 +138,4 @@ spec: # Ingress 规则
name: nodejs-demo # Service 名称
port: # Service 端口
number: 80 # 端口号

View File

@@ -155,3 +155,4 @@ spec: # HPA 规格
target: # 目标值
type: Utilization # 目标类型:利用率
averageUtilization: 50 # 目标平均 CPU 利用率(%

View File

@@ -30,7 +30,7 @@
```bash
# 仓库根目录
kubectl apply -f ansible/files/nodejs-demo/04-01-nodejs-demo.yaml
kubectl apply -f ansible/files/04-01-nodejs-demo/04-01-nodejs-demo.yaml
```
或使用 Ansible`ansible/playbooks/nodejs-demo-apply.yml`,变量 `nodejs_demo_manifest` 指定文件名。
@@ -38,5 +38,6 @@ kubectl apply -f ansible/files/nodejs-demo/04-01-nodejs-demo.yaml
## dry-run
```bash
kubectl apply --dry-run=client -f ansible/files/nodejs-demo/04-01-nodejs-demo.yaml
kubectl apply --dry-run=client -f ansible/files/04-01-nodejs-demo/04-01-nodejs-demo.yaml
```

View File

@@ -6,3 +6,4 @@ metadata: # Secret 元信息
namespace: default # 命名空间
stringData: # 明文键值(创建时会转换为 data
API_TOKEN: "replace-me" # 示例 token请替换勿提交真实密钥

View File

@@ -0,0 +1,13 @@
# 04-02-nodejs-镜像与运行命令(占位)
对应文档:[`docs/04-02-nodejs-镜像与运行命令.md`](../../docs/04-02-nodejs-镜像与运行命令.md)
## 真源清单(复用 04-01 累积目录)
- 真源目录:`ansible/files/04-01-nodejs-demo/`
- 对应累积清单:`04-02-nodejs-demo.yaml`
```bash
kubectl apply -f ansible/files/04-01-nodejs-demo/04-02-nodejs-demo.yaml
```

View File

@@ -0,0 +1,13 @@
# 04-03-nodejs-环境变量与配置注入(占位)
对应文档:[`docs/04-03-nodejs-环境变量与配置注入.md`](../../docs/04-03-nodejs-环境变量与配置注入.md)
## 真源清单(复用 04-01 累积目录)
- 真源目录:`ansible/files/04-01-nodejs-demo/`
- 对应累积清单:`04-03-nodejs-demo.yaml`
```bash
kubectl apply -f ansible/files/04-01-nodejs-demo/04-03-nodejs-demo.yaml
```

View File

@@ -0,0 +1,13 @@
# 04-04-nodejs-端口与Service占位
对应文档:[`docs/04-04-nodejs-端口与Service.md`](../../docs/04-04-nodejs-端口与Service.md)
## 真源清单(复用 04-01 累积目录)
- 真源目录:`ansible/files/04-01-nodejs-demo/`
- 对应累积清单:`04-04-nodejs-demo.yaml`
```bash
kubectl apply -f ansible/files/04-01-nodejs-demo/04-04-nodejs-demo.yaml
```

View File

@@ -0,0 +1,13 @@
# 04-05-nodejs-资源请求与限制(占位)
对应文档:[`docs/04-05-nodejs-资源请求与限制.md`](../../docs/04-05-nodejs-资源请求与限制.md)
## 真源清单(复用 04-01 累积目录)
- 真源目录:`ansible/files/04-01-nodejs-demo/`
- 对应累积清单:`04-05-nodejs-demo.yaml`
```bash
kubectl apply -f ansible/files/04-01-nodejs-demo/04-05-nodejs-demo.yaml
```

View File

@@ -0,0 +1,13 @@
# 04-06-nodejs-探针与健康检查(占位)
对应文档:[`docs/04-06-nodejs-探针与健康检查.md`](../../docs/04-06-nodejs-探针与健康检查.md)
## 真源清单(复用 04-01 累积目录)
- 真源目录:`ansible/files/04-01-nodejs-demo/`
- 对应累积清单:`04-06-nodejs-demo.yaml`
```bash
kubectl apply -f ansible/files/04-01-nodejs-demo/04-06-nodejs-demo.yaml
```

View File

@@ -0,0 +1,13 @@
# 04-07-nodejs-调度与亲和(占位)
对应文档:[`docs/04-07-nodejs-调度与亲和.md`](../../docs/04-07-nodejs-调度与亲和.md)
## 真源清单(复用 04-01 累积目录)
- 真源目录:`ansible/files/04-01-nodejs-demo/`
- 对应累积清单:`04-07-nodejs-demo.yaml`
```bash
kubectl apply -f ansible/files/04-01-nodejs-demo/04-07-nodejs-demo.yaml
```

View File

@@ -0,0 +1,13 @@
# 04-08-nodejs-安全上下文(占位)
对应文档:[`docs/04-08-nodejs-安全上下文.md`](../../docs/04-08-nodejs-安全上下文.md)
## 真源清单(复用 04-01 累积目录)
- 真源目录:`ansible/files/04-01-nodejs-demo/`
- 对应累积清单:`04-08-nodejs-demo.yaml`
```bash
kubectl apply -f ansible/files/04-01-nodejs-demo/04-08-nodejs-demo.yaml
```

View File

@@ -0,0 +1,13 @@
# 04-09-nodejs-存储与卷(占位)
对应文档:[`docs/04-09-nodejs-存储与卷.md`](../../docs/04-09-nodejs-存储与卷.md)
## 真源清单(复用 04-01 累积目录)
- 真源目录:`ansible/files/04-01-nodejs-demo/`
- 对应累积清单:`04-09-nodejs-demo.yaml`
```bash
kubectl apply -f ansible/files/04-01-nodejs-demo/04-09-nodejs-demo.yaml
```

View File

@@ -0,0 +1,13 @@
# 04-10-nodejs-Ingress与Traefik占位
对应文档:[`docs/04-10-nodejs-Ingress与Traefik.md`](../../docs/04-10-nodejs-Ingress与Traefik.md)
## 真源清单(复用 04-01 累积目录)
- 真源目录:`ansible/files/04-01-nodejs-demo/`
- 对应累积清单:`04-10-nodejs-demo.yaml`
```bash
kubectl apply -f ansible/files/04-01-nodejs-demo/04-10-nodejs-demo.yaml
```

View File

@@ -0,0 +1,13 @@
# 04-11-nodejs-副本与滚动发布(占位)
对应文档:[`docs/04-11-nodejs-副本与滚动发布.md`](../../docs/04-11-nodejs-副本与滚动发布.md)
## 真源清单(复用 04-01 累积目录)
- 真源目录:`ansible/files/04-01-nodejs-demo/`
- 对应累积清单:`04-11-nodejs-demo.yaml`
```bash
kubectl apply -f ansible/files/04-01-nodejs-demo/04-11-nodejs-demo.yaml
```

View File

@@ -0,0 +1,13 @@
# 04-12-nodejs-TLS与证书占位
对应文档:[`docs/04-12-nodejs-TLS与证书.md`](../../docs/04-12-nodejs-TLS与证书.md)
## 真源清单(复用 04-01 累积目录)
- 真源目录:`ansible/files/04-01-nodejs-demo/`
- 对应累积清单:`04-12-nodejs-demo.yaml`
```bash
kubectl apply -f ansible/files/04-01-nodejs-demo/04-12-nodejs-demo.yaml
```

View File

@@ -0,0 +1,13 @@
# 04-13-nodejs-HPA占位
对应文档:[`docs/04-13-nodejs-HPA.md`](../../docs/04-13-nodejs-HPA.md)
## 真源清单(复用 04-01 累积目录)
- 真源目录:`ansible/files/04-01-nodejs-demo/`
- 对应累积清单:`04-13-nodejs-demo.yaml`
```bash
kubectl apply -f ansible/files/04-01-nodejs-demo/04-13-nodejs-demo.yaml
```

View File

@@ -0,0 +1,9 @@
# 04-14-nodejs-GitOps与CI流水线占位
对应文档:[`docs/04-14-nodejs-GitOps与CI流水线.md`](../../docs/04-14-nodejs-GitOps与CI流水线.md)
## 说明
- 本篇为流程/方法论文档,通常不会提供一份固定可复用的 K8s 清单。
- 如需参考示例清单,可从 `ansible/files/04-01-nodejs-demo/` 选择对应阶段的累积 YAML。

View File

@@ -1,4 +1,28 @@
# docs/05-01-k3s-部署homer首页面板.md — 按需修改 host
# docs/05-01-k3s-部署homer首页面板.md — 按需修改 host、ConfigMap 内 config.yml
# Homer 官方镜像约定:自定义配置挂在容器内 /www/assets/config.yml见 b4bz/homer 说明)
# 若不想用 ConfigMap删除本文件最上方的 ConfigMap并去掉 Deployment 里 env/volumes/volumeMounts 三段
---
apiVersion: v1 # ConfigMap存放 Homer 的 config.yml 文本
kind: ConfigMap # 非机密配置,适合放导航 YAML
metadata: # 元数据
name: homer-config # 名称须与 Deployment 中 volume 引用一致
namespace: homer # 与 Deployment 同命名空间
data: # 键值:键名 config.yml 会映射为容器内文件名
config.yml: | # Homer 主配置(修改导航只改这里,不必为每个链接单独写 K8s YAML
---
title: "实验室导航" # 页面主标题
subtitle: "Homer" # 副标题
theme: default # 主题default / dark 等(见官方文档)
connectivityCheck: false # 是否探测链接可达(实验环境可先关)
columns: 3 # 桌面端列数
services: # 分组与书签(在此集中维护)
- name: "示例分组" # 分组名
icon: "fas fa-layer-group" # Font Awesome 图标类名
items: # 该分组下的链接列表
- name: "Homer 项目" # 卡片标题
url: "https://github.com/bastienwirtz/homer" # 跳转地址
target: "_blank" # 新标签页打开
---
apiVersion: apps/v1 # Deployment 使用的 API 版本
kind: Deployment # 工作负载Deployment管理 Pod 副本)
metadata: # 对该资源的标识信息
@@ -14,11 +38,25 @@ spec: # Deployment 期望状态
labels: # Pod 标签:用于 selector 匹配 Service/Deployment 等
app: homer # Pod 上的标签 app=homer
spec: # Pod 规范
volumes: # Pod 级卷:把 ConfigMap 挂进容器
- name: homer-config # 卷名,供 volumeMounts 引用
configMap: # 来自上方 homer-config
name: homer-config # ConfigMap 名称
items: # 只挂载需要的键,文件名与键名一致
- key: config.yml # ConfigMap.data 中的键
path: config.yml # 在挂载目录下生成的文件名
containers: # 容器列表(本例只有一个容器)
- name: homer # 容器名称(日志/调试中会用到)
image: b4bz/homer:latest # homer 镜像
image: b4bz/homer:latest # Homer 官方镜像Docker Hub 命名空间 b4bz
env: # 环境变量
- name: INIT_ASSETS # 启动时是否从镜像复制默认 assets
value: "0" # 使用 ConfigMap 提供 config.yml 时设为 0避免覆盖自定义配置
ports: # 容器端口声明(供探测/生成文档等使用)
- containerPort: 8080 # 容器监听端口homer 默认 8080
volumeMounts: # 把 config.yml 挂到 Homer 读取路径
- name: homer-config # 对应 volumes[].name
mountPath: /www/assets/config.yml # 官方镜像中配置文件路径
subPath: config.yml # 单文件挂载(不覆盖整个 /www/assets 目录)
---
apiVersion: v1 # Service 使用的 API 版本
kind: Service # 网络抽象:把一组 Pod 暴露为稳定的访问入口
@@ -51,3 +89,4 @@ spec: # Ingress 规则
name: homer # 后端 Service 名称
port: # 后端端口配置
number: 80 # 后端 Service 端口

View File

@@ -40,4 +40,5 @@ spec: # Ingress 规则
service: # 转发到 Service
name: onenav-external # 后端 Service 名称
port: # 后端端口
number: 80 # Service 端口
number: 80 # 端口

View File

@@ -13,3 +13,4 @@ build_armv7: # 任务名armv7 构建
tags: [armv7] # 仅匹配 armv7 Runner
script: # 执行脚本
- echo "build for armv7" # 示例输出

View File

@@ -4,6 +4,7 @@
|------|------|
| `gitlab-ci-minimal.example.yml` | `docs/05-04-k3s-配置gitlab-cicd.md` |
| `gitlab-ci-multi-arch-deploy.example.yml` | `docs/05-04-k3s-配置gitlab-cicd.md` |
| `gitlab-ci-runner-tags.example.yml` | `docs/05-03-k3s-安装gitlab-含runner.md` |
| `../05-03-gitlab-runner/gitlab-ci-runner-tags.example.yml` | `docs/05-03-k3s-安装gitlab-含runner.md` |
复制为 `.gitlab-ci.yml``include` 引用;变量与 Runner 以文档为准。

View File

@@ -18,3 +18,4 @@ deploy: # 任务名deploy
- kubectl --kubeconfig="$KUBECONFIG" apply -f manifests/ # 应用 manifests
only: # 触发条件(旧语法)
- main # 仅 main 分支触发

View File

@@ -12,3 +12,4 @@ deploy_arm64: # 任务名arm64 架构部署
script: # 执行脚本
- echo "$KUBE_CONFIG_CONTENT" > "$KUBECONFIG" # 写入 kubeconfig
- kubectl --kubeconfig="$KUBECONFIG" apply -f manifests/arm64/ # 部署 arm64 清单

View File

@@ -0,0 +1,9 @@
# 05-05-prometheus与grafana占位
对应文档:[`docs/05-05-prometheus与grafana.md`](../../docs/05-05-prometheus与grafana.md)
## 说明
- 监控栈通常通过 Helm Chart如 kube-prometheus-stack安装清单会随版本变化。
- 本目录仅用于 doc_id 对齐占位;后续若固化 values/Chart 版本,可在此补齐 manifests/values。

View File

@@ -25,3 +25,4 @@ spec: # CronJob 期望状态
persistentVolumeClaim: # 使用 PVC 作为存储来源
claimName: openlist-backup-pvc # 绑定的 PVC 名称(需保证存在)
restartPolicy: OnFailure # Pod 失败后重启策略:仅失败时重启

View File

@@ -0,0 +1,37 @@
# docs/05-07-openclaw局域网联机.md — 按需修改 NodePort/镜像
apiVersion: apps/v1 # Deployment API 版本
kind: Deployment # 部署控制器
metadata: # 元数据
name: openclaw-server # Deployment 名称
namespace: default # 命名空间
spec: # 期望状态
replicas: 1 # 副本数
selector: # 选择器
matchLabels: # 匹配 labels
app: openclaw-server # 标签值
template: # Pod 模板
metadata: # Pod 元信息
labels: # Pod 标签
app: openclaw-server # 标签值
spec: # Pod 规格
containers: # 容器
- name: openclaw-server # 容器名
image: ghcr.io/your/openclaw-server:latest # 镜像(按环境修改)
ports: # 容器端口
- containerPort: 27015 # 示例端口(按应用实际修改)
---
apiVersion: v1 # Service API 版本
kind: Service # Service
metadata: # 元数据
name: openclaw-server # Service 名称
namespace: default # 命名空间
spec: # 规格
type: NodePort # NodePort 暴露到节点
selector: # 选择后端 Pod
app: openclaw-server # 标签选择器
ports: # 端口列表
- name: game # 端口名
port: 27015 # Service 端口
targetPort: 27015 # Pod 端口
nodePort: 32715 # NodePort按需修改需在范围内

View File

@@ -0,0 +1,55 @@
# docs/05-09-openclaw-web-小游戏网页平台.md — 按需修改 Ingress host/镜像
apiVersion: apps/v1 # Deployment API 版本
kind: Deployment # 部署
metadata: # 元信息
name: openclaw-web # 名称
namespace: default # 命名空间
spec: # 规格
replicas: 1 # 副本数
selector: # 选择器
matchLabels: # 匹配标签
app: openclaw-web # 标签
template: # Pod 模板
metadata: # Pod 元信息
labels: # Pod 标签
app: openclaw-web # 标签
spec: # Pod 规格
containers: # 容器列表
- name: openclaw-web # 容器名
image: ghcr.io/your/openclaw-web:latest # 镜像(按环境修改)
ports: # 容器端口
- containerPort: 80 # Web 端口
---
apiVersion: v1 # Service API 版本
kind: Service # Service
metadata: # 元信息
name: openclaw-web # Service 名称
namespace: default # 命名空间
spec: # 规格
selector: # 选择后端 Pod
app: openclaw-web # 标签
ports: # 端口
- name: http # 名称
port: 80 # Service 端口
targetPort: 80 # Pod 端口
---
apiVersion: networking.k8s.io/v1 # Ingress API 版本
kind: Ingress # Ingress
metadata: # 元信息
name: openclaw-web # 名称
namespace: default # 命名空间
annotations: # 注解
traefik.ingress.kubernetes.io/router.entrypoints: web # Traefik entrypoint
spec: # 规格
rules: # 规则
- host: openclaw.example.com # 域名(按环境修改)
http: # HTTP
paths: # 路径
- path: / # 根路径
pathType: Prefix # 前缀匹配
backend: # 后端
service: # Service
name: openclaw-web # 后端 service
port: # 端口
number: 80 # 端口号

View File

@@ -0,0 +1,9 @@
# 06-01-k3s-networkpolicy-故障排查(占位)
对应文档:[`docs/06-01-k3s-networkpolicy-故障排查.md`](../../docs/06-01-k3s-networkpolicy-故障排查.md)
## 说明
- 本篇为排障手册/命令集合,**不提供固定可部署清单**。
- 本目录仅用于 doc_id 对齐占位。

View File

@@ -0,0 +1,9 @@
# 06-02-运维小结(占位)
对应文档:[`docs/06-02-运维小结.md`](../../docs/06-02-运维小结.md)
## 说明
- 本篇为运维建议/巡检要点总结,通常不对应单一可部署清单。
- 本目录仅用于 doc_id 对齐占位。

View File

@@ -0,0 +1,12 @@
# 06-03-k3s-自动备份与恢复-openlist-webdav对齐 README
对应文档:[`docs/06-03-k3s-自动备份与恢复-openlist-webdav.md`](../../docs/06-03-k3s-自动备份与恢复-openlist-webdav.md)
## 真源清单目录
本篇可部署清单当前收敛在:
- `ansible/files/06-03-openlist-webdav/`
说明:该目录名未镜像 docs 文件名为满足“doc_id 目录对齐”口径,本目录仅作为桥接与入口。

View File

@@ -25,3 +25,4 @@ spec: # CronJob 规格
hostPath: # 使用宿主机路径
path: /data/app # 宿主机实际目录(按环境修改)
restartPolicy: OnFailure # 失败时重启

View File

@@ -22,3 +22,4 @@ spec: # Job 规格
hostPath: # 使用宿主机目录作为存储
path: /data/app # 节点上的真实数据目录(按实际修改)
restartPolicy: OnFailure # 失败时重启,成功后结束

View File

@@ -1,83 +0,0 @@
# 03-03 Traefik Dashboard + ACME唯一清单推荐
# =============================================================================
# 含HelmChartConfiglocal-path 持久化 /data + ACME Cloudflare DNS-01 + Dashboard
# + IngressRoute/dashboard、/api
# acme.json 与 chart persistence 均落在 /dataPod 重建后证书仍在nodeSelector 须固定单节点RWO
#
# 部署kubectl apply -f ansible/files/traefik-dashboard-acme/traefik-dashboard-acme.yaml
# 使用前:替换 <YOUR_REAL_EMAIL>、nodeSelector 主机名Secret cloudflare-api-token 已存在(见 03-02
# 全集群只能有一份 HelmChartConfig metadata.name=traefik
#
# --- 不要 Dashboard 时 ---
# 删除文末 IngressRoute 整段;并在 valuesContent 中删掉 ports可选、--api.dashboard、--api.insecure
#
# --- 临时不用持久化(不推荐)---
# 将 persistence.enabled 改为 false 并删掉 persistence 下其余字段(证书可能随 Pod 丢失)
# =============================================================================
---
apiVersion: helm.cattle.io/v1 # HelmChartConfig 所在的 API 版本
kind: HelmChartConfig # HelmChartConfig给 K3s/Helm 注入 values 的资源
metadata: # 资源标识信息
name: traefik # chart 对应的 name需要与 Traefik chart/约定一致)
namespace: kube-system # Traefik 通常运行在 kube-system
spec: # 该资源要注入 chart 的配置
valuesContent: |- # 以“字符串形式的 YAML”注入到 Helm chart values由 chart 解析)
ports: # 暴露 entrypoints 给集群入口
web: # HTTP entrypoint
expose: true # 允许暴露 web
websecure: # HTTPS entrypoint
expose: true # 允许暴露 websecure
persistence: # chart 持久化配置:为 /data 挂载 PVC
enabled: true # 开启持久卷
name: data # chart 创建/引用的卷名PVC 等)
accessMode: ReadWriteOnce # RWO同一时间只能在一个节点挂载
size: 512Mi # 请求容量local-path 会据此创建本地卷)
storageClass: local-path # 使用 K3s 的 local-path-provisioner
path: /data # 容器内挂载目录(与 acme.storage 一致)
additionalArguments: # 额外传给 Traefik 的 CLI 参数
- "--api.dashboard=true" # 打开 dashboard 功能
- "--api.insecure=true" # k8s允许 dashboard 在入口可用(注意安全)
- "--log.level=INFO" # 日志级别
- "--certificatesresolvers.cloudflare.acme.dnschallenge.resolvers=1.1.1.1:53,1.0.0.1:53" # DNS 解析器列表(用于 DNS-01
- "--certificatesresolvers.cloudflare.acme.email=<YOUR_REAL_EMAIL>" # ACME 注册邮箱
- "--certificatesresolvers.cloudflare.acme.storage=/data/acme.json" # 证书与账户存储(容器内 /data
# - "--certificatesresolvers.cloudflare.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory" # 测试用,上线前删除
- "--certificatesresolvers.cloudflare.acme.dnschallenge.provider=cloudflare" # DNS-01 providercloudflare
- "--certificatesresolvers.cloudflare.acme.dnschallenge.propagation.delayBeforeChecks=600" # DNS-01 propagation 等待秒数
- "--ping=true" # 开启 ping healthcheck
- "--ping.entryPoint=websecure" # ping 使用 websecure(HTTPS) entrypoint
- "--entrypoints.web.proxyProtocol.trustedIPs=192.168.2.0/24" # web entrypoint 信任的代理网段
- "--entrypoints.websecure.proxyProtocol.trustedIPs=192.168.2.0/24" # websecure entrypoint 信任的代理网段
env: # 环境变量注入
- name: CF_DNS_API_TOKEN # 供 Traefik 使用的 Cloudflare Token 环境变量名
valueFrom: # 从 Secret 挂载
secretKeyRef: # Secret 引用方式
name: cloudflare-api-token # Secret 名
key: api-token # Secret 内 key
nodeSelector: # 将 Traefik Pod 固定到指定节点(避免 local-path RWO 迁移导致丢数据)
kubernetes.io/hostname: ylc61 # 目标节点主机名
---
# 显式 IngressRoute与 03-01 一致,确保 /dashboard 可达; Helm ingressRoute.dashboard 在 K3s chart 中未必生效)
apiVersion: traefik.io/v1alpha1 # IngressRoute API 版本
kind: IngressRoute # Traefik 路由 CRD
metadata: # IngressRoute 元信息
name: traefik-dashboard # 路由名称
namespace: kube-system # 命名空间
spec: # IngressRoute 规则
entryPoints: # 入口点列表
- web # 使用 web(HTTP) 入口
routes: # 路由规则列表
- match: PathPrefix(`/dashboard`) || PathPrefix(`/api`) # 匹配 Dashboard/API 路径前缀
kind: Rule # 规则类型
services: # 后端服务
- name: api@internal # Traefik 内置 API 服务
kind: TraefikService # 服务类型