日常更新
This commit is contained in:
9
ansible/files/01-01/README.md
Normal file
9
ansible/files/01-01/README.md
Normal file
@@ -0,0 +1,9 @@
|
||||
# 01-01(单控制节点安装)
|
||||
|
||||
| 文件 | 说明 |
|
||||
|------|------|
|
||||
| `k3s-server-install.example.sh` | 默认或 `--data-dir=/storage` 安装片段备忘 |
|
||||
|
||||
- **手动**:在控制节点按 [docs/01-01-k3s-控制节点含traefik.md](../../../docs/01-01-k3s-控制节点含traefik.md) 执行;可与本目录示例对照。
|
||||
- **自动**:`./ansible/bin/verify.sh run 01-01`(专用 playbook:`kubectl` 断言;与本目录 shell 示例共用真源路径)。
|
||||
- 本篇**无** Kubernetes 应用清单;扩展名 `.sh` 不会进入 `kubectl apply --dry-run` 列表。
|
||||
11
ansible/files/01-01/k3s-server-install.example.sh
Normal file
11
ansible/files/01-01/k3s-server-install.example.sh
Normal file
@@ -0,0 +1,11 @@
|
||||
#!/usr/bin/env bash
|
||||
# 控制节点安装 k3s server(示例)— 真源目录 ansible/files/01-01/
|
||||
# 详见:docs/01-01-k3s-控制节点含traefik.md
|
||||
|
||||
# 方案一:默认数据目录
|
||||
# curl -sfL https://get.k3s.io | sh -
|
||||
|
||||
# 方案二:数据盘
|
||||
# curl -sfL https://get.k3s.io | sh -s - server --data-dir=/storage
|
||||
|
||||
echo "[INFO] 取消注释其一并在节点上执行;token 路径随方案在文档中说明。"
|
||||
8
ansible/files/01-02/README.md
Normal file
8
ansible/files/01-02/README.md
Normal file
@@ -0,0 +1,8 @@
|
||||
# 01-02(工作节点加入 + Traefik 基线)
|
||||
|
||||
| 文件 | 说明 |
|
||||
|------|------|
|
||||
| `k3s-agent-join.example.sh` | worker 使用环境变量或 `agent --data-dir` 加入集群的片段 |
|
||||
|
||||
- **手动**:按 [docs/01-02-k3s-工作节点.md](../../../docs/01-02-k3s-工作节点.md) 在 worker 执行;替换 `K3S_URL`、`TOKEN` 与 IP。
|
||||
- **自动**:`./ansible/bin/verify.sh run 01-02`(与手工步骤共用本目录作为命令真源备忘)。
|
||||
17
ansible/files/01-02/k3s-agent-join.example.sh
Normal file
17
ansible/files/01-02/k3s-agent-join.example.sh
Normal file
@@ -0,0 +1,17 @@
|
||||
#!/usr/bin/env bash
|
||||
# 工作节点加入 k3s(示例)— ansible/files/01-02/
|
||||
# 详见:docs/01-02-k3s-工作节点.md
|
||||
|
||||
# 方案一:默认数据目录
|
||||
# curl -sfL https://get.k3s.io | \
|
||||
# K3S_URL=https://192.168.2.61:6443 \
|
||||
# K3S_TOKEN=<TOKEN> \
|
||||
# sh -
|
||||
|
||||
# 方案二:数据盘
|
||||
# curl -sfL https://get.k3s.io | sh -s - agent \
|
||||
# --data-dir=/storage \
|
||||
# --server https://192.168.2.61:6443 \
|
||||
# --token <TOKEN>
|
||||
|
||||
echo "[INFO] 将占位符替换为控制面地址与 token 后执行。"
|
||||
6
ansible/files/01-03/README.md
Normal file
6
ansible/files/01-03/README.md
Normal file
@@ -0,0 +1,6 @@
|
||||
# 01-03(armv7 独立 Docker)
|
||||
|
||||
- **手动**:在 armv7 主机按 [docs/01-03-armv7-standalone-docker.md](../../../docs/01-03-armv7-standalone-docker.md)(**get.docker.com** 官方脚本 + 先 `docker info` 再决定是否安装)。
|
||||
- **远程脚本**:仓库根执行 [ansible/tools/armv7-docker-verify-install.sh](../../tools/armv7-docker-verify-install.sh)(与文档流程一致;`ARMV7_SSH='ssh …' ./ansible/tools/...`)。
|
||||
- **自动**:`./ansible/bin/verify.sh run 01-03`(`SKIP_ARMV7=0` 时调用上述脚本)。
|
||||
- 本篇无通用 K8s 清单;若后续补充 compose 或单元脚本,请用 `.example.` 命名或放在非 `.yml`/`.yaml` 扩展名以避免误 dry-run。
|
||||
0
ansible/files/01-04/.gitkeep
Normal file
0
ansible/files/01-04/.gitkeep
Normal file
6
ansible/files/01-05/README.md
Normal file
6
ansible/files/01-05/README.md
Normal file
@@ -0,0 +1,6 @@
|
||||
# 01-05(Ansible 一键装集群)
|
||||
|
||||
- **真源 playbook**:`ansible/playbooks/verify/01-05.yml`(与 `deploy-lab.sh` 调用一致)。
|
||||
- **文档**:[docs/01-05-节点初始化-ansible-实践.md](../../../docs/01-05-节点初始化-ansible-实践.md)。
|
||||
- **自动**:`./ansible/bin/verify.sh run 01-05` 或 `./ansible/bin/deploy-lab.sh k3s`。
|
||||
- 本目录用于与 `doc_id` 三元契约对齐;集群对象由 playbook / 其它 `ansible/files` 篇生成,此处可不放置额外 YAML。
|
||||
12
ansible/files/01-06/README.md
Normal file
12
ansible/files/01-06/README.md
Normal file
@@ -0,0 +1,12 @@
|
||||
# 01-06(OpenWrt HAProxy)
|
||||
|
||||
- **说明与选用**:[`docs/01-06-openwrt-haproxy.md`](../../../docs/01-06-openwrt-haproxy.md)(文首有各 `*.cfg` 对照表)。
|
||||
- **本目录**:HAProxy 示例配置(非 K8s YAML);复制到 OpenWrt 后改 IP/端口并 `haproxy -c -f …` 校验。
|
||||
|
||||
| 文件 | 用途摘要 |
|
||||
|------|----------|
|
||||
| `haproxy-no-check.cfg` | 最简,无 check |
|
||||
| `haproxy-http.cfg` | 80 明文 httpchk |
|
||||
| `haproxy-tls.cfg` | 443 TCP + ssl-hello-chk |
|
||||
| `haproxy-https.cfg` | 443 应用层 HTTPS 检查(HAProxy 终结 TLS) |
|
||||
| `haproxy-proxy-http-tls.cfg` | 检查 + PROXY v2 |
|
||||
@@ -1,6 +1,6 @@
|
||||
# 01-07 HAProxy - 3.2 HTTP 健康检查(80 明文)
|
||||
# 01-06 HAProxy - 3.2 HTTP 健康检查(80 明文)
|
||||
# backend k3s_http 增加 option httpchk GET /
|
||||
# 文档:docs/01-07-openwrt-haproxy.md 第 3.2 节
|
||||
# 文档:docs/01-06-openwrt-haproxy.md 第 3.2 节
|
||||
global
|
||||
log /dev/log local0
|
||||
maxconn 4096
|
||||
@@ -1,8 +1,8 @@
|
||||
# 01-07 HAProxy - 3.4 HTTPS 健康检查(443 应用层,HAProxy 终结 TLS,由 HAProxy 提供证书)
|
||||
# 01-06 HAProxy - 3.4 HTTPS 健康检查(443 应用层,HAProxy 终结 TLS,由 HAProxy 提供证书)
|
||||
# frontend 需 bind *:443 ssl,backend mode http 连 K3s:443 做 HTTP over TLS 检查
|
||||
# 将 your-ingress.example.com 改为实际 Host;将 /etc/ssl/haproxy.pem 改为实际证书路径
|
||||
# 自签/内网 CA 用 verify none,生产建议 ca-file
|
||||
# 文档:docs/01-07-openwrt-haproxy.md 第 3.4 节
|
||||
# 文档:docs/01-06-openwrt-haproxy.md 第 3.4 节
|
||||
global
|
||||
log /dev/log local0
|
||||
maxconn 4096
|
||||
@@ -1,5 +1,5 @@
|
||||
# 01-07 OpenWrt HAProxy 负载均衡 - 原生最简(无健康检查)
|
||||
# 文档:docs/01-07-openwrt-haproxy.md 第 2 节
|
||||
# 01-06 OpenWrt HAProxy 负载均衡 - 原生最简(无健康检查)
|
||||
# 文档:docs/01-06-openwrt-haproxy.md 第 2 节
|
||||
# 将 192.168.2.61~64 按实际 K3s 节点 IP 修改
|
||||
# 如需健康检查,见第 3 节对应 cfg
|
||||
global
|
||||
@@ -1,6 +1,6 @@
|
||||
# 01-07 HAProxy - 健康检查升级(HTTP+TLS)+ PROXY Protocol
|
||||
# 01-06 HAProxy - 健康检查升级(HTTP+TLS)+ PROXY Protocol
|
||||
# 组合:k3s_http 用 option httpchk,k3s_https 用 ssl-hello-chk,均带 send-proxy-v2
|
||||
# 文档:docs/01-07-openwrt-haproxy.md 第 5 节「健康检查与 PROXY 组合」
|
||||
# 文档:docs/01-06-openwrt-haproxy.md 第 5 节「健康检查与 PROXY 组合」
|
||||
global
|
||||
log /dev/log local0
|
||||
maxconn 4096
|
||||
@@ -1,6 +1,6 @@
|
||||
# 01-07 HAProxy - 3.3 TLS 健康检查(443 握手,mode tcp)
|
||||
# 01-06 HAProxy - 3.3 TLS 健康检查(443 握手,mode tcp)
|
||||
# backend k3s_https 增加 option ssl-hello-chk
|
||||
# 文档:docs/01-07-openwrt-haproxy.md 第 3.3 节
|
||||
# 文档:docs/01-06-openwrt-haproxy.md 第 3.3 节
|
||||
global
|
||||
log /dev/log local0
|
||||
maxconn 4096
|
||||
9
ansible/files/01-07/README.md
Normal file
9
ansible/files/01-07/README.md
Normal file
@@ -0,0 +1,9 @@
|
||||
# 01-07 双控制节点 HA(手工演练为主)
|
||||
|
||||
本目录用于满足 `doc_id=01-07` 的真源目录一致性约束。
|
||||
|
||||
当前 `01-07` 主要是手工 runbook(切换/演练类),自动验证入口为:
|
||||
|
||||
- `ansible/playbooks/verify/01-07.yml`(文档存在性与说明提示)
|
||||
|
||||
如后续将 01-07 演练步骤自动化,可在本目录新增对应清单与配置文件。
|
||||
101
ansible/files/02-01/01-control-ingress.yaml
Normal file
101
ansible/files/02-01/01-control-ingress.yaml
Normal file
@@ -0,0 +1,101 @@
|
||||
# 02-05: Nginx + 控制节点 + Ingress(M1)
|
||||
# 路径 /demo-m1,随机一台控制节点(nodeSelector + toleration,控制节点常有 NoSchedule 污点)
|
||||
# ConfigMap:首页 + default.conf(单文件 subPath 挂载,与 M2~M4 一致,便于 nginx 后续扩展)
|
||||
---
|
||||
apiVersion: v1 # ConfigMap 使用的 API 版本
|
||||
kind: ConfigMap # 配置资源类型:ConfigMap
|
||||
metadata: # 对该 ConfigMap 的标识信息
|
||||
name: nginx-m1-html # ConfigMap 名称
|
||||
namespace: default # 命名空间
|
||||
data: # ConfigMap 数据键值区
|
||||
index.html: | # HTML 内容:会挂载到 nginx 的网页目录
|
||||
<!DOCTYPE html>
|
||||
<html><head><meta charset="utf-8"><title>M1</title></head>
|
||||
<body><h1>M1</h1><p>控制节点 + Ingress</p><p><strong>Backend: M1</strong></p></body></html>
|
||||
default.conf: | # nginx 配置:通过 subPath 单文件挂载到 conf.d/default.conf
|
||||
server { listen 80 default_server; server_name _; root /usr/share/nginx/html; index index.html; location / { add_header X-Backend "M1"; try_files $uri $uri/ /index.html; } }
|
||||
---
|
||||
apiVersion: apps/v1 # Deployment 使用的 API 版本
|
||||
kind: Deployment # 工作负载:Deployment
|
||||
metadata: # Deployment 标识信息
|
||||
name: nginx-m1 # Deployment 名称
|
||||
namespace: default # 部署命名空间
|
||||
labels: # 额外标签(用于检索/筛选)
|
||||
app: nginx-m1 # 应用标签
|
||||
matrix: "02-05-m1" # 矩阵编号标签(用于你后续调试/统计)
|
||||
spec: # Deployment 期望状态
|
||||
replicas: 1 # 副本数:本例为 1(便于对应路径验证)
|
||||
selector: # Deployment 用于选择 Pod 的条件
|
||||
matchLabels: # 标签匹配集合(用于选中模板 Pod)
|
||||
app: nginx-m1 # 必须与 template.metadata.labels 对上
|
||||
template: # Pod 模板
|
||||
metadata: # Pod 的元信息
|
||||
labels: # Pod 标签
|
||||
app: nginx-m1 # Pod 标签
|
||||
spec: # Pod 规范
|
||||
nodeSelector: # 节点选择:固定跑在 control-plane 上
|
||||
node-role.kubernetes.io/control-plane: "" # 选择带 control-plane 角色标签的节点
|
||||
tolerations: # 容忍污点:让 Pod 能调度到 control-plane
|
||||
- key: node-role.kubernetes.io/control-plane # 污点 key
|
||||
operator: Exists # 存在即匹配
|
||||
effect: NoSchedule # 匹配 NoSchedule 污点效果
|
||||
volumes: # Pod 内卷定义
|
||||
- name: html # 卷名:给 volumeMounts 引用
|
||||
configMap: # 卷来源:ConfigMap
|
||||
name: nginx-m1-html # 引用的 ConfigMap 名称
|
||||
containers: # 容器列表
|
||||
- name: nginx # 容器名
|
||||
image: nginx:alpine # nginx 镜像
|
||||
ports: # 容器端口列表
|
||||
- containerPort: 80 # nginx HTTP 端口
|
||||
volumeMounts: # 容器内挂载点列表
|
||||
- name: html # 对应 volumes[].name
|
||||
mountPath: /usr/share/nginx/html/index.html # 挂载到网页文件路径
|
||||
subPath: index.html # 从 ConfigMap 里选取单个 key
|
||||
readOnly: true # 只读挂载(配置文件更安全)
|
||||
- name: html # 第二处也使用同一个卷
|
||||
mountPath: /etc/nginx/conf.d/default.conf # nginx 配置文件路径
|
||||
subPath: default.conf # 从 ConfigMap 里选取对应 key
|
||||
readOnly: true # 只读挂载
|
||||
---
|
||||
apiVersion: v1 # Service 使用的 API 版本
|
||||
kind: Service # 网络抽象:把 Pod 暴露成稳定访问入口
|
||||
metadata: # Service 标识
|
||||
name: nginx-m1 # Service 名称
|
||||
namespace: default # Service 所在命名空间
|
||||
spec: # Service 期望状态
|
||||
selector: # Service 按标签选择后端 Pod
|
||||
app: nginx-m1 # 选择 nginx-m1 Pod
|
||||
ports: # Service 端口映射
|
||||
- port: 80 # Service 端口
|
||||
targetPort: 80 # 转发到 Pod 的端口
|
||||
---
|
||||
apiVersion: traefik.io/v1alpha1 # Traefik Middleware 使用的 API 版本
|
||||
kind: Middleware # 路由中间件:stripPrefix
|
||||
metadata: # Middleware 标识
|
||||
name: stripprefix-m1 # Middleware 名称
|
||||
namespace: default # 命名空间
|
||||
spec: # Middleware 配置
|
||||
stripPrefix: # 去掉前缀
|
||||
prefixes: # 要剔除的前缀列表
|
||||
- /demo-m1 # 本矩阵的路径前缀
|
||||
---
|
||||
apiVersion: networking.k8s.io/v1 # Ingress 使用的 API 版本
|
||||
kind: Ingress # 入口资源:把路径转发到 Service
|
||||
metadata: # Ingress 标识
|
||||
name: nginx-m1 # Ingress 名称
|
||||
namespace: default # 命名空间
|
||||
annotations: # Ingress 注解:Traefik 用来绑定中间件
|
||||
traefik.ingress.kubernetes.io/router.middlewares: default-stripprefix-m1@kubernetescrd # 绑定 stripprefix-m1
|
||||
spec: # Ingress 规则
|
||||
rules: # 规则列表
|
||||
- http: # HTTP 规则
|
||||
paths: # 路径匹配列表
|
||||
- path: /demo-m1 # 匹配路径
|
||||
pathType: Prefix # 前缀匹配类型
|
||||
backend: # 后端目标
|
||||
service: # 后端 Service
|
||||
name: nginx-m1 # Service 名
|
||||
port: # Service 端口
|
||||
number: 80 # 端口号
|
||||
|
||||
6
ansible/files/02-01/README.md
Normal file
6
ansible/files/02-01/README.md
Normal file
@@ -0,0 +1,6 @@
|
||||
# 02-01(nginx 分课)
|
||||
|
||||
本目录 YAML 与 `ansible/files/02-05/` 中对应课节清单为**同构副本**,专供本 `doc_id` 解耦学习与手工复制。
|
||||
|
||||
- **手动**:将清单拷到目标机路径,按文档改字段后执行 `kubectl` / bash(不必使用 verify)。
|
||||
- **自动**:`./ansible/bin/verify.sh run 02-01`。
|
||||
95
ansible/files/02-02/02-control-ingressroute.yaml
Normal file
95
ansible/files/02-02/02-control-ingressroute.yaml
Normal file
@@ -0,0 +1,95 @@
|
||||
# 03-02: Nginx + 控制节点 + IngressRoute(M2)
|
||||
# 路径 /demo-m2,指定一台控制节点(按实际 FQDN 修改 kubernetes.io/hostname)
|
||||
# ConfigMap:首页 + default.conf,X-Backend: M2 便于区分
|
||||
---
|
||||
apiVersion: v1 # ConfigMap 使用的 API 版本
|
||||
kind: ConfigMap # 配置资源类型:ConfigMap
|
||||
metadata: # ConfigMap 标识信息
|
||||
name: nginx-m2-html # ConfigMap 名称
|
||||
namespace: default # 命名空间
|
||||
data: # ConfigMap 数据区
|
||||
index.html: | # HTML 内容:会挂载到 nginx 的网页目录
|
||||
<!DOCTYPE html>
|
||||
<html><head><meta charset="utf-8"><title>M2</title></head>
|
||||
<body><h1>M2</h1><p>控制节点 + IngressRoute</p></body></html>
|
||||
default.conf: | # nginx 配置:通过 subPath 单文件挂载到 conf.d/default.conf
|
||||
server { listen 80; server_name localhost; root /usr/share/nginx/html; index index.html; location / { add_header X-Backend "M2"; try_files $uri $uri/ /index.html; } }
|
||||
---
|
||||
apiVersion: apps/v1 # Deployment 使用的 API 版本
|
||||
kind: Deployment # 工作负载:Deployment
|
||||
metadata: # Deployment 标识信息
|
||||
name: nginx-m2 # Deployment 名称
|
||||
namespace: default # 部署命名空间
|
||||
labels: # 标签集合
|
||||
app: nginx-m2 # 应用标签
|
||||
matrix: "02-05-m2" # 矩阵编号标签
|
||||
spec: # Deployment 期望状态
|
||||
replicas: 1 # 副本数:单副本便于验证
|
||||
selector: # Deployment 选择 Pod
|
||||
matchLabels: # 标签匹配集合(用于选中模板 Pod)
|
||||
app: nginx-m2 # 必须与 template.metadata.labels 对上
|
||||
template: # Pod 模板
|
||||
metadata: # Pod 元信息
|
||||
labels: # Pod 标签
|
||||
app: nginx-m2 # Pod 标签
|
||||
spec: # Pod 规范
|
||||
nodeSelector: # 固定调度节点(按实际修改)
|
||||
kubernetes.io/hostname: ylc61 # 目标节点主机名
|
||||
volumes: # 卷定义
|
||||
- name: html # 卷名
|
||||
configMap: # 卷来源为 ConfigMap
|
||||
name: nginx-m2-html # 引用的 ConfigMap 名称
|
||||
containers: # 容器列表
|
||||
- name: nginx # 容器名
|
||||
image: nginx:alpine # nginx 镜像
|
||||
ports: # 容器端口声明
|
||||
- containerPort: 80 # nginx 监听端口
|
||||
volumeMounts: # 容器内挂载点
|
||||
- name: html # 对应 volumes[].name
|
||||
mountPath: /usr/share/nginx/html/index.html # 挂到网页文件
|
||||
subPath: index.html # 使用 ConfigMap 的 index.html key
|
||||
readOnly: true # 配置只读挂载
|
||||
- name: html # 第二处配置仍复用该卷
|
||||
mountPath: /etc/nginx/conf.d/default.conf # 挂到 nginx 配置文件
|
||||
subPath: default.conf # 使用 ConfigMap 的 default.conf key
|
||||
readOnly: true # 只读挂载
|
||||
---
|
||||
apiVersion: v1 # Service 使用的 API 版本
|
||||
kind: Service # 网络抽象:为 Pod 提供稳定访问地址
|
||||
metadata: # Service 标识
|
||||
name: nginx-m2 # Service 名称
|
||||
namespace: default # 命名空间
|
||||
spec: # Service 期望状态
|
||||
selector: # 通过标签选择后端 Pod
|
||||
app: nginx-m2 # 选择 app 标签为 nginx-m2 的 Pod
|
||||
ports: # Service 端口映射
|
||||
- port: 80 # Service 暴露端口
|
||||
targetPort: 80 # 转发到 Pod 容器端口
|
||||
---
|
||||
apiVersion: traefik.io/v1alpha1 # Traefik Middleware 使用的 API 版本
|
||||
kind: Middleware # 中间件类型:stripPrefix
|
||||
metadata: # Middleware 标识
|
||||
name: stripprefix-m2 # Middleware 名称
|
||||
namespace: default # 命名空间
|
||||
spec: # 中间件配置
|
||||
stripPrefix: # 去掉路径前缀
|
||||
prefixes: # 需要剔除的前缀列表
|
||||
- /demo-m2 # 本矩阵的路径前缀
|
||||
---
|
||||
apiVersion: traefik.io/v1alpha1 # IngressRoute 的 API 版本
|
||||
kind: IngressRoute # 路由资源类型
|
||||
metadata: # IngressRoute 标识
|
||||
name: nginx-m2 # 路由名称
|
||||
namespace: default # 命名空间
|
||||
spec: # 路由规则
|
||||
entryPoints: # Traefik 入口点列表
|
||||
- web # 使用 web entrypoint
|
||||
routes: # 路由列表
|
||||
- match: PathPrefix(`/demo-m2`) # 匹配 /demo-m2 前缀
|
||||
kind: Rule # 规则类型:Rule
|
||||
middlewares: # 绑定中间件(去前缀)
|
||||
- name: stripprefix-m2 # 使用 stripprefix-m2
|
||||
services: # 匹配后转发的服务
|
||||
- name: nginx-m2 # 后端 Service 名称
|
||||
port: 80 # 后端 Service 端口
|
||||
|
||||
6
ansible/files/02-02/README.md
Normal file
6
ansible/files/02-02/README.md
Normal file
@@ -0,0 +1,6 @@
|
||||
# 02-02(nginx 分课)
|
||||
|
||||
本目录 YAML 与 `ansible/files/02-05/` 中对应课节清单为**同构副本**,专供本 `doc_id` 解耦学习与手工复制。
|
||||
|
||||
- **手动**:将清单拷到目标机路径,按文档改字段后执行 `kubectl` / bash(不必使用 verify)。
|
||||
- **自动**:`./ansible/bin/verify.sh run 02-02`。
|
||||
97
ansible/files/02-03/03-worker-ingress.yaml
Normal file
97
ansible/files/02-03/03-worker-ingress.yaml
Normal file
@@ -0,0 +1,97 @@
|
||||
# 03-03: Nginx + 工作节点 + Ingress(M3)
|
||||
# 路径 /demo-m3,随机一台工作节点(nodeSelector: node-role.kubernetes.io/worker)
|
||||
# ConfigMap:首页 + default.conf,X-Backend: M3 便于区分
|
||||
---
|
||||
apiVersion: v1 # ConfigMap 使用的 API 版本
|
||||
kind: ConfigMap # 配置资源类型:ConfigMap
|
||||
metadata: # 对该 ConfigMap 的标识信息
|
||||
name: nginx-m3-html # ConfigMap 名称
|
||||
namespace: default # 命名空间
|
||||
data: # ConfigMap 数据键值区
|
||||
index.html: | # HTML 内容:会挂载到 nginx 网页目录(内部内容行不改动)
|
||||
<!DOCTYPE html>
|
||||
<html><head><meta charset="utf-8"><title>M3</title></head>
|
||||
<body><h1>M3</h1><p>工作节点 + Ingress</p></body></html>
|
||||
default.conf: | # nginx 配置:通过 subPath 单文件挂载到 conf.d/default.conf(内部内容行不改动)
|
||||
server { listen 80; server_name localhost; root /usr/share/nginx/html; index index.html; location / { add_header X-Backend "M3"; try_files $uri $uri/ /index.html; } }
|
||||
---
|
||||
apiVersion: apps/v1 # Deployment 使用的 API 版本
|
||||
kind: Deployment # 工作负载:Deployment
|
||||
metadata: # Deployment 标识信息
|
||||
name: nginx-m3 # Deployment 名称
|
||||
namespace: default # 部署命名空间
|
||||
labels: # 额外标签(用于筛选/统计)
|
||||
app: nginx-m3 # 应用标签
|
||||
matrix: "02-05-m3" # 矩阵编号标签
|
||||
spec: # Deployment 期望状态
|
||||
replicas: 1 # 副本数:这里为 1
|
||||
selector: # Deployment 用于选择 Pod 的条件
|
||||
matchLabels: # 标签匹配集合(用于选中模板 Pod)
|
||||
app: nginx-m3 # 必须与 template.metadata.labels 对上
|
||||
template: # Pod 模板
|
||||
metadata: # Pod 元信息
|
||||
labels: # Pod 标签
|
||||
app: nginx-m3 # Pod 标签
|
||||
spec: # Pod 规范
|
||||
nodeSelector: # 固定跑到 worker 节点
|
||||
node-role.kubernetes.io/worker: "" # worker 节点 selector
|
||||
volumes: # 卷定义
|
||||
- name: html # 卷名(供 volumeMounts 引用)
|
||||
configMap: # 卷来源:ConfigMap
|
||||
name: nginx-m3-html # 引用的 ConfigMap 名称
|
||||
containers: # 容器列表
|
||||
- name: nginx # 容器名
|
||||
image: nginx:alpine # nginx 镜像
|
||||
ports: # 容器端口声明
|
||||
- containerPort: 80 # nginx HTTP 端口
|
||||
volumeMounts: # 容器内挂载点
|
||||
- name: html # 对应 volumes[].name
|
||||
mountPath: /usr/share/nginx/html/index.html # 挂到网页首页
|
||||
subPath: index.html # 从 ConfigMap 取该 key
|
||||
readOnly: true # 配置只读
|
||||
- name: html # 第二处仍引用同一个卷
|
||||
mountPath: /etc/nginx/conf.d/default.conf # 挂到 nginx 配置文件路径
|
||||
subPath: default.conf # 从 ConfigMap 取该 key
|
||||
readOnly: true # 配置只读
|
||||
---
|
||||
apiVersion: v1 # Service 使用的 API 版本
|
||||
kind: Service # 网络抽象:把 Pod 暴露成稳定访问入口
|
||||
metadata: # Service 标识
|
||||
name: nginx-m3 # Service 名称
|
||||
namespace: default # 命名空间
|
||||
spec: # Service 期望状态
|
||||
selector: # Service 通过标签选中后端 Pod
|
||||
app: nginx-m3 # 选择 app 标签
|
||||
ports: # Service 端口映射列表
|
||||
- port: 80 # Service 暴露端口
|
||||
targetPort: 80 # 转发到 Pod 的容器端口
|
||||
---
|
||||
apiVersion: traefik.io/v1alpha1 # Traefik Middleware API 版本
|
||||
kind: Middleware # 中间件类型:stripPrefix
|
||||
metadata: # Middleware 标识
|
||||
name: stripprefix-m3 # 名称
|
||||
namespace: default # 命名空间
|
||||
spec: # 中间件配置
|
||||
stripPrefix: # 去掉指定路径前缀
|
||||
prefixes: # 前缀列表
|
||||
- /demo-m3 # 本矩阵路径前缀
|
||||
---
|
||||
apiVersion: networking.k8s.io/v1 # Ingress 使用的 API 版本
|
||||
kind: Ingress # 入口资源:把路径转发到 Service
|
||||
metadata: # Ingress 标识
|
||||
name: nginx-m3 # Ingress 名称
|
||||
namespace: default # 命名空间
|
||||
annotations: # Traefik 注解:绑定中间件
|
||||
traefik.ingress.kubernetes.io/router.middlewares: default-stripprefix-m3@kubernetescrd # 绑定 stripprefix-m3 中间件
|
||||
spec: # Ingress 规则
|
||||
rules: # 规则列表
|
||||
- http: # HTTP 规则
|
||||
paths: # 路径匹配列表
|
||||
- path: /demo-m3 # 匹配路径
|
||||
pathType: Prefix # 前缀匹配类型
|
||||
backend: # 后端目标
|
||||
service: # 后端是 Service
|
||||
name: nginx-m3 # Service 名称
|
||||
port: # 后端端口
|
||||
number: 80 # 端口号
|
||||
|
||||
6
ansible/files/02-03/README.md
Normal file
6
ansible/files/02-03/README.md
Normal file
@@ -0,0 +1,6 @@
|
||||
# 02-03(nginx 分课)
|
||||
|
||||
本目录 YAML 与 `ansible/files/02-05/` 中对应课节清单为**同构副本**,专供本 `doc_id` 解耦学习与手工复制。
|
||||
|
||||
- **手动**:将清单拷到目标机路径,按文档改字段后执行 `kubectl` / bash(不必使用 verify)。
|
||||
- **自动**:`./ansible/bin/verify.sh run 02-03`。
|
||||
95
ansible/files/02-04/04-worker-ingressroute.yaml
Normal file
95
ansible/files/02-04/04-worker-ingressroute.yaml
Normal file
@@ -0,0 +1,95 @@
|
||||
# 03-04: Nginx + 工作节点 + IngressRoute(M4)
|
||||
# 路径 /demo-m4,指定一台工作节点(按实际 FQDN 修改 kubernetes.io/hostname)
|
||||
# ConfigMap:首页 + default.conf,X-Backend: M4 便于区分
|
||||
---
|
||||
apiVersion: v1 # ConfigMap 使用的 API 版本
|
||||
kind: ConfigMap # 配置资源类型:ConfigMap
|
||||
metadata: # ConfigMap 标识信息
|
||||
name: nginx-m4-html # ConfigMap 名称
|
||||
namespace: default # 命名空间
|
||||
data: # ConfigMap 数据区
|
||||
index.html: | # HTML 内容:挂载到 nginx 网页目录(内部内容行不改动)
|
||||
<!DOCTYPE html>
|
||||
<html><head><meta charset="utf-8"><title>M4</title></head>
|
||||
<body><h1>M4</h1><p>工作节点 + IngressRoute</p></body></html>
|
||||
default.conf: | # nginx 配置:通过 subPath 挂载到 conf.d/default.conf(内部内容行不改动)
|
||||
server { listen 80; server_name localhost; root /usr/share/nginx/html; index index.html; location / { add_header X-Backend "M4"; try_files $uri $uri/ /index.html; } }
|
||||
---
|
||||
apiVersion: apps/v1 # Deployment 使用的 API 版本
|
||||
kind: Deployment # 工作负载:Deployment
|
||||
metadata: # Deployment 标识信息
|
||||
name: nginx-m4 # Deployment 名称
|
||||
namespace: default # 部署命名空间
|
||||
labels: # 应用标签/矩阵标签
|
||||
app: nginx-m4 # 应用标签
|
||||
matrix: "02-05-m4" # 矩阵编号
|
||||
spec: # Deployment 期望状态
|
||||
replicas: 1 # 副本数
|
||||
selector: # Deployment 选择器
|
||||
matchLabels: # 标签匹配集合(用于选中模板 Pod)
|
||||
app: nginx-m4 # 必须与 template.metadata.labels 对上
|
||||
template: # Pod 模板
|
||||
metadata: # Pod 元信息
|
||||
labels: # Pod 标签
|
||||
app: nginx-m4 # Pod 标签
|
||||
spec: # Pod 规范
|
||||
nodeSelector: # 固定运行的工作节点
|
||||
kubernetes.io/hostname: ylc64 # worker 节点主机名
|
||||
volumes: # 卷定义
|
||||
- name: html # 卷名
|
||||
configMap: # 卷来源
|
||||
name: nginx-m4-html # 引用的 ConfigMap 名称
|
||||
containers: # 容器列表
|
||||
- name: nginx # 容器名
|
||||
image: nginx:alpine # nginx 镜像
|
||||
ports: # 容器端口
|
||||
- containerPort: 80 # HTTP 端口
|
||||
volumeMounts: # 容器内挂载
|
||||
- name: html # 引用 volumes[].name
|
||||
mountPath: /usr/share/nginx/html/index.html # 挂到首页文件
|
||||
subPath: index.html # 取 ConfigMap 的 index.html key
|
||||
readOnly: true # 只读
|
||||
- name: html # 仍复用同一个卷
|
||||
mountPath: /etc/nginx/conf.d/default.conf # 挂到 nginx 配置文件
|
||||
subPath: default.conf # 取 ConfigMap 的 default.conf key
|
||||
readOnly: true # 只读
|
||||
---
|
||||
apiVersion: v1 # Service 使用的 API 版本
|
||||
kind: Service # 网络抽象:把 Pod 暴露为稳定入口
|
||||
metadata: # Service 标识
|
||||
name: nginx-m4 # Service 名称
|
||||
namespace: default # 命名空间
|
||||
spec: # Service 期望状态
|
||||
selector: # Service 选择器
|
||||
app: nginx-m4 # 选中后端 Pod
|
||||
ports: # 端口映射列表
|
||||
- port: 80 # Service 端口
|
||||
targetPort: 80 # 转发到 Pod 容器端口
|
||||
---
|
||||
apiVersion: traefik.io/v1alpha1 # Traefik Middleware API 版本
|
||||
kind: Middleware # 中间件:stripPrefix
|
||||
metadata: # Middleware 标识
|
||||
name: stripprefix-m4 # 名称
|
||||
namespace: default # 命名空间
|
||||
spec: # 中间件配置
|
||||
stripPrefix: # 去除路径前缀
|
||||
prefixes: # 前缀列表
|
||||
- /demo-m4 # 本矩阵路径前缀
|
||||
---
|
||||
apiVersion: traefik.io/v1alpha1 # IngressRoute API 版本
|
||||
kind: IngressRoute # Traefik 路由 CRD
|
||||
metadata: # IngressRoute 标识
|
||||
name: nginx-m4 # 路由名称
|
||||
namespace: default # 命名空间
|
||||
spec: # IngressRoute 规则
|
||||
entryPoints: # 入口点列表
|
||||
- web # web(HTTP)
|
||||
routes: # 路由列表
|
||||
- match: PathPrefix(`/demo-m4`) # 匹配 /demo-m4 前缀
|
||||
kind: Rule # 规则类型
|
||||
middlewares: # 绑定中间件
|
||||
- name: stripprefix-m4 # 需要去前缀
|
||||
services: # 后端服务列表
|
||||
- name: nginx-m4 # Service 名称
|
||||
port: 80 # Service 端口
|
||||
|
||||
6
ansible/files/02-04/README.md
Normal file
6
ansible/files/02-04/README.md
Normal file
@@ -0,0 +1,6 @@
|
||||
# 02-04(nginx 分课)
|
||||
|
||||
本目录 YAML 与 `ansible/files/02-05/` 中对应课节清单为**同构副本**,专供本 `doc_id` 解耦学习与手工复制。
|
||||
|
||||
- **手动**:将清单拷到目标机路径,按文档改字段后执行 `kubectl` / bash(不必使用 verify)。
|
||||
- **自动**:`./ansible/bin/verify.sh run 02-04`。
|
||||
@@ -39,3 +39,8 @@ spec: # chart 注入配置的具体内容
|
||||
nodeSelector: # 把 Traefik Pod 固定到指定节点(配合 RWO 本地存储更安全)
|
||||
kubernetes.io/hostname: ylc61 # 固定节点主机名(按你的实际节点修改)
|
||||
|
||||
# ping 绑定 websecure 时,chart 默认对 8080 做 HTTP /ping;须与 03-03 一致改为 HTTPS:8443
|
||||
deployment:
|
||||
healthchecksPort: 8443
|
||||
healthchecksScheme: HTTPS
|
||||
|
||||
|
||||
@@ -9,13 +9,17 @@ metadata:
|
||||
namespace: kube-system
|
||||
spec:
|
||||
valuesContent: |-
|
||||
# chart 39.x:expose 须为表,布尔会与默认 values 合并冲突并导致 helm upgrade 模板失败
|
||||
ports:
|
||||
web:
|
||||
expose: true
|
||||
expose:
|
||||
default: true
|
||||
websecure:
|
||||
expose: true
|
||||
expose:
|
||||
default: true
|
||||
traefik:
|
||||
expose: true
|
||||
expose:
|
||||
default: true
|
||||
|
||||
additionalArguments:
|
||||
# Dashboard
|
||||
@@ -48,13 +52,20 @@ spec:
|
||||
nodeSelector:
|
||||
kubernetes.io/hostname: ylc61
|
||||
|
||||
# persistence:将 /data 持久化(local-path PVC),保证 acme.json 落盘
|
||||
# ping 绑定 websecure 时,chart 默认仍对 traefik(8080) 做 HTTP /ping → 404;与 chart 39 对齐探针
|
||||
deployment:
|
||||
healthchecksPort: 8443
|
||||
healthchecksScheme: HTTPS
|
||||
|
||||
# persistence:将 /data 持久化,保证 acme.json 落盘
|
||||
# 显式 local-path:避免集群默认 StorageClass 为 longhorn 等未就绪时 Pod 长期 Pending
|
||||
persistence:
|
||||
enabled: true
|
||||
name: data
|
||||
accessMode: ReadWriteOnce
|
||||
size: 128Mi
|
||||
path: /data
|
||||
storageClass: local-path
|
||||
|
||||
---
|
||||
apiVersion: traefik.io/v1alpha1
|
||||
|
||||
@@ -1,38 +1,31 @@
|
||||
# docs/03-04-k3s-cloudflare-tunnel-配置接入.md — 替换 TUNNEL_TOKEN 后应用
|
||||
apiVersion: v1 # Secret 使用的 Kubernetes API 版本
|
||||
kind: Secret # 资源类型:Secret(用于保存 Cloudflare Tunnel token)
|
||||
metadata: # 元信息(名称/命名空间等)
|
||||
name: cloudflared-credentials # Secret 名称(Deployment 中会引用)
|
||||
namespace: kube-system # Secret 所在命名空间
|
||||
type: Opaque # Secret 类型(普通自定义键值)
|
||||
stringData: # 以字符串方式提供 Secret 数据(便于直接写明文)
|
||||
TUNNEL_TOKEN: "<YOUR_TUNNEL_TOKEN>" # Cloudflare Tunnel Token(用你真实的 token 替换)
|
||||
# docs/03-04-k3s-cloudflare-tunnel-配置接入.md
|
||||
# Secret `cloudflared-credentials`(key=TUNNEL_TOKEN)由 verify playbook / 手工 kubectl create secret 创建,勿与此 Deployment 同 apply,避免覆盖 token。
|
||||
# 参考:ansible/playbooks/verify/03-04.yml → ensure-cloudflared-tunnel-secret
|
||||
---
|
||||
apiVersion: apps/v1 # Deployment 使用的 API 版本
|
||||
kind: Deployment # 工作负载:Deployment(管理 Pod 副本)
|
||||
metadata: # Deployment 元信息
|
||||
name: cloudflared # Deployment 名称
|
||||
namespace: kube-system # 部署到的命名空间
|
||||
spec: # Deployment 期望状态
|
||||
replicas: 1 # 副本数(Tunnel 通常只跑一个副本即可)
|
||||
selector: # Deployment 选择器:匹配 template 的 Pod
|
||||
matchLabels: # 必须与 template.metadata.labels 对齐
|
||||
app: cloudflared # 应用标签
|
||||
template: # Pod 模板
|
||||
metadata: # Pod 元信息
|
||||
labels: # Pod 标签
|
||||
app: cloudflared # 与 selector.matchLabels 相同
|
||||
spec: # Pod 规范
|
||||
containers: # 容器列表
|
||||
- name: cloudflared # 容器名
|
||||
image: cloudflare/cloudflared:latest # cloudflared 镜像
|
||||
args: # 容器启动参数
|
||||
- tunnel # 命令子参数:tunnel
|
||||
- run # 命令子参数:run
|
||||
env: # 环境变量
|
||||
- name: TUNNEL_TOKEN # 容器内使用的环境变量名
|
||||
valueFrom: # 从某个来源取值
|
||||
secretKeyRef: # 从 Secret 的 key 取值
|
||||
name: cloudflared-credentials # Secret 名称
|
||||
key: TUNNEL_TOKEN # Secret 中的 key
|
||||
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: cloudflared
|
||||
namespace: kube-system
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: cloudflared
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: cloudflared
|
||||
spec:
|
||||
containers:
|
||||
- name: cloudflared
|
||||
image: cloudflare/cloudflared:latest
|
||||
args:
|
||||
- tunnel
|
||||
- run
|
||||
env:
|
||||
- name: TUNNEL_TOKEN
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: cloudflared-credentials
|
||||
key: TUNNEL_TOKEN
|
||||
|
||||
@@ -4,6 +4,7 @@ kind: PersistentVolume # 资源类型:持久卷(集群级)
|
||||
metadata: # PV 元信息
|
||||
name: nfs-pv-demo # PV 名称
|
||||
spec: # PV 规格
|
||||
storageClassName: "" # 显式禁用默认 StorageClass,供静态绑定 PVC 使用
|
||||
capacity: # 容量声明
|
||||
storage: 20Gi # PV 总容量
|
||||
accessModes: # 访问模式列表
|
||||
@@ -19,6 +20,7 @@ metadata: # PVC 元信息
|
||||
name: nfs-pvc-demo # PVC 名称
|
||||
namespace: default # PVC 所在命名空间
|
||||
spec: # PVC 规格
|
||||
storageClassName: "" # 与 PV 对齐,避免被默认 longhorn class 注入导致绑定失败
|
||||
accessModes: # 访问模式要求
|
||||
- ReadWriteMany # 申请 RWX 访问模式
|
||||
resources: # 资源请求
|
||||
|
||||
27
ansible/files/03-06/nfs-pvc-verify-job.yaml
Normal file
27
ansible/files/03-06/nfs-pvc-verify-job.yaml
Normal file
@@ -0,0 +1,27 @@
|
||||
# docs/03-06-k3s-使用nfs存储.md — 自动化验收用:挂载 nfs-pvc-demo 并写文件(OC3 证据)
|
||||
# 与 nfs-pv-pvc-demo.yaml 配合;手动学习 PV/PVC 时可不应用本文件。
|
||||
apiVersion: batch/v1
|
||||
kind: Job
|
||||
metadata:
|
||||
name: nfs-pvc-verify-demo
|
||||
namespace: default
|
||||
spec:
|
||||
backoffLimit: 3
|
||||
template:
|
||||
spec:
|
||||
restartPolicy: Never
|
||||
containers:
|
||||
- name: verify-write
|
||||
image: busybox:1.36
|
||||
command:
|
||||
- /bin/sh
|
||||
- -c
|
||||
- echo "ok-$(date +%s)" > /data/.verify-nfs && sync && test -f /data/.verify-nfs
|
||||
volumeMounts:
|
||||
- name: data
|
||||
mountPath: /data
|
||||
readOnly: false
|
||||
volumes:
|
||||
- name: data
|
||||
persistentVolumeClaim:
|
||||
claimName: nfs-pvc-demo
|
||||
9
ansible/files/03-08/README.md
Normal file
9
ansible/files/03-08/README.md
Normal file
@@ -0,0 +1,9 @@
|
||||
# 03-08(K3s HA 配置与切换)
|
||||
|
||||
| 文件 | 说明 |
|
||||
|------|------|
|
||||
| `k3s-server-ha-env.example.sh` | 外部 datastore、`tls-san`、第二节点 `K3S_URL`/`TOKEN` 等环境变量示例(**非** Kubernetes 清单) |
|
||||
|
||||
- **手动**:将示例中的连接串、LB IP、token 替换为真实值;与 systemd/k3s 安装参数对照 [docs/03-08-k3s-ha-集群配置与切换.md](../../../docs/03-08-k3s-ha-集群配置与切换.md)。
|
||||
- **自动**:`./ansible/bin/verify.sh run 03-08`(noop + 基线;HA 步骤仍以文档与手工为准)。
|
||||
- 本篇**不提供**可 `kubectl apply` 的 HA 安装真源(控制平面由 k3s 与 datastore 决定)。
|
||||
17
ansible/files/03-08/k3s-server-ha-env.example.sh
Normal file
17
ansible/files/03-08/k3s-server-ha-env.example.sh
Normal file
@@ -0,0 +1,17 @@
|
||||
#!/usr/bin/env bash
|
||||
# k3s 多 server + 外部 datastore 参数备忘(示例,勿直接 source 到生产)
|
||||
# 完整步骤见:docs/03-08-k3s-ha-集群配置与切换.md
|
||||
# 真源目录:ansible/files/03-08/
|
||||
|
||||
# --- 首个 server(示例 IP 请替换)---
|
||||
# export K3S_DATASTORE_ENDPOINT='postgres://k3s:CHANGE_ME@192.168.2.50:5432/k3s?sslmode=disable'
|
||||
# sudo k3s server --datastore-endpoint="$K3S_DATASTORE_ENDPOINT" --tls-san 192.168.2.60
|
||||
|
||||
# --- 第二个 server(经 LB 加入,token 与控制端一致)---
|
||||
# export K3S_URL='https://192.168.2.60:6443'
|
||||
# export K3S_TOKEN='<SAME_TOKEN_AS_SERVER1>'
|
||||
# export K3S_DATASTORE_ENDPOINT='postgres://k3s:CHANGE_ME@192.168.2.50:5432/k3s?sslmode=disable'
|
||||
# sudo k3s server --server "$K3S_URL" --token "$K3S_TOKEN" \
|
||||
# --datastore-endpoint="$K3S_DATASTORE_ENDPOINT" --tls-san 192.168.2.60
|
||||
|
||||
echo "[INFO] 编辑本文件中的占位符后,将命令复制到节点上执行;或写入 systemd ExecStart。"
|
||||
9
ansible/files/03-09/README.md
Normal file
9
ansible/files/03-09/README.md
Normal file
@@ -0,0 +1,9 @@
|
||||
# 03-09(GitOps 框架)
|
||||
|
||||
| 文件 | 说明 |
|
||||
|------|------|
|
||||
| `argocd-namespace.example.yaml` | 仅创建 `argocd` 命名空间的极简示例(正式安装请用官方 `install.yaml` 或 Helm) |
|
||||
|
||||
- **手动**:集群声明性配置的**主真源**建议在独立 GitOps 仓库(见 [docs/03-09-k3s-gitops-集群配置管理.md](../../../docs/03-09-k3s-gitops-集群配置管理.md));本目录只放与本仓库文档对齐的**示意**文件。
|
||||
- **自动**:`./ansible/bin/verify.sh run 03-09`(noop + 基线)。
|
||||
- 同一套 YAML 路径既可供你 `kubectl apply -f` 试跑,也与自动化验收引用同一目录,避免文档与仓库脱节。
|
||||
8
ansible/files/03-09/argocd-namespace.example.yaml
Normal file
8
ansible/files/03-09/argocd-namespace.example.yaml
Normal file
@@ -0,0 +1,8 @@
|
||||
# 极简示例:为后续 Argo CD 安装预留命名空间
|
||||
# 生产请改用官方清单: https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
|
||||
apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
name: argocd
|
||||
labels:
|
||||
app.kubernetes.io/part-of: argocd
|
||||
59
ansible/files/04-02/04-02-nodejs-demo.yaml
Normal file
59
ansible/files/04-02/04-02-nodejs-demo.yaml
Normal file
@@ -0,0 +1,59 @@
|
||||
# 对应文档:docs/04-02-nodejs-镜像与运行命令.md
|
||||
# 累积:04-01 + 固定镜像 tag、imagePullPolicy、command/args
|
||||
apiVersion: apps/v1 # Deployment API 版本
|
||||
kind: Deployment # 工作负载:Deployment
|
||||
metadata: # Deployment 元信息
|
||||
name: nodejs-demo # Deployment 名称
|
||||
namespace: default # 命名空间
|
||||
spec: # Deployment 规格
|
||||
replicas: 1 # 副本数
|
||||
selector: # Deployment 选择器
|
||||
matchLabels: # 标签匹配集合
|
||||
app: nodejs-demo # 匹配 app=nodejs-demo 的 Pod
|
||||
template: # Pod 模板
|
||||
metadata: # Pod 元信息
|
||||
labels: # Pod 标签
|
||||
app: nodejs-demo # 与 selector.matchLabels 对齐
|
||||
spec: # Pod 规格
|
||||
containers: # 容器列表
|
||||
- name: nodejs-demo # 容器名
|
||||
image: node:18.20-alpine # 固定 tag 的 Node.js 镜像
|
||||
imagePullPolicy: IfNotPresent # 拉取策略:本地有则不重复拉取
|
||||
command: ["node"] # 主命令
|
||||
args: # 命令参数
|
||||
- "-e" # 执行内联脚本
|
||||
- "require('http').createServer((req,res)=>res.end('Hello from pinned image')).listen(3000)" # Node.js 内联服务逻辑
|
||||
ports: # 容器端口
|
||||
- containerPort: 3000 # 应用监听端口
|
||||
---
|
||||
apiVersion: v1 # Service API 版本
|
||||
kind: Service # Service 资源
|
||||
metadata: # Service 元信息
|
||||
name: nodejs-demo # Service 名称
|
||||
namespace: default # 命名空间
|
||||
spec: # Service 规格
|
||||
selector: # 选择后端 Pod
|
||||
app: nodejs-demo # 选中 app=nodejs-demo
|
||||
ports: # 端口映射
|
||||
- port: 80 # Service 暴露端口
|
||||
targetPort: 3000 # 转发到容器端口
|
||||
---
|
||||
apiVersion: networking.k8s.io/v1 # Ingress API 版本
|
||||
kind: Ingress # Ingress 资源
|
||||
metadata: # Ingress 元信息
|
||||
name: nodejs-demo # Ingress 名称
|
||||
namespace: default # 命名空间
|
||||
annotations: # Traefik 注解
|
||||
traefik.ingress.kubernetes.io/router.entrypoints: web # 使用 web(HTTP) 入口
|
||||
spec: # Ingress 规则
|
||||
rules: # 规则列表
|
||||
- http: # HTTP 路由
|
||||
paths: # 路径列表
|
||||
- path: /node # 匹配路径前缀
|
||||
pathType: Prefix # 前缀匹配
|
||||
backend: # 后端目标
|
||||
service: # 后端 Service
|
||||
name: nodejs-demo # Service 名称
|
||||
port: # Service 端口
|
||||
number: 80 # 端口号
|
||||
|
||||
6
ansible/files/04-02/README.md
Normal file
6
ansible/files/04-02/README.md
Normal file
@@ -0,0 +1,6 @@
|
||||
# 04-02(nodejs 分课)
|
||||
|
||||
本目录 `04-02-nodejs-demo.yaml` 由 `ansible/files/04-01/` 同名文件复制,与总集目录内文件**同构**,专供本课独立阅读;改本课清单时以本目录为准即可最小化影响其他篇。
|
||||
|
||||
- **手动**:`kubectl apply -f ansible/files/04-02/04-02-nodejs-demo.yaml`(按需改字段)。
|
||||
- **自动**:`./ansible/bin/verify.sh run 04-02`。
|
||||
76
ansible/files/04-03/04-03-nodejs-demo.yaml
Normal file
76
ansible/files/04-03/04-03-nodejs-demo.yaml
Normal file
@@ -0,0 +1,76 @@
|
||||
# 对应文档:docs/04-03-nodejs-环境变量与配置注入.md
|
||||
# 累积:04-02 + ConfigMap + 通过 env 注入 APP_MSG(镜像仍用 18.20-alpine 与 04-02 一致)
|
||||
apiVersion: v1 # ConfigMap API 版本
|
||||
kind: ConfigMap # 配置资源:ConfigMap
|
||||
metadata: # ConfigMap 元信息
|
||||
name: nodejs-demo-config # ConfigMap 名称
|
||||
namespace: default # 命名空间
|
||||
data: # 配置键值
|
||||
APP_MSG: "Hello from ConfigMap" # 注入给应用的消息内容
|
||||
---
|
||||
apiVersion: apps/v1 # Deployment API 版本
|
||||
kind: Deployment # 工作负载:Deployment
|
||||
metadata: # Deployment 元信息
|
||||
name: nodejs-demo # Deployment 名称
|
||||
namespace: default # 命名空间
|
||||
spec: # Deployment 规格
|
||||
replicas: 1 # 副本数
|
||||
selector: # Deployment 选择器
|
||||
matchLabels: # 标签匹配集合
|
||||
app: nodejs-demo # 匹配 app=nodejs-demo 的 Pod
|
||||
template: # Pod 模板
|
||||
metadata: # Pod 元信息
|
||||
labels: # Pod 标签
|
||||
app: nodejs-demo # 与 selector.matchLabels 对齐
|
||||
spec: # Pod 规格
|
||||
containers: # 容器列表
|
||||
- name: nodejs-demo # 容器名
|
||||
image: node:18.20-alpine # Node.js 镜像
|
||||
imagePullPolicy: IfNotPresent # 拉取策略
|
||||
env: # 环境变量注入
|
||||
- name: APP_MSG # 环境变量名
|
||||
valueFrom: # 从资源引用取值
|
||||
configMapKeyRef: # 从 ConfigMap key 读取
|
||||
name: nodejs-demo-config # ConfigMap 名称
|
||||
key: APP_MSG # ConfigMap 键名
|
||||
command: # 启动命令
|
||||
- node # 运行 node
|
||||
- "-e" # 执行内联脚本
|
||||
- | # 多行 JS 脚本(内部内容不改动)
|
||||
const http=require('http');
|
||||
const msg=process.env.APP_MSG||'no env';
|
||||
http.createServer((q,s)=>s.end(msg)).listen(3000);
|
||||
ports: # 容器端口
|
||||
- containerPort: 3000 # 应用监听端口
|
||||
---
|
||||
apiVersion: v1 # Service API 版本
|
||||
kind: Service # Service 资源
|
||||
metadata: # Service 元信息
|
||||
name: nodejs-demo # Service 名称
|
||||
namespace: default # 命名空间
|
||||
spec: # Service 规格
|
||||
selector: # 选择后端 Pod
|
||||
app: nodejs-demo # 选中 app=nodejs-demo
|
||||
ports: # 端口映射
|
||||
- port: 80 # Service 暴露端口
|
||||
targetPort: 3000 # 转发到容器端口
|
||||
---
|
||||
apiVersion: networking.k8s.io/v1 # Ingress API 版本
|
||||
kind: Ingress # Ingress 资源
|
||||
metadata: # Ingress 元信息
|
||||
name: nodejs-demo # Ingress 名称
|
||||
namespace: default # 命名空间
|
||||
annotations: # Traefik 注解
|
||||
traefik.ingress.kubernetes.io/router.entrypoints: web # 使用 web(HTTP) 入口
|
||||
spec: # Ingress 规则
|
||||
rules: # 规则列表
|
||||
- http: # HTTP 路由
|
||||
paths: # 路径列表
|
||||
- path: /node # 匹配路径前缀
|
||||
pathType: Prefix # 前缀匹配
|
||||
backend: # 后端目标
|
||||
service: # 后端 Service
|
||||
name: nodejs-demo # Service 名称
|
||||
port: # Service 端口
|
||||
number: 80 # 端口号
|
||||
|
||||
6
ansible/files/04-03/README.md
Normal file
6
ansible/files/04-03/README.md
Normal file
@@ -0,0 +1,6 @@
|
||||
# 04-03(nodejs 分课)
|
||||
|
||||
本目录 `04-03-nodejs-demo.yaml` 由 `ansible/files/04-01/` 同名文件复制,与总集目录内文件**同构**,专供本课独立阅读;改本课清单时以本目录为准即可最小化影响其他篇。
|
||||
|
||||
- **手动**:`kubectl apply -f ansible/files/04-03/04-03-nodejs-demo.yaml`(按需改字段)。
|
||||
- **自动**:`./ansible/bin/verify.sh run 04-03`。
|
||||
76
ansible/files/04-04/04-04-nodejs-demo.yaml
Normal file
76
ansible/files/04-04/04-04-nodejs-demo.yaml
Normal file
@@ -0,0 +1,76 @@
|
||||
# 对应文档:docs/04-04-nodejs-端口与Service.md
|
||||
# 累积:04-03 + 容器与进程改监听 8080,Service targetPort 对齐
|
||||
apiVersion: v1 # ConfigMap API 版本
|
||||
kind: ConfigMap # 配置资源:ConfigMap
|
||||
metadata: # ConfigMap 元信息
|
||||
name: nodejs-demo-config # ConfigMap 名称
|
||||
namespace: default # 命名空间
|
||||
data: # 配置键值
|
||||
APP_MSG: "Hello from ConfigMap" # 注入给应用的消息内容
|
||||
---
|
||||
apiVersion: apps/v1 # Deployment API 版本
|
||||
kind: Deployment # 工作负载:Deployment
|
||||
metadata: # Deployment 元信息
|
||||
name: nodejs-demo # Deployment 名称
|
||||
namespace: default # 命名空间
|
||||
spec: # Deployment 规格
|
||||
replicas: 1 # 副本数
|
||||
selector: # Deployment 选择器
|
||||
matchLabels: # 标签匹配集合
|
||||
app: nodejs-demo # 匹配 app=nodejs-demo 的 Pod
|
||||
template: # Pod 模板
|
||||
metadata: # Pod 元信息
|
||||
labels: # Pod 标签
|
||||
app: nodejs-demo # 与 selector.matchLabels 对齐
|
||||
spec: # Pod 规格
|
||||
containers: # 容器列表
|
||||
- name: nodejs-demo # 容器名
|
||||
image: node:18.20-alpine # Node.js 镜像
|
||||
imagePullPolicy: IfNotPresent # 拉取策略
|
||||
env: # 环境变量注入
|
||||
- name: APP_MSG # 环境变量名
|
||||
valueFrom: # 从资源引用取值
|
||||
configMapKeyRef: # 从 ConfigMap key 读取
|
||||
name: nodejs-demo-config # ConfigMap 名称
|
||||
key: APP_MSG # ConfigMap 键名
|
||||
command: # 启动命令
|
||||
- node # 运行 node
|
||||
- "-e" # 执行内联脚本
|
||||
- | # 多行 JS 脚本(内部内容不改动)
|
||||
const http=require('http');
|
||||
const msg=process.env.APP_MSG||'no env';
|
||||
http.createServer((q,s)=>s.end(msg)).listen(8080);
|
||||
ports: # 容器端口
|
||||
- containerPort: 8080 # 应用监听端口
|
||||
---
|
||||
apiVersion: v1 # Service API 版本
|
||||
kind: Service # Service 资源
|
||||
metadata: # Service 元信息
|
||||
name: nodejs-demo # Service 名称
|
||||
namespace: default # 命名空间
|
||||
spec: # Service 规格
|
||||
selector: # 选择后端 Pod
|
||||
app: nodejs-demo # 选中 app=nodejs-demo
|
||||
ports: # 端口映射
|
||||
- port: 80 # Service 暴露端口
|
||||
targetPort: 8080 # 转发到容器端口
|
||||
---
|
||||
apiVersion: networking.k8s.io/v1 # Ingress API 版本
|
||||
kind: Ingress # Ingress 资源
|
||||
metadata: # Ingress 元信息
|
||||
name: nodejs-demo # Ingress 名称
|
||||
namespace: default # 命名空间
|
||||
annotations: # Traefik 注解
|
||||
traefik.ingress.kubernetes.io/router.entrypoints: web # 使用 web(HTTP) 入口
|
||||
spec: # Ingress 规则
|
||||
rules: # 规则列表
|
||||
- http: # HTTP 路由
|
||||
paths: # 路径列表
|
||||
- path: /node # 匹配路径前缀
|
||||
pathType: Prefix # 前缀匹配
|
||||
backend: # 后端目标
|
||||
service: # 后端 Service
|
||||
name: nodejs-demo # Service 名称
|
||||
port: # Service 端口
|
||||
number: 80 # 端口号
|
||||
|
||||
6
ansible/files/04-04/README.md
Normal file
6
ansible/files/04-04/README.md
Normal file
@@ -0,0 +1,6 @@
|
||||
# 04-04(nodejs 分课)
|
||||
|
||||
本目录 `04-04-nodejs-demo.yaml` 由 `ansible/files/04-01/` 同名文件复制,与总集目录内文件**同构**,专供本课独立阅读;改本课清单时以本目录为准即可最小化影响其他篇。
|
||||
|
||||
- **手动**:`kubectl apply -f ansible/files/04-04/04-04-nodejs-demo.yaml`(按需改字段)。
|
||||
- **自动**:`./ansible/bin/verify.sh run 04-04`。
|
||||
83
ansible/files/04-05/04-05-nodejs-demo.yaml
Normal file
83
ansible/files/04-05/04-05-nodejs-demo.yaml
Normal file
@@ -0,0 +1,83 @@
|
||||
# 对应文档:docs/04-05-nodejs-资源请求与限制.md
|
||||
# 累积:04-04 + resources.requests/limits
|
||||
apiVersion: v1 # ConfigMap API 版本
|
||||
kind: ConfigMap # 配置资源:ConfigMap
|
||||
metadata: # ConfigMap 元信息
|
||||
name: nodejs-demo-config # ConfigMap 名称
|
||||
namespace: default # 命名空间
|
||||
data: # 配置键值
|
||||
APP_MSG: "Hello from ConfigMap" # 注入给应用的消息内容
|
||||
---
|
||||
apiVersion: apps/v1 # Deployment API 版本
|
||||
kind: Deployment # 工作负载:Deployment
|
||||
metadata: # Deployment 元信息
|
||||
name: nodejs-demo # Deployment 名称
|
||||
namespace: default # 命名空间
|
||||
spec: # Deployment 规格
|
||||
replicas: 1 # 副本数
|
||||
selector: # Deployment 选择器
|
||||
matchLabels: # 标签匹配集合
|
||||
app: nodejs-demo # 匹配 app=nodejs-demo 的 Pod
|
||||
template: # Pod 模板
|
||||
metadata: # Pod 元信息
|
||||
labels: # Pod 标签
|
||||
app: nodejs-demo # 与 selector.matchLabels 对齐
|
||||
spec: # Pod 规格
|
||||
containers: # 容器列表
|
||||
- name: nodejs-demo # 容器名
|
||||
image: node:18.20-alpine # Node.js 镜像
|
||||
imagePullPolicy: IfNotPresent # 拉取策略
|
||||
env: # 环境变量注入
|
||||
- name: APP_MSG # 环境变量名
|
||||
valueFrom: # 从资源引用取值
|
||||
configMapKeyRef: # 从 ConfigMap key 读取
|
||||
name: nodejs-demo-config # ConfigMap 名称
|
||||
key: APP_MSG # ConfigMap 键名
|
||||
command: # 启动命令
|
||||
- node # 运行 node
|
||||
- "-e" # 执行内联脚本
|
||||
- | # 多行 JS 脚本(内部内容不改动)
|
||||
const http=require('http');
|
||||
const msg=process.env.APP_MSG||'no env';
|
||||
http.createServer((q,s)=>s.end(msg)).listen(8080);
|
||||
ports: # 容器端口
|
||||
- containerPort: 8080 # 应用监听端口
|
||||
resources: # 资源请求与限制
|
||||
requests: # 最小资源请求
|
||||
cpu: "50m" # 请求 CPU
|
||||
memory: "64Mi" # 请求内存
|
||||
limits: # 资源上限
|
||||
cpu: "500m" # CPU 限制
|
||||
memory: "256Mi" # 内存限制
|
||||
---
|
||||
apiVersion: v1 # Service API 版本
|
||||
kind: Service # Service 资源
|
||||
metadata: # Service 元信息
|
||||
name: nodejs-demo # Service 名称
|
||||
namespace: default # 命名空间
|
||||
spec: # Service 规格
|
||||
selector: # 选择后端 Pod
|
||||
app: nodejs-demo # 选中 app=nodejs-demo
|
||||
ports: # 端口映射
|
||||
- port: 80 # Service 暴露端口
|
||||
targetPort: 8080 # 转发到容器端口
|
||||
---
|
||||
apiVersion: networking.k8s.io/v1 # Ingress API 版本
|
||||
kind: Ingress # Ingress 资源
|
||||
metadata: # Ingress 元信息
|
||||
name: nodejs-demo # Ingress 名称
|
||||
namespace: default # 命名空间
|
||||
annotations: # Traefik 注解
|
||||
traefik.ingress.kubernetes.io/router.entrypoints: web # 使用 web(HTTP) 入口
|
||||
spec: # Ingress 规则
|
||||
rules: # 规则列表
|
||||
- http: # HTTP 路由
|
||||
paths: # 路径列表
|
||||
- path: /node # 匹配路径前缀
|
||||
pathType: Prefix # 前缀匹配
|
||||
backend: # 后端目标
|
||||
service: # 后端 Service
|
||||
name: nodejs-demo # Service 名称
|
||||
port: # Service 端口
|
||||
number: 80 # 端口号
|
||||
|
||||
6
ansible/files/04-05/README.md
Normal file
6
ansible/files/04-05/README.md
Normal file
@@ -0,0 +1,6 @@
|
||||
# 04-05(nodejs 分课)
|
||||
|
||||
本目录 `04-05-nodejs-demo.yaml` 由 `ansible/files/04-01/` 同名文件复制,与总集目录内文件**同构**,专供本课独立阅读;改本课清单时以本目录为准即可最小化影响其他篇。
|
||||
|
||||
- **手动**:`kubectl apply -f ansible/files/04-05/04-05-nodejs-demo.yaml`(按需改字段)。
|
||||
- **自动**:`./ansible/bin/verify.sh run 04-05`。
|
||||
95
ansible/files/04-06/04-06-nodejs-demo.yaml
Normal file
95
ansible/files/04-06/04-06-nodejs-demo.yaml
Normal file
@@ -0,0 +1,95 @@
|
||||
# 对应文档:docs/04-06-nodejs-探针与健康检查.md
|
||||
# 累积:04-05 + livenessProbe/readinessProbe(端口 8080,路径 /)
|
||||
apiVersion: v1 # ConfigMap API 版本
|
||||
kind: ConfigMap # 配置资源:ConfigMap
|
||||
metadata: # ConfigMap 元信息
|
||||
name: nodejs-demo-config # ConfigMap 名称
|
||||
namespace: default # 命名空间
|
||||
data: # 配置键值
|
||||
APP_MSG: "Hello from ConfigMap" # 注入给应用的消息内容
|
||||
---
|
||||
apiVersion: apps/v1 # Deployment API 版本
|
||||
kind: Deployment # 工作负载:Deployment
|
||||
metadata: # Deployment 元信息
|
||||
name: nodejs-demo # Deployment 名称
|
||||
namespace: default # 命名空间
|
||||
spec: # Deployment 规格
|
||||
replicas: 1 # 副本数
|
||||
selector: # Deployment 选择器
|
||||
matchLabels: # 标签匹配集合
|
||||
app: nodejs-demo # 匹配 app=nodejs-demo 的 Pod
|
||||
template: # Pod 模板
|
||||
metadata: # Pod 元信息
|
||||
labels: # Pod 标签
|
||||
app: nodejs-demo # 与 selector.matchLabels 对齐
|
||||
spec: # Pod 规格
|
||||
containers: # 容器列表
|
||||
- name: nodejs-demo # 容器名
|
||||
image: node:18.20-alpine # Node.js 镜像
|
||||
imagePullPolicy: IfNotPresent # 拉取策略
|
||||
env: # 环境变量注入
|
||||
- name: APP_MSG # 环境变量名
|
||||
valueFrom: # 从资源引用取值
|
||||
configMapKeyRef: # 从 ConfigMap key 读取
|
||||
name: nodejs-demo-config # ConfigMap 名称
|
||||
key: APP_MSG # ConfigMap 键名
|
||||
command: # 启动命令
|
||||
- node # 运行 node
|
||||
- "-e" # 执行内联脚本
|
||||
- | # 多行 JS 脚本(内部内容不改动)
|
||||
const http=require('http');
|
||||
const msg=process.env.APP_MSG||'no env';
|
||||
http.createServer((q,s)=>s.end(msg)).listen(8080);
|
||||
ports: # 容器端口
|
||||
- containerPort: 8080 # 应用监听端口
|
||||
resources: # 资源请求与限制
|
||||
requests: # 最小资源请求
|
||||
cpu: "50m" # 请求 CPU
|
||||
memory: "64Mi" # 请求内存
|
||||
limits: # 资源上限
|
||||
cpu: "500m" # CPU 限制
|
||||
memory: "256Mi" # 内存限制
|
||||
livenessProbe: # 存活探针(判断容器是否需要重启)
|
||||
httpGet: # 通过 HTTP 探测
|
||||
path: / # 探测路径
|
||||
port: 8080 # 探测端口
|
||||
initialDelaySeconds: 3 # 启动后首次探测延迟
|
||||
periodSeconds: 10 # 探测周期
|
||||
readinessProbe: # 就绪探针(判断是否接收流量)
|
||||
httpGet: # 通过 HTTP 探测
|
||||
path: / # 探测路径
|
||||
port: 8080 # 探测端口
|
||||
initialDelaySeconds: 2 # 启动后首次探测延迟
|
||||
periodSeconds: 5 # 探测周期
|
||||
---
|
||||
apiVersion: v1 # Service API 版本
|
||||
kind: Service # Service 资源
|
||||
metadata: # Service 元信息
|
||||
name: nodejs-demo # Service 名称
|
||||
namespace: default # 命名空间
|
||||
spec: # Service 规格
|
||||
selector: # 选择后端 Pod
|
||||
app: nodejs-demo # 选中 app=nodejs-demo
|
||||
ports: # 端口映射
|
||||
- port: 80 # Service 暴露端口
|
||||
targetPort: 8080 # 转发到容器端口
|
||||
---
|
||||
apiVersion: networking.k8s.io/v1 # Ingress API 版本
|
||||
kind: Ingress # Ingress 资源
|
||||
metadata: # Ingress 元信息
|
||||
name: nodejs-demo # Ingress 名称
|
||||
namespace: default # 命名空间
|
||||
annotations: # Traefik 注解
|
||||
traefik.ingress.kubernetes.io/router.entrypoints: web # 使用 web(HTTP) 入口
|
||||
spec: # Ingress 规则
|
||||
rules: # 规则列表
|
||||
- http: # HTTP 路由
|
||||
paths: # 路径列表
|
||||
- path: /node # 匹配路径前缀
|
||||
pathType: Prefix # 前缀匹配
|
||||
backend: # 后端目标
|
||||
service: # 后端 Service
|
||||
name: nodejs-demo # Service 名称
|
||||
port: # Service 端口
|
||||
number: 80 # 端口号
|
||||
|
||||
6
ansible/files/04-06/README.md
Normal file
6
ansible/files/04-06/README.md
Normal file
@@ -0,0 +1,6 @@
|
||||
# 04-06(nodejs 分课)
|
||||
|
||||
本目录 `04-06-nodejs-demo.yaml` 由 `ansible/files/04-01/` 同名文件复制,与总集目录内文件**同构**,专供本课独立阅读;改本课清单时以本目录为准即可最小化影响其他篇。
|
||||
|
||||
- **手动**:`kubectl apply -f ansible/files/04-06/04-06-nodejs-demo.yaml`(按需改字段)。
|
||||
- **自动**:`./ansible/bin/verify.sh run 04-06`。
|
||||
97
ansible/files/04-07/04-07-nodejs-demo.yaml
Normal file
97
ansible/files/04-07/04-07-nodejs-demo.yaml
Normal file
@@ -0,0 +1,97 @@
|
||||
# 对应文档:docs/04-07-nodejs-调度与亲和.md
|
||||
# 累积:04-06 + nodeSelector(默认 ylc62,请改为本集群节点短主机名)
|
||||
apiVersion: v1 # ConfigMap API 版本
|
||||
kind: ConfigMap # 配置资源:ConfigMap
|
||||
metadata: # ConfigMap 元信息
|
||||
name: nodejs-demo-config # ConfigMap 名称
|
||||
namespace: default # 命名空间
|
||||
data: # 配置键值
|
||||
APP_MSG: "Hello from ConfigMap" # 注入给应用的消息内容
|
||||
---
|
||||
apiVersion: apps/v1 # Deployment API 版本
|
||||
kind: Deployment # 工作负载:Deployment
|
||||
metadata: # Deployment 元信息
|
||||
name: nodejs-demo # Deployment 名称
|
||||
namespace: default # 命名空间
|
||||
spec: # Deployment 规格
|
||||
replicas: 1 # 副本数
|
||||
selector: # Deployment 选择器
|
||||
matchLabels: # 标签匹配集合
|
||||
app: nodejs-demo # 匹配 app=nodejs-demo 的 Pod
|
||||
template: # Pod 模板
|
||||
metadata: # Pod 元信息
|
||||
labels: # Pod 标签
|
||||
app: nodejs-demo # 与 selector.matchLabels 对齐
|
||||
spec: # Pod 规格
|
||||
nodeSelector: # 调度到指定节点
|
||||
kubernetes.io/hostname: ylc62 # 节点主机名(按实际修改)
|
||||
containers: # 容器列表
|
||||
- name: nodejs-demo # 容器名
|
||||
image: node:18.20-alpine # Node.js 镜像
|
||||
imagePullPolicy: IfNotPresent # 拉取策略
|
||||
env: # 环境变量注入
|
||||
- name: APP_MSG # 环境变量名
|
||||
valueFrom: # 从资源引用取值
|
||||
configMapKeyRef: # 从 ConfigMap key 读取
|
||||
name: nodejs-demo-config # ConfigMap 名称
|
||||
key: APP_MSG # ConfigMap 键名
|
||||
command: # 启动命令
|
||||
- node # 运行 node
|
||||
- "-e" # 执行内联脚本
|
||||
- | # 多行 JS 脚本(内部内容不改动)
|
||||
const http=require('http');
|
||||
const msg=process.env.APP_MSG||'no env';
|
||||
http.createServer((q,s)=>s.end(msg)).listen(8080);
|
||||
ports: # 容器端口
|
||||
- containerPort: 8080 # 应用监听端口
|
||||
resources: # 资源请求与限制
|
||||
requests: # 最小资源请求
|
||||
cpu: "50m" # 请求 CPU
|
||||
memory: "64Mi" # 请求内存
|
||||
limits: # 资源上限
|
||||
cpu: "500m" # CPU 限制
|
||||
memory: "256Mi" # 内存限制
|
||||
livenessProbe: # 存活探针
|
||||
httpGet: # HTTP 探测
|
||||
path: / # 探测路径
|
||||
port: 8080 # 探测端口
|
||||
initialDelaySeconds: 3 # 启动后首次探测延迟
|
||||
periodSeconds: 10 # 探测周期
|
||||
readinessProbe: # 就绪探针
|
||||
httpGet: # HTTP 探测
|
||||
path: / # 探测路径
|
||||
port: 8080 # 探测端口
|
||||
initialDelaySeconds: 2 # 启动后首次探测延迟
|
||||
periodSeconds: 5 # 探测周期
|
||||
---
|
||||
apiVersion: v1 # Service API 版本
|
||||
kind: Service # Service 资源
|
||||
metadata: # Service 元信息
|
||||
name: nodejs-demo # Service 名称
|
||||
namespace: default # 命名空间
|
||||
spec: # Service 规格
|
||||
selector: # 选择后端 Pod
|
||||
app: nodejs-demo # 选中 app=nodejs-demo
|
||||
ports: # 端口映射
|
||||
- port: 80 # Service 暴露端口
|
||||
targetPort: 8080 # 转发到容器端口
|
||||
---
|
||||
apiVersion: networking.k8s.io/v1 # Ingress API 版本
|
||||
kind: Ingress # Ingress 资源
|
||||
metadata: # Ingress 元信息
|
||||
name: nodejs-demo # Ingress 名称
|
||||
namespace: default # 命名空间
|
||||
annotations: # Traefik 注解
|
||||
traefik.ingress.kubernetes.io/router.entrypoints: web # 使用 web(HTTP) 入口
|
||||
spec: # Ingress 规则
|
||||
rules: # 规则列表
|
||||
- http: # HTTP 路由
|
||||
paths: # 路径列表
|
||||
- path: /node # 匹配路径前缀
|
||||
pathType: Prefix # 前缀匹配
|
||||
backend: # 后端目标
|
||||
service: # 后端 Service
|
||||
name: nodejs-demo # Service 名称
|
||||
port: # Service 端口
|
||||
number: 80 # 端口号
|
||||
|
||||
6
ansible/files/04-07/README.md
Normal file
6
ansible/files/04-07/README.md
Normal file
@@ -0,0 +1,6 @@
|
||||
# 04-07(nodejs 分课)
|
||||
|
||||
本目录 `04-07-nodejs-demo.yaml` 由 `ansible/files/04-01/` 同名文件复制,与总集目录内文件**同构**,专供本课独立阅读;改本课清单时以本目录为准即可最小化影响其他篇。
|
||||
|
||||
- **手动**:`kubectl apply -f ansible/files/04-07/04-07-nodejs-demo.yaml`(按需改字段)。
|
||||
- **自动**:`./ansible/bin/verify.sh run 04-07`。
|
||||
110
ansible/files/04-08/04-08-nodejs-demo.yaml
Normal file
110
ansible/files/04-08/04-08-nodejs-demo.yaml
Normal file
@@ -0,0 +1,110 @@
|
||||
# 对应文档:docs/04-08-nodejs-安全上下文.md
|
||||
# 累积:04-07 + pod securityContext.fsGroup、容器 securityContext、只读根、/tmp emptyDir
|
||||
apiVersion: v1 # ConfigMap API 版本
|
||||
kind: ConfigMap # 配置资源:ConfigMap
|
||||
metadata: # ConfigMap 元信息
|
||||
name: nodejs-demo-config # ConfigMap 名称
|
||||
namespace: default # 命名空间
|
||||
data: # 配置键值
|
||||
APP_MSG: "Hello from ConfigMap" # 注入给应用的消息内容
|
||||
---
|
||||
apiVersion: apps/v1 # Deployment API 版本
|
||||
kind: Deployment # 工作负载:Deployment
|
||||
metadata: # Deployment 元信息
|
||||
name: nodejs-demo # Deployment 名称
|
||||
namespace: default # 命名空间
|
||||
spec: # Deployment 规格
|
||||
replicas: 1 # 副本数
|
||||
selector: # Deployment 选择器
|
||||
matchLabels: # 标签匹配集合
|
||||
app: nodejs-demo # 匹配 app=nodejs-demo 的 Pod
|
||||
template: # Pod 模板
|
||||
metadata: # Pod 元信息
|
||||
labels: # Pod 标签
|
||||
app: nodejs-demo # 与 selector.matchLabels 对齐
|
||||
spec: # Pod 规格
|
||||
nodeSelector: # 调度到指定节点
|
||||
kubernetes.io/hostname: ylc62 # 节点主机名(按实际修改)
|
||||
securityContext: # Pod 级安全上下文
|
||||
fsGroup: 1000 # 挂载卷文件组 ID
|
||||
containers: # 容器列表
|
||||
- name: nodejs-demo # 容器名
|
||||
image: node:18.20-alpine # Node.js 镜像
|
||||
imagePullPolicy: IfNotPresent # 拉取策略
|
||||
securityContext: # 容器级安全上下文
|
||||
allowPrivilegeEscalation: false # 禁止提权
|
||||
runAsNonRoot: true # 强制非 root 运行
|
||||
runAsUser: 1000 # 运行用户 UID
|
||||
readOnlyRootFilesystem: true # 根文件系统只读
|
||||
env: # 环境变量注入
|
||||
- name: APP_MSG # 环境变量名
|
||||
valueFrom: # 从资源引用取值
|
||||
configMapKeyRef: # 从 ConfigMap key 读取
|
||||
name: nodejs-demo-config # ConfigMap 名称
|
||||
key: APP_MSG # ConfigMap 键名
|
||||
command: # 启动命令
|
||||
- node # 运行 node
|
||||
- "-e" # 执行内联脚本
|
||||
- | # 多行 JS 脚本(内部内容不改动)
|
||||
const http=require('http');
|
||||
const msg=process.env.APP_MSG||'no env';
|
||||
http.createServer((q,s)=>s.end(msg)).listen(8080);
|
||||
ports: # 容器端口
|
||||
- containerPort: 8080 # 应用监听端口
|
||||
resources: # 资源请求与限制
|
||||
requests: # 最小资源请求
|
||||
cpu: "50m" # 请求 CPU
|
||||
memory: "64Mi" # 请求内存
|
||||
limits: # 资源上限
|
||||
cpu: "500m" # CPU 限制
|
||||
memory: "256Mi" # 内存限制
|
||||
livenessProbe: # 存活探针
|
||||
httpGet: # HTTP 探测
|
||||
path: / # 探测路径
|
||||
port: 8080 # 探测端口
|
||||
initialDelaySeconds: 3 # 启动后首次探测延迟
|
||||
periodSeconds: 10 # 探测周期
|
||||
readinessProbe: # 就绪探针
|
||||
httpGet: # HTTP 探测
|
||||
path: / # 探测路径
|
||||
port: 8080 # 探测端口
|
||||
initialDelaySeconds: 2 # 启动后首次探测延迟
|
||||
periodSeconds: 5 # 探测周期
|
||||
volumeMounts: # 卷挂载
|
||||
- name: tmp # 引用临时卷
|
||||
mountPath: /tmp # 容器内临时目录
|
||||
volumes: # 卷定义
|
||||
- name: tmp # 临时卷名称
|
||||
emptyDir: {} # 空目录卷(Pod 生命周期内)
|
||||
---
|
||||
apiVersion: v1 # Service API 版本
|
||||
kind: Service # Service 资源
|
||||
metadata: # Service 元信息
|
||||
name: nodejs-demo # Service 名称
|
||||
namespace: default # 命名空间
|
||||
spec: # Service 规格
|
||||
selector: # 选择后端 Pod
|
||||
app: nodejs-demo # 选中 app=nodejs-demo
|
||||
ports: # 端口映射
|
||||
- port: 80 # Service 暴露端口
|
||||
targetPort: 8080 # 转发到容器端口
|
||||
---
|
||||
apiVersion: networking.k8s.io/v1 # Ingress API 版本
|
||||
kind: Ingress # Ingress 资源
|
||||
metadata: # Ingress 元信息
|
||||
name: nodejs-demo # Ingress 名称
|
||||
namespace: default # 命名空间
|
||||
annotations: # Traefik 注解
|
||||
traefik.ingress.kubernetes.io/router.entrypoints: web # 使用 web(HTTP) 入口
|
||||
spec: # Ingress 规则
|
||||
rules: # 规则列表
|
||||
- http: # HTTP 路由
|
||||
paths: # 路径列表
|
||||
- path: /node # 匹配路径前缀
|
||||
pathType: Prefix # 前缀匹配
|
||||
backend: # 后端目标
|
||||
service: # 后端 Service
|
||||
name: nodejs-demo # Service 名称
|
||||
port: # Service 端口
|
||||
number: 80 # 端口号
|
||||
|
||||
6
ansible/files/04-08/README.md
Normal file
6
ansible/files/04-08/README.md
Normal file
@@ -0,0 +1,6 @@
|
||||
# 04-08(nodejs 分课)
|
||||
|
||||
本目录 `04-08-nodejs-demo.yaml` 由 `ansible/files/04-01/` 同名文件复制,与总集目录内文件**同构**,专供本课独立阅读;改本课清单时以本目录为准即可最小化影响其他篇。
|
||||
|
||||
- **手动**:`kubectl apply -f ansible/files/04-08/04-08-nodejs-demo.yaml`(按需改字段)。
|
||||
- **自动**:`./ansible/bin/verify.sh run 04-08`。
|
||||
128
ansible/files/04-09/04-09-nodejs-demo.yaml
Normal file
128
ansible/files/04-09/04-09-nodejs-demo.yaml
Normal file
@@ -0,0 +1,128 @@
|
||||
# 对应文档:docs/04-09-nodejs-存储与卷.md
|
||||
# 累积:04-08 + PVC nodejs-demo-data(默认 storageClassName: local-path,可按集群改为 longhorn 等)+ 挂载 /data
|
||||
apiVersion: v1 # PVC API 版本
|
||||
kind: PersistentVolumeClaim # 持久卷声明
|
||||
metadata: # PVC 元信息
|
||||
name: nodejs-demo-data # PVC 名称
|
||||
namespace: default # 命名空间
|
||||
spec: # PVC 规格
|
||||
accessModes: # 访问模式
|
||||
- ReadWriteOnce # RWO:同一时间仅单节点挂载读写
|
||||
storageClassName: local-path # 存储类(按集群可改)
|
||||
resources: # 资源请求
|
||||
requests: # 配额请求
|
||||
storage: 1Gi # 申请容量
|
||||
---
|
||||
apiVersion: v1 # ConfigMap API 版本
|
||||
kind: ConfigMap # 配置资源
|
||||
metadata: # ConfigMap 元信息
|
||||
name: nodejs-demo-config # ConfigMap 名称
|
||||
namespace: default # 命名空间
|
||||
data: # 配置键值
|
||||
APP_MSG: "Hello from ConfigMap" # 示例消息内容
|
||||
---
|
||||
apiVersion: apps/v1 # Deployment API 版本
|
||||
kind: Deployment # 工作负载:Deployment
|
||||
metadata: # Deployment 元信息
|
||||
name: nodejs-demo # Deployment 名称
|
||||
namespace: default # 命名空间
|
||||
spec: # Deployment 规格
|
||||
replicas: 1 # 副本数
|
||||
selector: # Pod 选择器
|
||||
matchLabels: # 标签匹配集合
|
||||
app: nodejs-demo # 匹配 app=nodejs-demo 的 Pod
|
||||
template: # Pod 模板
|
||||
metadata: # Pod 元信息
|
||||
labels: # Pod 标签
|
||||
app: nodejs-demo # 与 selector.matchLabels 对齐
|
||||
spec: # Pod 规格
|
||||
nodeSelector: # 节点选择
|
||||
kubernetes.io/hostname: ylc62 # 固定到指定节点(按实际修改)
|
||||
securityContext: # Pod 级安全上下文
|
||||
fsGroup: 1000 # 挂载卷文件组 ID
|
||||
containers: # 容器列表
|
||||
- name: nodejs-demo # 容器名
|
||||
image: node:18.20-alpine # Node.js 镜像
|
||||
imagePullPolicy: IfNotPresent # 拉取策略
|
||||
securityContext: # 容器级安全上下文
|
||||
allowPrivilegeEscalation: false # 禁止提权
|
||||
runAsNonRoot: true # 非 root 运行
|
||||
runAsUser: 1000 # 运行用户 UID
|
||||
readOnlyRootFilesystem: true # 根文件系统只读
|
||||
env: # 环境变量
|
||||
- name: APP_MSG # 环境变量名
|
||||
valueFrom: # 从引用源取值
|
||||
configMapKeyRef: # 从 ConfigMap key 读取
|
||||
name: nodejs-demo-config # ConfigMap 名称
|
||||
key: APP_MSG # ConfigMap 键名
|
||||
command: # 启动命令
|
||||
- node # 执行 node
|
||||
- "-e" # 执行内联脚本
|
||||
- | # 多行 JS 脚本(内容保持原样)
|
||||
const http=require('http');
|
||||
const msg=process.env.APP_MSG||'no env';
|
||||
http.createServer((q,s)=>s.end(msg)).listen(8080);
|
||||
ports: # 容器端口
|
||||
- containerPort: 8080 # 监听端口
|
||||
resources: # 资源请求与限制
|
||||
requests: # 最小资源请求
|
||||
cpu: "50m" # 请求 CPU
|
||||
memory: "64Mi" # 请求内存
|
||||
limits: # 资源上限
|
||||
cpu: "500m" # CPU 限制
|
||||
memory: "256Mi" # 内存限制
|
||||
livenessProbe: # 存活探针
|
||||
httpGet: # HTTP 探测
|
||||
path: / # 探测路径
|
||||
port: 8080 # 探测端口
|
||||
initialDelaySeconds: 3 # 初始延迟
|
||||
periodSeconds: 10 # 探测周期
|
||||
readinessProbe: # 就绪探针
|
||||
httpGet: # HTTP 探测
|
||||
path: / # 探测路径
|
||||
port: 8080 # 探测端口
|
||||
initialDelaySeconds: 2 # 初始延迟
|
||||
periodSeconds: 5 # 探测周期
|
||||
volumeMounts: # 卷挂载
|
||||
- name: tmp # 临时卷名称
|
||||
mountPath: /tmp # 容器内临时目录
|
||||
- name: data # 数据卷名称
|
||||
mountPath: /data # 容器内数据目录
|
||||
volumes: # 卷定义
|
||||
- name: tmp # 临时卷
|
||||
emptyDir: {} # 空目录卷
|
||||
- name: data # 数据卷
|
||||
persistentVolumeClaim: # 卷来源为 PVC
|
||||
claimName: nodejs-demo-data # 绑定 PVC 名称
|
||||
---
|
||||
apiVersion: v1 # Service API 版本
|
||||
kind: Service # Service 资源
|
||||
metadata: # Service 元信息
|
||||
name: nodejs-demo # Service 名称
|
||||
namespace: default # 命名空间
|
||||
spec: # Service 规格
|
||||
selector: # 选择后端 Pod
|
||||
app: nodejs-demo # 选中 app=nodejs-demo
|
||||
ports: # 端口映射
|
||||
- port: 80 # Service 暴露端口
|
||||
targetPort: 8080 # 转发到容器端口
|
||||
---
|
||||
apiVersion: networking.k8s.io/v1 # Ingress API 版本
|
||||
kind: Ingress # Ingress 资源
|
||||
metadata: # Ingress 元信息
|
||||
name: nodejs-demo # Ingress 名称
|
||||
namespace: default # 命名空间
|
||||
annotations: # Traefik 注解
|
||||
traefik.ingress.kubernetes.io/router.entrypoints: web # 使用 web(HTTP) 入口
|
||||
spec: # Ingress 规则
|
||||
rules: # 规则列表
|
||||
- http: # HTTP 路由
|
||||
paths: # 路径列表
|
||||
- path: /node # 路径前缀
|
||||
pathType: Prefix # 前缀匹配
|
||||
backend: # 后端目标
|
||||
service: # 后端 Service
|
||||
name: nodejs-demo # Service 名称
|
||||
port: # Service 端口
|
||||
number: 80 # 端口号
|
||||
|
||||
6
ansible/files/04-09/README.md
Normal file
6
ansible/files/04-09/README.md
Normal file
@@ -0,0 +1,6 @@
|
||||
# 04-09(nodejs 分课)
|
||||
|
||||
本目录 `04-09-nodejs-demo.yaml` 由 `ansible/files/04-01/` 同名文件复制,与总集目录内文件**同构**,专供本课独立阅读;改本课清单时以本目录为准即可最小化影响其他篇。
|
||||
|
||||
- **手动**:`kubectl apply -f ansible/files/04-09/04-09-nodejs-demo.yaml`(按需改字段)。
|
||||
- **自动**:`./ansible/bin/verify.sh run 04-09`。
|
||||
129
ansible/files/04-10/04-10-nodejs-demo.yaml
Normal file
129
ansible/files/04-10/04-10-nodejs-demo.yaml
Normal file
@@ -0,0 +1,129 @@
|
||||
# 对应文档:docs/04-10-nodejs-Ingress与Traefik.md
|
||||
# 累积:04-09 + Ingress 增加 host、path 改为 /api(访问需 Host: app.example.local)
|
||||
apiVersion: v1 # PVC API 版本
|
||||
kind: PersistentVolumeClaim # 持久卷声明
|
||||
metadata: # PVC 元信息
|
||||
name: nodejs-demo-data # PVC 名称
|
||||
namespace: default # 命名空间
|
||||
spec: # PVC 规格
|
||||
accessModes: # 访问模式
|
||||
- ReadWriteOnce # RWO:同一时间仅单节点挂载读写
|
||||
storageClassName: local-path # 存储类
|
||||
resources: # 资源请求
|
||||
requests: # 配额请求
|
||||
storage: 1Gi # 申请容量
|
||||
---
|
||||
apiVersion: v1 # ConfigMap API 版本
|
||||
kind: ConfigMap # 配置资源
|
||||
metadata: # ConfigMap 元信息
|
||||
name: nodejs-demo-config # ConfigMap 名称
|
||||
namespace: default # 命名空间
|
||||
data: # 配置键值
|
||||
APP_MSG: "Hello from ConfigMap" # 示例消息内容
|
||||
---
|
||||
apiVersion: apps/v1 # Deployment API 版本
|
||||
kind: Deployment # 工作负载:Deployment
|
||||
metadata: # Deployment 元信息
|
||||
name: nodejs-demo # Deployment 名称
|
||||
namespace: default # 命名空间
|
||||
spec: # Deployment 规格
|
||||
replicas: 1 # 副本数
|
||||
selector: # Pod 选择器
|
||||
matchLabels: # 标签匹配集合
|
||||
app: nodejs-demo # 匹配 app=nodejs-demo 的 Pod
|
||||
template: # Pod 模板
|
||||
metadata: # Pod 元信息
|
||||
labels: # Pod 标签
|
||||
app: nodejs-demo # 与 selector.matchLabels 对齐
|
||||
spec: # Pod 规格
|
||||
nodeSelector: # 节点选择
|
||||
kubernetes.io/hostname: ylc62 # 固定到指定节点(按实际修改)
|
||||
securityContext: # Pod 级安全上下文
|
||||
fsGroup: 1000 # 挂载卷文件组 ID
|
||||
containers: # 容器列表
|
||||
- name: nodejs-demo # 容器名
|
||||
image: node:18.20-alpine # Node.js 镜像
|
||||
imagePullPolicy: IfNotPresent # 拉取策略
|
||||
securityContext: # 容器级安全上下文
|
||||
allowPrivilegeEscalation: false # 禁止提权
|
||||
runAsNonRoot: true # 非 root 运行
|
||||
runAsUser: 1000 # 运行用户 UID
|
||||
readOnlyRootFilesystem: true # 根文件系统只读
|
||||
env: # 环境变量
|
||||
- name: APP_MSG # 环境变量名
|
||||
valueFrom: # 从引用源取值
|
||||
configMapKeyRef: # 从 ConfigMap key 读取
|
||||
name: nodejs-demo-config # ConfigMap 名称
|
||||
key: APP_MSG # ConfigMap 键名
|
||||
command: # 启动命令
|
||||
- node # 执行 node
|
||||
- "-e" # 执行内联脚本
|
||||
- | # 多行 JS 脚本(内容保持原样)
|
||||
const http=require('http');
|
||||
const msg=process.env.APP_MSG||'no env';
|
||||
http.createServer((q,s)=>s.end(msg)).listen(8080);
|
||||
ports: # 容器端口
|
||||
- containerPort: 8080 # 监听端口
|
||||
resources: # 资源请求与限制
|
||||
requests: # 最小资源请求
|
||||
cpu: "50m" # 请求 CPU
|
||||
memory: "64Mi" # 请求内存
|
||||
limits: # 资源上限
|
||||
cpu: "500m" # CPU 限制
|
||||
memory: "256Mi" # 内存限制
|
||||
livenessProbe: # 存活探针
|
||||
httpGet: # HTTP 探测
|
||||
path: / # 探测路径
|
||||
port: 8080 # 探测端口
|
||||
initialDelaySeconds: 3 # 初始延迟
|
||||
periodSeconds: 10 # 探测周期
|
||||
readinessProbe: # 就绪探针
|
||||
httpGet: # HTTP 探测
|
||||
path: / # 探测路径
|
||||
port: 8080 # 探测端口
|
||||
initialDelaySeconds: 2 # 初始延迟
|
||||
periodSeconds: 5 # 探测周期
|
||||
volumeMounts: # 卷挂载
|
||||
- name: tmp # 临时卷名称
|
||||
mountPath: /tmp # 容器内临时目录
|
||||
- name: data # 数据卷名称
|
||||
mountPath: /data # 容器内数据目录
|
||||
volumes: # 卷定义
|
||||
- name: tmp # 临时卷
|
||||
emptyDir: {} # 空目录卷
|
||||
- name: data # 数据卷
|
||||
persistentVolumeClaim: # 卷来源为 PVC
|
||||
claimName: nodejs-demo-data # 绑定 PVC 名称
|
||||
---
|
||||
apiVersion: v1 # Service API 版本
|
||||
kind: Service # Service 资源
|
||||
metadata: # Service 元信息
|
||||
name: nodejs-demo # Service 名称
|
||||
namespace: default # 命名空间
|
||||
spec: # Service 规格
|
||||
selector: # 选择后端 Pod
|
||||
app: nodejs-demo # 选中 app=nodejs-demo
|
||||
ports: # 端口映射
|
||||
- port: 80 # Service 暴露端口
|
||||
targetPort: 8080 # 转发到容器端口
|
||||
---
|
||||
apiVersion: networking.k8s.io/v1 # Ingress API 版本
|
||||
kind: Ingress # Ingress 资源
|
||||
metadata: # Ingress 元信息
|
||||
name: nodejs-demo # Ingress 名称
|
||||
namespace: default # 命名空间
|
||||
annotations: # Traefik 注解
|
||||
traefik.ingress.kubernetes.io/router.entrypoints: web # 使用 web(HTTP) 入口
|
||||
spec: # Ingress 规则
|
||||
rules: # 规则列表
|
||||
- host: app.example.local # 主机名匹配
|
||||
http: # HTTP 路由
|
||||
paths: # 路径列表
|
||||
- path: /api # 匹配 API 路径前缀
|
||||
pathType: Prefix # 前缀匹配
|
||||
backend: # 后端目标
|
||||
service: # 后端 Service
|
||||
name: nodejs-demo # Service 名称
|
||||
port: # Service 端口
|
||||
number: 80 # 端口号
|
||||
|
||||
6
ansible/files/04-10/README.md
Normal file
6
ansible/files/04-10/README.md
Normal file
@@ -0,0 +1,6 @@
|
||||
# 04-10(nodejs 分课)
|
||||
|
||||
本目录 `04-10-nodejs-demo.yaml` 由 `ansible/files/04-01/` 同名文件复制,与总集目录内文件**同构**,专供本课独立阅读;改本课清单时以本目录为准即可最小化影响其他篇。
|
||||
|
||||
- **手动**:`kubectl apply -f ansible/files/04-10/04-10-nodejs-demo.yaml`(按需改字段)。
|
||||
- **自动**:`./ansible/bin/verify.sh run 04-10`。
|
||||
134
ansible/files/04-11/04-11-nodejs-demo.yaml
Normal file
134
ansible/files/04-11/04-11-nodejs-demo.yaml
Normal file
@@ -0,0 +1,134 @@
|
||||
# 对应文档:docs/04-11-nodejs-副本与滚动发布.md
|
||||
# 累积:04-10 + replicas: 3 + RollingUpdate(maxSurge:1 maxUnavailable:0)
|
||||
apiVersion: v1 # PVC API 版本
|
||||
kind: PersistentVolumeClaim # 持久卷声明
|
||||
metadata: # PVC 元信息
|
||||
name: nodejs-demo-data # PVC 名称
|
||||
namespace: default # 命名空间
|
||||
spec: # PVC 规格
|
||||
accessModes: # 访问模式
|
||||
- ReadWriteOnce # RWO:同一时间仅单节点挂载读写
|
||||
storageClassName: local-path # 存储类
|
||||
resources: # 资源请求
|
||||
requests: # 配额请求
|
||||
storage: 1Gi # 申请容量
|
||||
---
|
||||
apiVersion: v1 # ConfigMap API 版本
|
||||
kind: ConfigMap # 配置资源
|
||||
metadata: # ConfigMap 元信息
|
||||
name: nodejs-demo-config # ConfigMap 名称
|
||||
namespace: default # 命名空间
|
||||
data: # 配置键值
|
||||
APP_MSG: "Hello from ConfigMap" # 示例消息内容
|
||||
---
|
||||
apiVersion: apps/v1 # Deployment API 版本
|
||||
kind: Deployment # 工作负载:Deployment
|
||||
metadata: # Deployment 元信息
|
||||
name: nodejs-demo # Deployment 名称
|
||||
namespace: default # 命名空间
|
||||
spec: # Deployment 规格
|
||||
replicas: 3 # 副本数(高可用)
|
||||
strategy: # 更新策略
|
||||
type: RollingUpdate # 滚动更新
|
||||
rollingUpdate: # 滚动更新参数
|
||||
maxSurge: 1 # 更新时最多额外增加 1 个 Pod
|
||||
maxUnavailable: 0 # 更新时不可用 Pod 数为 0
|
||||
selector: # Pod 选择器
|
||||
matchLabels: # 标签匹配集合
|
||||
app: nodejs-demo # 匹配 app=nodejs-demo 的 Pod
|
||||
template: # Pod 模板
|
||||
metadata: # Pod 元信息
|
||||
labels: # Pod 标签
|
||||
app: nodejs-demo # 与 selector.matchLabels 对齐
|
||||
spec: # Pod 规格
|
||||
nodeSelector: # 节点选择
|
||||
kubernetes.io/hostname: ylc62 # 固定到指定节点(按实际修改)
|
||||
securityContext: # Pod 级安全上下文
|
||||
fsGroup: 1000 # 挂载卷文件组 ID
|
||||
containers: # 容器列表
|
||||
- name: nodejs-demo # 容器名
|
||||
image: node:18.20-alpine # Node.js 镜像
|
||||
imagePullPolicy: IfNotPresent # 拉取策略
|
||||
securityContext: # 容器级安全上下文
|
||||
allowPrivilegeEscalation: false # 禁止提权
|
||||
runAsNonRoot: true # 非 root 运行
|
||||
runAsUser: 1000 # 运行用户 UID
|
||||
readOnlyRootFilesystem: true # 根文件系统只读
|
||||
env: # 环境变量
|
||||
- name: APP_MSG # 环境变量名
|
||||
valueFrom: # 从引用源取值
|
||||
configMapKeyRef: # 从 ConfigMap key 读取
|
||||
name: nodejs-demo-config # ConfigMap 名称
|
||||
key: APP_MSG # ConfigMap 键名
|
||||
command: # 启动命令
|
||||
- node # 执行 node
|
||||
- "-e" # 执行内联脚本
|
||||
- | # 多行 JS 脚本(内容保持原样)
|
||||
const http=require('http');
|
||||
const msg=process.env.APP_MSG||'no env';
|
||||
http.createServer((q,s)=>s.end(msg)).listen(8080);
|
||||
ports: # 容器端口
|
||||
- containerPort: 8080 # 监听端口
|
||||
resources: # 资源请求与限制
|
||||
requests: # 最小资源请求
|
||||
cpu: "50m" # 请求 CPU
|
||||
memory: "64Mi" # 请求内存
|
||||
limits: # 资源上限
|
||||
cpu: "500m" # CPU 限制
|
||||
memory: "256Mi" # 内存限制
|
||||
livenessProbe: # 存活探针
|
||||
httpGet: # HTTP 探测
|
||||
path: / # 探测路径
|
||||
port: 8080 # 探测端口
|
||||
initialDelaySeconds: 3 # 初始延迟
|
||||
periodSeconds: 10 # 探测周期
|
||||
readinessProbe: # 就绪探针
|
||||
httpGet: # HTTP 探测
|
||||
path: / # 探测路径
|
||||
port: 8080 # 探测端口
|
||||
initialDelaySeconds: 2 # 初始延迟
|
||||
periodSeconds: 5 # 探测周期
|
||||
volumeMounts: # 卷挂载
|
||||
- name: tmp # 临时卷名称
|
||||
mountPath: /tmp # 容器内临时目录
|
||||
- name: data # 数据卷名称
|
||||
mountPath: /data # 容器内数据目录
|
||||
volumes: # 卷定义
|
||||
- name: tmp # 临时卷
|
||||
emptyDir: {} # 空目录卷
|
||||
- name: data # 数据卷
|
||||
persistentVolumeClaim: # 卷来源为 PVC
|
||||
claimName: nodejs-demo-data # 绑定 PVC 名称
|
||||
---
|
||||
apiVersion: v1 # Service API 版本
|
||||
kind: Service # Service 资源
|
||||
metadata: # Service 元信息
|
||||
name: nodejs-demo # Service 名称
|
||||
namespace: default # 命名空间
|
||||
spec: # Service 规格
|
||||
selector: # 选择后端 Pod
|
||||
app: nodejs-demo # 选中 app=nodejs-demo
|
||||
ports: # 端口映射
|
||||
- port: 80 # Service 暴露端口
|
||||
targetPort: 8080 # 转发到容器端口
|
||||
---
|
||||
apiVersion: networking.k8s.io/v1 # Ingress API 版本
|
||||
kind: Ingress # Ingress 资源
|
||||
metadata: # Ingress 元信息
|
||||
name: nodejs-demo # Ingress 名称
|
||||
namespace: default # 命名空间
|
||||
annotations: # Traefik 注解
|
||||
traefik.ingress.kubernetes.io/router.entrypoints: web # 使用 web(HTTP) 入口
|
||||
spec: # Ingress 规则
|
||||
rules: # 规则列表
|
||||
- host: app.example.local # 主机名匹配
|
||||
http: # HTTP 路由
|
||||
paths: # 路径列表
|
||||
- path: /api # 匹配 API 路径前缀
|
||||
pathType: Prefix # 前缀匹配
|
||||
backend: # 后端目标
|
||||
service: # 后端 Service
|
||||
name: nodejs-demo # Service 名称
|
||||
port: # Service 端口
|
||||
number: 80 # 端口号
|
||||
|
||||
6
ansible/files/04-11/README.md
Normal file
6
ansible/files/04-11/README.md
Normal file
@@ -0,0 +1,6 @@
|
||||
# 04-11(nodejs 分课)
|
||||
|
||||
本目录 `04-11-nodejs-demo.yaml` 由 `ansible/files/04-01/` 同名文件复制,与总集目录内文件**同构**,专供本课独立阅读;改本课清单时以本目录为准即可最小化影响其他篇。
|
||||
|
||||
- **手动**:`kubectl apply -f ansible/files/04-11/04-11-nodejs-demo.yaml`(按需改字段)。
|
||||
- **自动**:`./ansible/bin/verify.sh run 04-11`。
|
||||
141
ansible/files/04-12/04-12-nodejs-demo.yaml
Normal file
141
ansible/files/04-12/04-12-nodejs-demo.yaml
Normal file
@@ -0,0 +1,141 @@
|
||||
# 对应文档:docs/04-12-nodejs-TLS与证书.md
|
||||
# 累积:04-11 + Ingress TLS(websecure、secretName: nodejs-demo-tls)
|
||||
# 应用前请先创建 TLS Secret,例如:
|
||||
# kubectl create secret tls nodejs-demo-tls --cert=fullchain.pem --key=privkey.pem -n default
|
||||
# 证书 SAN 须覆盖 app.example.local(与 rules.host / tls.hosts 一致)
|
||||
apiVersion: v1 # PVC API 版本
|
||||
kind: PersistentVolumeClaim # 持久卷声明
|
||||
metadata: # PVC 元信息
|
||||
name: nodejs-demo-data # PVC 名称
|
||||
namespace: default # 命名空间
|
||||
spec: # PVC 规格
|
||||
accessModes: # 访问模式
|
||||
- ReadWriteOnce # RWO:同一时间仅单节点挂载读写
|
||||
storageClassName: local-path # 存储类
|
||||
resources: # 资源请求
|
||||
requests: # 配额请求
|
||||
storage: 1Gi # 申请容量
|
||||
---
|
||||
apiVersion: v1 # ConfigMap API 版本
|
||||
kind: ConfigMap # 配置资源
|
||||
metadata: # ConfigMap 元信息
|
||||
name: nodejs-demo-config # ConfigMap 名称
|
||||
namespace: default # 命名空间
|
||||
data: # 配置键值
|
||||
APP_MSG: "Hello from ConfigMap" # 示例消息内容
|
||||
---
|
||||
apiVersion: apps/v1 # Deployment API 版本
|
||||
kind: Deployment # 工作负载:Deployment
|
||||
metadata: # Deployment 元信息
|
||||
name: nodejs-demo # Deployment 名称
|
||||
namespace: default # 命名空间
|
||||
spec: # Deployment 规格
|
||||
replicas: 3 # 副本数
|
||||
strategy: # 更新策略
|
||||
type: RollingUpdate # 滚动更新
|
||||
rollingUpdate: # 滚动更新参数
|
||||
maxSurge: 1 # 更新时最多额外增加 1 个 Pod
|
||||
maxUnavailable: 0 # 更新时不可用 Pod 数为 0
|
||||
selector: # Pod 选择器
|
||||
matchLabels: # 标签匹配集合
|
||||
app: nodejs-demo # 匹配 app=nodejs-demo 的 Pod
|
||||
template: # Pod 模板
|
||||
metadata: # Pod 元信息
|
||||
labels: # Pod 标签
|
||||
app: nodejs-demo # 与 selector.matchLabels 对齐
|
||||
spec: # Pod 规格
|
||||
nodeSelector: # 节点选择
|
||||
kubernetes.io/hostname: ylc62 # 固定到指定节点(按实际修改)
|
||||
securityContext: # Pod 级安全上下文
|
||||
fsGroup: 1000 # 挂载卷文件组 ID
|
||||
containers: # 容器列表
|
||||
- name: nodejs-demo # 容器名
|
||||
image: node:18.20-alpine # Node.js 镜像
|
||||
imagePullPolicy: IfNotPresent # 拉取策略
|
||||
securityContext: # 容器级安全上下文
|
||||
allowPrivilegeEscalation: false # 禁止提权
|
||||
runAsNonRoot: true # 非 root 运行
|
||||
runAsUser: 1000 # 运行用户 UID
|
||||
readOnlyRootFilesystem: true # 根文件系统只读
|
||||
env: # 环境变量
|
||||
- name: APP_MSG # 环境变量名
|
||||
valueFrom: # 从引用源取值
|
||||
configMapKeyRef: # 从 ConfigMap key 读取
|
||||
name: nodejs-demo-config # ConfigMap 名称
|
||||
key: APP_MSG # ConfigMap 键名
|
||||
command: # 启动命令
|
||||
- node # 执行 node
|
||||
- "-e" # 执行内联脚本
|
||||
- | # 多行 JS 脚本(内容保持原样)
|
||||
const http=require('http');
|
||||
const msg=process.env.APP_MSG||'no env';
|
||||
http.createServer((q,s)=>s.end(msg)).listen(8080);
|
||||
ports: # 容器端口
|
||||
- containerPort: 8080 # 监听端口
|
||||
resources: # 资源请求与限制
|
||||
requests: # 最小资源请求
|
||||
cpu: "50m" # 请求 CPU
|
||||
memory: "64Mi" # 请求内存
|
||||
limits: # 资源上限
|
||||
cpu: "500m" # CPU 限制
|
||||
memory: "256Mi" # 内存限制
|
||||
livenessProbe: # 存活探针
|
||||
httpGet: # HTTP 探测
|
||||
path: / # 探测路径
|
||||
port: 8080 # 探测端口
|
||||
initialDelaySeconds: 3 # 初始延迟
|
||||
periodSeconds: 10 # 探测周期
|
||||
readinessProbe: # 就绪探针
|
||||
httpGet: # HTTP 探测
|
||||
path: / # 探测路径
|
||||
port: 8080 # 探测端口
|
||||
initialDelaySeconds: 2 # 初始延迟
|
||||
periodSeconds: 5 # 探测周期
|
||||
volumeMounts: # 卷挂载
|
||||
- name: tmp # 临时卷名称
|
||||
mountPath: /tmp # 容器内临时目录
|
||||
- name: data # 数据卷名称
|
||||
mountPath: /data # 容器内数据目录
|
||||
volumes: # 卷定义
|
||||
- name: tmp # 临时卷
|
||||
emptyDir: {} # 空目录卷
|
||||
- name: data # 数据卷
|
||||
persistentVolumeClaim: # 卷来源为 PVC
|
||||
claimName: nodejs-demo-data # 绑定 PVC 名称
|
||||
---
|
||||
apiVersion: v1 # Service API 版本
|
||||
kind: Service # Service 资源
|
||||
metadata: # Service 元信息
|
||||
name: nodejs-demo # Service 名称
|
||||
namespace: default # 命名空间
|
||||
spec: # Service 规格
|
||||
selector: # 选择后端 Pod
|
||||
app: nodejs-demo # 选中 app=nodejs-demo
|
||||
ports: # 端口映射
|
||||
- port: 80 # Service 暴露端口
|
||||
targetPort: 8080 # 转发到容器端口
|
||||
---
|
||||
apiVersion: networking.k8s.io/v1 # Ingress API 版本
|
||||
kind: Ingress # Ingress 资源
|
||||
metadata: # Ingress 元信息
|
||||
name: nodejs-demo # Ingress 名称
|
||||
namespace: default # 命名空间
|
||||
annotations: # Traefik 注解
|
||||
traefik.ingress.kubernetes.io/router.entrypoints: websecure # 使用 websecure(HTTPS) 入口
|
||||
spec: # Ingress 规则
|
||||
tls: # TLS 配置
|
||||
- hosts: # 证书覆盖域名
|
||||
- app.example.local # 域名
|
||||
secretName: nodejs-demo-tls # 引用的 TLS Secret 名称
|
||||
rules: # 路由规则列表
|
||||
- host: app.example.local # 主机名匹配
|
||||
http: # HTTP 路由
|
||||
paths: # 路径列表
|
||||
- path: /api # 匹配 API 路径前缀
|
||||
pathType: Prefix # 前缀匹配
|
||||
backend: # 后端目标
|
||||
service: # 后端 Service
|
||||
name: nodejs-demo # Service 名称
|
||||
port: # Service 端口
|
||||
number: 80 # 端口号
|
||||
|
||||
6
ansible/files/04-12/README.md
Normal file
6
ansible/files/04-12/README.md
Normal file
@@ -0,0 +1,6 @@
|
||||
# 04-12(nodejs 分课)
|
||||
|
||||
本目录 `04-12-nodejs-demo.yaml` 由 `ansible/files/04-01/` 同名文件复制,与总集目录内文件**同构**,专供本课独立阅读;改本课清单时以本目录为准即可最小化影响其他篇。
|
||||
|
||||
- **手动**:`kubectl apply -f ansible/files/04-12/04-12-nodejs-demo.yaml`(按需改字段)。
|
||||
- **自动**:`./ansible/bin/verify.sh run 04-12`。
|
||||
158
ansible/files/04-13/04-13-nodejs-demo.yaml
Normal file
158
ansible/files/04-13/04-13-nodejs-demo.yaml
Normal file
@@ -0,0 +1,158 @@
|
||||
# 对应文档:docs/04-13-nodejs-HPA.md
|
||||
# 累积:04-12 + HorizontalPodAutoscaler(CPU 50%,min 1 max 5)
|
||||
apiVersion: v1 # PVC API 版本
|
||||
kind: PersistentVolumeClaim # 持久卷声明
|
||||
metadata: # PVC 元信息
|
||||
name: nodejs-demo-data # PVC 名称
|
||||
namespace: default # 命名空间
|
||||
spec: # PVC 规格
|
||||
accessModes: # 访问模式
|
||||
- ReadWriteOnce # RWO:同一时间仅单节点挂载读写
|
||||
storageClassName: local-path # 存储类
|
||||
resources: # 资源请求
|
||||
requests: # 配额请求
|
||||
storage: 1Gi # 申请容量
|
||||
---
|
||||
apiVersion: v1 # ConfigMap API 版本
|
||||
kind: ConfigMap # 配置资源
|
||||
metadata: # ConfigMap 元信息
|
||||
name: nodejs-demo-config # ConfigMap 名称
|
||||
namespace: default # 命名空间
|
||||
data: # 配置键值
|
||||
APP_MSG: "Hello from ConfigMap" # 示例消息内容
|
||||
---
|
||||
apiVersion: apps/v1 # Deployment API 版本
|
||||
kind: Deployment # 工作负载:Deployment
|
||||
metadata: # Deployment 元信息
|
||||
name: nodejs-demo # Deployment 名称
|
||||
namespace: default # 命名空间
|
||||
spec: # Deployment 规格
|
||||
replicas: 3 # 副本数
|
||||
strategy: # 更新策略
|
||||
type: RollingUpdate # 滚动更新
|
||||
rollingUpdate: # 滚动更新参数
|
||||
maxSurge: 1 # 更新时最多额外增加 1 个 Pod
|
||||
maxUnavailable: 0 # 更新时不可用 Pod 数为 0
|
||||
selector: # Pod 选择器
|
||||
matchLabels: # 标签匹配集合
|
||||
app: nodejs-demo # 匹配 app=nodejs-demo 的 Pod
|
||||
template: # Pod 模板
|
||||
metadata: # Pod 元信息
|
||||
labels: # Pod 标签
|
||||
app: nodejs-demo # 与 selector.matchLabels 对齐
|
||||
spec: # Pod 规格
|
||||
nodeSelector: # 节点选择
|
||||
kubernetes.io/hostname: ylc62 # 固定到指定节点(按实际修改)
|
||||
securityContext: # Pod 级安全上下文
|
||||
fsGroup: 1000 # 挂载卷文件组 ID
|
||||
containers: # 容器列表
|
||||
- name: nodejs-demo # 容器名
|
||||
image: node:18.20-alpine # Node.js 镜像
|
||||
imagePullPolicy: IfNotPresent # 拉取策略
|
||||
securityContext: # 容器级安全上下文
|
||||
allowPrivilegeEscalation: false # 禁止提权
|
||||
runAsNonRoot: true # 非 root 运行
|
||||
runAsUser: 1000 # 运行用户 UID
|
||||
readOnlyRootFilesystem: true # 根文件系统只读
|
||||
env: # 环境变量
|
||||
- name: APP_MSG # 环境变量名
|
||||
valueFrom: # 从引用源取值
|
||||
configMapKeyRef: # 从 ConfigMap key 读取
|
||||
name: nodejs-demo-config # ConfigMap 名称
|
||||
key: APP_MSG # ConfigMap 键名
|
||||
command: # 启动命令
|
||||
- node # 执行 node
|
||||
- "-e" # 执行内联脚本
|
||||
- | # 多行 JS 脚本(内容保持原样)
|
||||
const http=require('http');
|
||||
const msg=process.env.APP_MSG||'no env';
|
||||
http.createServer((q,s)=>s.end(msg)).listen(8080);
|
||||
ports: # 容器端口
|
||||
- containerPort: 8080 # 监听端口
|
||||
resources: # 资源请求与限制
|
||||
requests: # 最小资源请求
|
||||
cpu: "50m" # 请求 CPU
|
||||
memory: "64Mi" # 请求内存
|
||||
limits: # 资源上限
|
||||
cpu: "500m" # CPU 限制
|
||||
memory: "256Mi" # 内存限制
|
||||
livenessProbe: # 存活探针
|
||||
httpGet: # HTTP 探测
|
||||
path: / # 探测路径
|
||||
port: 8080 # 探测端口
|
||||
initialDelaySeconds: 3 # 初始延迟
|
||||
periodSeconds: 10 # 探测周期
|
||||
readinessProbe: # 就绪探针
|
||||
httpGet: # HTTP 探测
|
||||
path: / # 探测路径
|
||||
port: 8080 # 探测端口
|
||||
initialDelaySeconds: 2 # 初始延迟
|
||||
periodSeconds: 5 # 探测周期
|
||||
volumeMounts: # 卷挂载
|
||||
- name: tmp # 临时卷名称
|
||||
mountPath: /tmp # 容器内临时目录
|
||||
- name: data # 数据卷名称
|
||||
mountPath: /data # 容器内数据目录
|
||||
volumes: # 卷定义
|
||||
- name: tmp # 临时卷
|
||||
emptyDir: {} # 空目录卷
|
||||
- name: data # 数据卷
|
||||
persistentVolumeClaim: # 卷来源为 PVC
|
||||
claimName: nodejs-demo-data # 绑定 PVC 名称
|
||||
---
|
||||
apiVersion: v1 # Service API 版本
|
||||
kind: Service # Service 资源
|
||||
metadata: # Service 元信息
|
||||
name: nodejs-demo # Service 名称
|
||||
namespace: default # 命名空间
|
||||
spec: # Service 规格
|
||||
selector: # 选择后端 Pod
|
||||
app: nodejs-demo # 选中 app=nodejs-demo
|
||||
ports: # 端口映射
|
||||
- port: 80 # Service 暴露端口
|
||||
targetPort: 8080 # 转发到容器端口
|
||||
---
|
||||
apiVersion: networking.k8s.io/v1 # Ingress API 版本
|
||||
kind: Ingress # Ingress 资源
|
||||
metadata: # Ingress 元信息
|
||||
name: nodejs-demo # Ingress 名称
|
||||
namespace: default # 命名空间
|
||||
annotations: # Traefik 注解
|
||||
traefik.ingress.kubernetes.io/router.entrypoints: websecure # 使用 websecure(HTTPS) 入口
|
||||
spec: # Ingress 规则
|
||||
tls: # TLS 配置
|
||||
- hosts: # 证书覆盖域名
|
||||
- app.example.local # 域名
|
||||
secretName: nodejs-demo-tls # 引用的 TLS Secret 名称
|
||||
rules: # 路由规则列表
|
||||
- host: app.example.local # 主机名匹配
|
||||
http: # HTTP 路由
|
||||
paths: # 路径列表
|
||||
- path: /api # 匹配 API 路径前缀
|
||||
pathType: Prefix # 前缀匹配
|
||||
backend: # 后端目标
|
||||
service: # 后端 Service
|
||||
name: nodejs-demo # Service 名称
|
||||
port: # Service 端口
|
||||
number: 80 # 端口号
|
||||
---
|
||||
apiVersion: autoscaling/v2 # HPA API 版本
|
||||
kind: HorizontalPodAutoscaler # 水平自动扩缩容资源
|
||||
metadata: # HPA 元信息
|
||||
name: nodejs-demo # HPA 名称
|
||||
namespace: default # 命名空间
|
||||
spec: # HPA 规格
|
||||
scaleTargetRef: # 伸缩目标引用
|
||||
apiVersion: apps/v1 # 目标 API 版本
|
||||
kind: Deployment # 目标资源类型
|
||||
name: nodejs-demo # 目标 Deployment 名称
|
||||
minReplicas: 1 # 最小副本数
|
||||
maxReplicas: 5 # 最大副本数
|
||||
metrics: # 伸缩指标
|
||||
- type: Resource # 资源指标类型
|
||||
resource: # 资源指标配置
|
||||
name: cpu # 指标资源:CPU
|
||||
target: # 目标值
|
||||
type: Utilization # 目标类型:利用率
|
||||
averageUtilization: 50 # 目标平均 CPU 利用率(%)
|
||||
|
||||
6
ansible/files/04-13/README.md
Normal file
6
ansible/files/04-13/README.md
Normal file
@@ -0,0 +1,6 @@
|
||||
# 04-13(nodejs 分课)
|
||||
|
||||
本目录 `04-13-nodejs-demo.yaml` 由 `ansible/files/04-01/` 同名文件复制,与总集目录内文件**同构**,专供本课独立阅读;改本课清单时以本目录为准即可最小化影响其他篇。
|
||||
|
||||
- **手动**:`kubectl apply -f ansible/files/04-13/04-13-nodejs-demo.yaml`(按需改字段)。
|
||||
- **自动**:`./ansible/bin/verify.sh run 04-13`。
|
||||
5
ansible/files/04-14/README.md
Normal file
5
ansible/files/04-14/README.md
Normal file
@@ -0,0 +1,5 @@
|
||||
# 04-14 truth source placeholder
|
||||
|
||||
`04-14` 当前以流程说明(GitOps/CI 流水线)为主,暂无独立可直接 `kubectl apply` 的单一清单。
|
||||
|
||||
本目录用于满足 `doc_id -> ansible/files/<doc_id>/` 一致性约束。
|
||||
69
ansible/files/05-03/values-gitlab.example.yaml
Normal file
69
ansible/files/05-03/values-gitlab.example.yaml
Normal file
@@ -0,0 +1,69 @@
|
||||
# GitLab Helm Chart 示例 values(实验室用)
|
||||
#
|
||||
# 使用方式:
|
||||
# cp ansible/files/05-03/values-gitlab.example.yaml values-gitlab.yaml
|
||||
# 按需修改域名、资源、Ingress;完整键名以当前 Chart 为准:
|
||||
# helm show values gitlab/gitlab
|
||||
#
|
||||
# Chart 文档:https://docs.gitlab.com/charts/
|
||||
|
||||
global:
|
||||
# 实验室:固定调度到指定节点,PVC(local-path)与 Pod 同节点 → 数据落在该节点本地盘
|
||||
# 本仓库 inventory 中 192.168.2.63 对应节点名 ylc63;若你的集群节点名不同,请 kubectl get nodes 后改写
|
||||
nodeSelector:
|
||||
kubernetes.io/hostname: ylc63
|
||||
hosts:
|
||||
# 根域占位;请改为你的域名(内网实验可配合 hosts / split-horizon DNS)
|
||||
domain: example.com
|
||||
# GitLab Web 主机名片段:最终为 <name>.<domain>,例如 git.example.com
|
||||
gitlab:
|
||||
name: git
|
||||
registry:
|
||||
name: registry
|
||||
ingress:
|
||||
# 集群已用 Traefik 或在外层终止 TLS 时,通常不启用 Chart 内置 cert-manager
|
||||
configureCertmanager: false
|
||||
tls:
|
||||
enabled: true
|
||||
# 若使用已有 Secret(例如 Traefik / 手工证书),取消注释并填写:
|
||||
# secretName: gitlab-wildcard-tls
|
||||
|
||||
# 实验室缩小副本(可选;生产请按官方 sizing 与监控数据调整)
|
||||
gitlab:
|
||||
webservice:
|
||||
minReplicas: 1
|
||||
sidekiq:
|
||||
minReplicas: 1
|
||||
# Gitaly 仓库数据盘:与 global.nodeSelector 同节点时,local-path 卷落在该节点本地
|
||||
gitaly:
|
||||
persistence:
|
||||
storageClass: local-path
|
||||
size: 50Gi
|
||||
|
||||
# Bitnami PostgreSQL / Redis、MinIO 子 chart **不**继承 global.nodeSelector 时需单独写(见 GitLab Chart 文档 Node Selector 节)
|
||||
postgresql:
|
||||
primary:
|
||||
nodeSelector:
|
||||
kubernetes.io/hostname: ylc63
|
||||
persistence:
|
||||
storageClass: local-path
|
||||
size: 8Gi
|
||||
|
||||
redis:
|
||||
master:
|
||||
nodeSelector:
|
||||
kubernetes.io/hostname: ylc63
|
||||
persistence:
|
||||
storageClass: local-path
|
||||
size: 5Gi
|
||||
|
||||
minio:
|
||||
nodeSelector:
|
||||
kubernetes.io/hostname: ylc63
|
||||
persistence:
|
||||
storageClass: local-path
|
||||
size: 10Gi
|
||||
|
||||
# 资源紧张时可考虑关闭捆绑 Prometheus(按需取消注释)
|
||||
# prometheus:
|
||||
# install: false
|
||||
9
ansible/files/05-05/README.md
Normal file
9
ansible/files/05-05/README.md
Normal file
@@ -0,0 +1,9 @@
|
||||
# 05-05(Prometheus + Grafana)
|
||||
|
||||
| 文件 | 说明 |
|
||||
|------|------|
|
||||
| `kube-prometheus-stack-values.example.yaml` | Helm `kube-prometheus-stack` 的实验室向 values 示例(**非** `kubectl apply` 对象) |
|
||||
|
||||
- **手动**:按 [docs/05-05-prometheus与grafana.md](../../../docs/05-05-prometheus与grafana.md) 执行 `helm repo add` / `helm upgrade --install`,可附加 `-f ansible/files/05-05/kube-prometheus-stack-values.example.yaml`。
|
||||
- **自动**:`./ansible/bin/verify.sh run 05-05`(noop + 集群基线;与本目录示例共用真源,便于对照文档改 values)。
|
||||
- 文件名含 `example.`,`verify_common` 不会对其实施 `kubectl apply --dry-run`。
|
||||
@@ -0,0 +1,22 @@
|
||||
# Helm values for prometheus-community/kube-prometheus-stack
|
||||
# 用法(仓库根):
|
||||
# helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
|
||||
# helm repo update
|
||||
# kubectl create namespace monitoring --dry-run=client -o yaml | kubectl apply -f -
|
||||
# helm upgrade --install monitoring prometheus-community/kube-prometheus-stack -n monitoring \
|
||||
# -f ansible/files/05-05/kube-prometheus-stack-values.example.yaml
|
||||
#
|
||||
# 注意:本文件是 Helm values,不要用 kubectl apply。
|
||||
|
||||
prometheus:
|
||||
prometheusSpec:
|
||||
retention: 7d
|
||||
resources:
|
||||
requests:
|
||||
cpu: 100m
|
||||
memory: 256Mi
|
||||
|
||||
grafana:
|
||||
enabled: true
|
||||
persistence:
|
||||
enabled: false
|
||||
10
ansible/files/06-01/README.md
Normal file
10
ansible/files/06-01/README.md
Normal file
@@ -0,0 +1,10 @@
|
||||
# 06-01(NetworkPolicy 与连通性排障)
|
||||
|
||||
| 文件 | 说明 |
|
||||
|------|------|
|
||||
| `networkpolicy-traefik-egress.example.yaml` | Traefik 出站示例:后端命名空间、Service CIDR、DNS |
|
||||
| `networkpolicy-backend-ingress.example.yaml` | 后端仅允许来自 `kube-system`(Traefik)的入站示例 |
|
||||
|
||||
- **手动**:复制为正式名后 `kubectl apply -f ...`,并按集群实际 **namespace / 标签 / CIDR** 修改(见 [docs/06-01-k3s-networkpolicy-故障排查.md](../../../docs/06-01-k3s-networkpolicy-故障排查.md))。
|
||||
- **自动**:`./ansible/bin/verify.sh run 06-01`(noop + 基线;策略真源以本目录为准,与手工 `kubectl` 一致)。
|
||||
- 示例文件名含 `example.`,默认验证流程跳过对其的 `kubectl dry-run`。
|
||||
@@ -0,0 +1,21 @@
|
||||
# 示例:后端 Namespace 仅允许来自 kube-system(Traefik)的入站
|
||||
# 将 namespace、podSelector、端口改为你的应用标签与 Service 端口。
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: NetworkPolicy
|
||||
metadata:
|
||||
name: backend-from-traefik-example
|
||||
namespace: default
|
||||
spec:
|
||||
podSelector:
|
||||
matchLabels:
|
||||
app: nginx
|
||||
policyTypes:
|
||||
- Ingress
|
||||
ingress:
|
||||
- from:
|
||||
- namespaceSelector:
|
||||
matchLabels:
|
||||
kubernetes.io/metadata.name: kube-system
|
||||
ports:
|
||||
- protocol: TCP
|
||||
port: 80
|
||||
@@ -0,0 +1,32 @@
|
||||
# 示例:为 Traefik 放行出站(按实际 namespace 与标签调整)
|
||||
# 适用场景:后端在其它命名空间、需访问集群 DNS 与 Service VIP。
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: NetworkPolicy
|
||||
metadata:
|
||||
name: traefik-egress-lab-example
|
||||
namespace: kube-system
|
||||
spec:
|
||||
podSelector:
|
||||
matchLabels:
|
||||
app.kubernetes.io/name: traefik
|
||||
policyTypes:
|
||||
- Egress
|
||||
egress:
|
||||
# 访问任意命名空间内 Pod(可按需收窄为 namespaceSelector + podSelector)
|
||||
- to:
|
||||
- namespaceSelector: {}
|
||||
ports:
|
||||
- protocol: TCP
|
||||
port: 8080
|
||||
- protocol: TCP
|
||||
port: 8000
|
||||
# Service CIDR(k3s 默认常为 10.43.0.0/16,请与集群一致)
|
||||
- to:
|
||||
- ipBlock:
|
||||
cidr: 10.43.0.0/16
|
||||
# 集群 DNS
|
||||
- ports:
|
||||
- protocol: UDP
|
||||
port: 53
|
||||
- protocol: TCP
|
||||
port: 53
|
||||
5
ansible/files/06-02/README.md
Normal file
5
ansible/files/06-02/README.md
Normal file
@@ -0,0 +1,5 @@
|
||||
# 06-02(运维小结)
|
||||
|
||||
- **文档**:[docs/06-02-运维小结.md](../../../docs/06-02-运维小结.md)(检查项、命令速查、变更记录建议)。
|
||||
- **自动**:`./ansible/bin/verify.sh run 06-02`(noop + 集群基线)。
|
||||
- 本篇无独立 Kubernetes 清单;运维动作以 `kubectl`/脚本为主。
|
||||
5
ansible/files/07-01/README.md
Normal file
5
ansible/files/07-01/README.md
Normal file
@@ -0,0 +1,5 @@
|
||||
# 07-01(Calico 双栈实验)
|
||||
|
||||
- **文档**:[docs/07-01-k3s-calico-dualstack.md](../../../docs/07-01-k3s-calico-dualstack.md)。
|
||||
- **自动**:`./ansible/bin/verify.sh run 07-01`(实验环境与主线 Flannel 可能冲突,仅在隔离环境操作)。
|
||||
- 清单与安装步骤以文档为准;本目录占位满足契约,避免与生产集群误用。
|
||||
5
ansible/files/07-02/README.md
Normal file
5
ansible/files/07-02/README.md
Normal file
@@ -0,0 +1,5 @@
|
||||
# 07-02(Cilium 双栈 / eBPF 实验)
|
||||
|
||||
- **文档**:[docs/07-02-k3s-cilium-dualstack-ebpf.md](../../../docs/07-02-k3s-cilium-dualstack-ebpf.md)。
|
||||
- **自动**:`./ansible/bin/verify.sh run 07-02`。
|
||||
- 实验性 CNI 切换风险高;YAML 真源随文档演进时再纳入本目录。
|
||||
Reference in New Issue
Block a user