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:
55
ansible/files/04-01-nodejs-demo/04-01-nodejs-demo.yaml
Normal file
55
ansible/files/04-01-nodejs-demo/04-01-nodejs-demo.yaml
Normal file
@@ -0,0 +1,55 @@
|
||||
# 对应文档:docs/04-01-k3s-nodejs-高级部署.md
|
||||
# 累积:基线(Deployment + Service + Ingress)
|
||||
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-alpine # Node.js 镜像
|
||||
command: ["node", "-e", "require('http').createServer((req,res)=>res.end('Hello World from Node.js')).listen(3000)"] # 直接运行内联 Node.js HTTP 服务
|
||||
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 # 端口号
|
||||
|
||||
59
ansible/files/04-01-nodejs-demo/04-02-nodejs-demo.yaml
Normal file
59
ansible/files/04-01-nodejs-demo/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 # 端口号
|
||||
|
||||
76
ansible/files/04-01-nodejs-demo/04-03-nodejs-demo.yaml
Normal file
76
ansible/files/04-01-nodejs-demo/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 # 端口号
|
||||
|
||||
76
ansible/files/04-01-nodejs-demo/04-04-nodejs-demo.yaml
Normal file
76
ansible/files/04-01-nodejs-demo/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 # 端口号
|
||||
|
||||
83
ansible/files/04-01-nodejs-demo/04-05-nodejs-demo.yaml
Normal file
83
ansible/files/04-01-nodejs-demo/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 # 端口号
|
||||
|
||||
95
ansible/files/04-01-nodejs-demo/04-06-nodejs-demo.yaml
Normal file
95
ansible/files/04-01-nodejs-demo/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 # 端口号
|
||||
|
||||
97
ansible/files/04-01-nodejs-demo/04-07-nodejs-demo.yaml
Normal file
97
ansible/files/04-01-nodejs-demo/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 # 端口号
|
||||
|
||||
110
ansible/files/04-01-nodejs-demo/04-08-nodejs-demo.yaml
Normal file
110
ansible/files/04-01-nodejs-demo/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 # 端口号
|
||||
|
||||
128
ansible/files/04-01-nodejs-demo/04-09-nodejs-demo.yaml
Normal file
128
ansible/files/04-01-nodejs-demo/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 # 端口号
|
||||
|
||||
129
ansible/files/04-01-nodejs-demo/04-10-nodejs-demo.yaml
Normal file
129
ansible/files/04-01-nodejs-demo/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 # 端口号
|
||||
|
||||
134
ansible/files/04-01-nodejs-demo/04-11-nodejs-demo.yaml
Normal file
134
ansible/files/04-01-nodejs-demo/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 # 端口号
|
||||
|
||||
141
ansible/files/04-01-nodejs-demo/04-12-nodejs-demo.yaml
Normal file
141
ansible/files/04-01-nodejs-demo/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 # 端口号
|
||||
|
||||
158
ansible/files/04-01-nodejs-demo/04-13-nodejs-demo.yaml
Normal file
158
ansible/files/04-01-nodejs-demo/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 利用率(%)
|
||||
|
||||
43
ansible/files/04-01-nodejs-demo/README.md
Normal file
43
ansible/files/04-01-nodejs-demo/README.md
Normal file
@@ -0,0 +1,43 @@
|
||||
# Node.js demo 清单(与 docs/04-01~04-14 对齐)
|
||||
|
||||
**唯一真源**:本目录下 YAML 与 `docs/` 中说明一致;文档内不重复贴全文,避免漂移。
|
||||
|
||||
## 累积规则
|
||||
|
||||
- `04-0N-nodejs-demo.yaml` 表示:从 `04-01` 起顺序做完 **04-01~04-0N** 各篇能力后的 **一份** 可 `kubectl apply -f` 的完整状态(多资源用 `---` 分隔)。
|
||||
- **可直接跳到最后一份** 做实验,不必逐文件 apply;若要理解每步增量,可按编号顺序阅读文档并对照相邻两个 YAML 的差异。
|
||||
- **04-14**(GitOps/CI)无独立清单,见 `docs/04-14-nodejs-GitOps与CI流水线.md` 与 `docs/05-04-k3s-配置gitlab-cicd.md`、`docs/03-09-k3s-gitops-集群配置管理.md`。
|
||||
|
||||
## 文件与文档对照
|
||||
|
||||
| 文件 | 文档 | 备注 |
|
||||
|------|------|------|
|
||||
| `04-01-nodejs-demo.yaml` | `docs/04-01-k3s-nodejs-高级部署.md` | 基线:3000、`/node`、无 host |
|
||||
| `04-02-nodejs-demo.yaml` | `docs/04-02-nodejs-镜像与运行命令.md` | 固定镜像 tag、`imagePullPolicy` |
|
||||
| `04-03-nodejs-demo.yaml` | `docs/04-03-nodejs-环境变量与配置注入.md` | + ConfigMap;Secret 示例见文末 `nodejs-demo-secret.example.yaml` |
|
||||
| `04-04-nodejs-demo.yaml` | `docs/04-04-nodejs-端口与Service.md` | 监听改 **8080**(自 04-04 起探针与后续均用 8080) |
|
||||
| `04-05-nodejs-demo.yaml` | `docs/04-05-nodejs-资源请求与限制.md` | + resources |
|
||||
| `04-06-nodejs-demo.yaml` | `docs/04-06-nodejs-探针与健康检查.md` | + 探针 |
|
||||
| `04-07-nodejs-demo.yaml` | `docs/04-07-nodejs-调度与亲和.md` | + `nodeSelector`(默认 **ylc62**,请改为本机节点名) |
|
||||
| `04-08-nodejs-demo.yaml` | `docs/04-08-nodejs-安全上下文.md` | + 非 root、只读根、`/tmp` emptyDir |
|
||||
| `04-09-nodejs-demo.yaml` | `docs/04-09-nodejs-存储与卷.md` | + PVC `nodejs-demo-data`(默认 **local-path**) |
|
||||
| `04-10-nodejs-demo.yaml` | `docs/04-10-nodejs-Ingress与Traefik.md` | Ingress:`host` + `/api`,curl 需 **Host** |
|
||||
| `04-11-nodejs-demo.yaml` | `docs/04-11-nodejs-副本与滚动发布.md` | replicas=3 + RollingUpdate |
|
||||
| `04-12-nodejs-demo.yaml` | `docs/04-12-nodejs-TLS与证书.md` | **websecure** + TLS;须先创建 `nodejs-demo-tls` Secret |
|
||||
| `04-13-nodejs-demo.yaml` | `docs/04-13-nodejs-HPA.md` | + HPA(需 metrics-server) |
|
||||
|
||||
## 应用方式
|
||||
|
||||
```bash
|
||||
# 仓库根目录
|
||||
kubectl apply -f ansible/files/04-01-nodejs-demo/04-01-nodejs-demo.yaml
|
||||
```
|
||||
|
||||
或使用 Ansible:`ansible/playbooks/nodejs-demo-apply.yml`,变量 `nodejs_demo_manifest` 指定文件名。
|
||||
|
||||
## dry-run
|
||||
|
||||
```bash
|
||||
kubectl apply --dry-run=client -f ansible/files/04-01-nodejs-demo/04-01-nodejs-demo.yaml
|
||||
```
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
# 示例:勿将真实密钥提交到公开仓库。对应 docs/04-03 Secret 示意。
|
||||
apiVersion: v1 # Secret API 版本
|
||||
kind: Secret # 密钥资源
|
||||
metadata: # Secret 元信息
|
||||
name: nodejs-demo-secret # Secret 名称
|
||||
namespace: default # 命名空间
|
||||
stringData: # 明文键值(创建时会转换为 data)
|
||||
API_TOKEN: "replace-me" # 示例 token(请替换,勿提交真实密钥)
|
||||
|
||||
Reference in New Issue
Block a user