Skip to content

配置参考 ​

Kurrent 有两份权威声明:控制面配置与节点配置。二者都使用 kurrent.io/v1,由组件内的 Pydantic 模型校验;CLI 调用的校验镜像与运行时加载的是同一份 schema。

  • 控制面:control_plane/kurrent.yaml,kind: ControlPlaneConfiguration
  • 节点:storager/kurrent.yaml,kind: NodeConfiguration

模板由 kurrent config print init-defaults 与 kurrent config print node-defaults 生成,与仓库中的 .example 文件同源。运行时文件不入库。

校验语义 ​

语义行为
未知字段拒绝;字段拼写错误不会静默忽略
必填字段缺失即失败
默认值校验时注入,config show 展示生效形态
跨字段约束网段、TTL 上限、证书天数等在同一模型内校验
协议常量nonce TTL、超时等留在代码,不进入声明
部署事实容器内路径、监听地址、凭据文件不属于声明

校验发生在写盘之前。声明错误会在 kurrent init / kurrent join 阶段暴露,不会等到容器启动才失败。

控制面配置 ​

根字段 ​

字段类型必填说明
apiVersionstring是固定 kurrent.io/v1
kindstring是固定 ControlPlaneConfiguration
metadata.namestring是控制面名称,1–63 字符,小写字母、数字、点或短横线
specobject是见下

spec.networking(必填) ​

PXE 部署网络声明,也是 dnsmasq.conf 的唯一权威来源。

字段类型必填约束说明
interfacestring是1–15 字符,不含空白dnsmasq 绑定的网卡
subnetstring是IPv4 CIDR服务网段
dhcpRangestring是start,end,均在网段内,不含网络/广播地址DHCP 地址池
gatewaystring是IPv4,位于网段内DHCP option 3
dnsstring是IPv4DHCP option 6

spec.pki ​

字段默认值范围说明
bootstrapTokenTtlMinutes601–1440bootstrap token 默认 TTL
bootstrapTokenMaxTtlMinutes14401–1440可签发的最大 TTL,且不小于默认值
bootstrapTokenMaxUses1001–1000单个 token 的最大使用次数
componentCertDays901–3650组件证书有效期
renewThreshold0.2(0, 1]剩余有效期低于该比例时触发续签
crlRefreshHours121–167组件 CRL 重签周期;应小于 CRL 的 nextUpdate

spec.serverCert ​

TOFU 引导链的 nginx 443 自签服务器证书。

字段默认值范围说明
sanIP:127.0.0.1,DNS:localhost至少一项,不可重复逗号分隔的 IP: / DNS: 条目
days36501–36500证书有效期
rotateOnChangefalse—声明变化时是否自动重签;重签会改变 TOFU 指纹

SAN 或天数变化默认只报告漂移;rotateOnChange: true 才会自动重签。已入池设备需要重新固定服务器指纹。

spec.boot ​

字段默认值范围说明
defaultArchx86_64字母、数字、下划线默认引导架构
menuTimeoutMs5000≥ 0菜单自动选择超时(毫秒)
autoBootTimeoutMs1≥ 0无默认盘时重启等待超时(毫秒)

spec.auth ​

字段默认值范围说明
sessionTtlHours121–168管理面会话有效期
adminCertDays3651–3650管理员证书默认有效期,不超过 userCertDaysMax
userCertDaysMax36501–36500用户证书可签发的最大有效期
tokenTtlHours241–8760管理 token 默认 TTL,不超过 tokenMaxTtlHours
tokenMaxTtlHours7201–8760管理 token 最大 TTL

spec.registration ​

字段默认值范围说明
windowMaxTtlMinutes601–1440注册窗口单次可开启的最大时长
windowMaxDevices10001–100000单个窗口可放行的最大设备数

注册窗口本身是运行时状态,只在部署期短开;声明只约束上限。

spec.credentials ​

字段默认值范围说明
rotationDays900–3650DHHC-1 定期轮换周期;0 关闭
reconcileIntervalSeconds600–86400凭据推送对账周期;0 关闭

spec.agentTimeoutSec ​

字段默认值范围说明
agentTimeoutSec10(0, 600]控制面调用存储 Agent 的超时(秒)

完整示例 ​

yaml
apiVersion: kurrent.io/v1
kind: ControlPlaneConfiguration
metadata:
  name: kurrent-cp
spec:
  networking:
    interface: enp3s0
    subnet: 192.168.80.0/24
    dhcpRange: 192.168.80.50,192.168.80.100
    gateway: 192.168.80.2
    dns: 223.5.5.5
  pki:
    bootstrapTokenTtlMinutes: 60
    bootstrapTokenMaxTtlMinutes: 1440
    bootstrapTokenMaxUses: 100
    componentCertDays: 90
    renewThreshold: 0.2
    crlRefreshHours: 12
  serverCert:
    san: "IP:127.0.0.1,DNS:localhost"
    days: 3650
    rotateOnChange: false
  boot:
    defaultArch: x86_64
    menuTimeoutMs: 5000
    autoBootTimeoutMs: 1
  auth:
    sessionTtlHours: 12
    adminCertDays: 365
    userCertDaysMax: 3650
    tokenTtlHours: 24
    tokenMaxTtlHours: 720
  registration:
    windowMaxTtlMinutes: 60
    windowMaxDevices: 1000
  credentials:
    rotationDays: 90
    reconcileIntervalSeconds: 60
  agentTimeoutSec: 10

节点配置 ​

根字段 ​

字段类型必填说明
apiVersionstring是固定 kurrent.io/v1
kindstring是固定 NodeConfiguration
metadata.namestring是节点身份(agent_id):12 位小写十六进制,与盘 os_tag 同构
metadata.remarkstring否人类备注(描述性名称的唯一归属),默认空
specobject是见下

metadata.name 同时是控制面登记键与组件证书 CN,由 bootstrap token 绑定。kurrent join 写入后不应手工改写;描述性名称写 metadata.remark,不得占用身份字段。

spec.agent ​

字段类型必填约束说明
backendstring否nvmet / stgt / lio,默认 nvmet数据面后端
advertiseUrlstring否http(s) URL,可空控制面可达的 Agent 地址,用于登记与续签
diskDirstring是宿主绝对路径盘镜像目录;也是 compose 挂载源
nqnBasestring是nqn.<yyyy-mm>.<reverse-domain>Host NQN 与盘 NQN 的命名域

spec.controlPlane ​

字段类型必填约束说明
urlstring是http(s) URL组件 enroll / renew 的 mTLS 连接目标

完整示例 ​

yaml
apiVersion: kurrent.io/v1
kind: NodeConfiguration
metadata:
  name: 3f2a9c1d8b7e
  remark: 生产存储
spec:
  agent:
    backend: nvmet
    advertiseUrl: https://192.168.80.10:4840
    diskDir: /storager_img
    nqnBase: nqn.2026-07.com.kurrent
  controlPlane:
    url: https://192.168.80.1

应用与核对 ​

控制面 ​

bash
kurrent config print init-defaults > control_plane/kurrent.yaml
$EDITOR control_plane/kurrent.yaml
kurrent config validate
kurrent config show          # 注入默认值后的生效形态
kurrent init                 # 校验、应用、启动、等待健康检查
kurrent config status        # configHash、派生文件与证书漂移

init 是幂等的:修改声明后重跑即生效。校验失败不写盘;启动失败会回滚上一份声明并恢复运行,退出码非零。

节点 ​

bash
kurrent config print node-defaults > storager/kurrent.yaml
$EDITOR storager/kurrent.yaml
kurrent config validate --node
kurrent join https://<control-plane> --token <token> --agent-id <agent_id>

join 在声明缺失时按模板生成,已存在时读入并同步控制面地址。节点声明错误在写盘前失败,不会等到容器启动才暴露。

configHash 与漂移 ​

控制面的 configHash 是对注入默认值后的生效声明做规范化 JSON(排序键、紧凑分隔符)再取 SHA-256。它用于确认运行态加载的是哪一份声明,不包含运行时设置。

派生与漂移:

对象来源漂移处理
dnsmasq.confspec.networking启动时重新生成;config status 报告差异
服务器证书spec.serverCert默认只报告;rotateOnChange 开启后重签
组件 PKIspec.pki启动时校验;缺失或损坏导致健康检查失败

注册窗口、验签强制开关等运行时设置存放于 state/settings.json,不进入声明,也不参与 configHash。

环境变量 ​

变量作用范围
KURRENT_CONFIG_FILE覆盖进程读取的声明路径控制面与节点;测试注入用
KURRENT_CP_INSECURE开发模式放行所有请求仅本地开发,生产禁用
KURRENT_CP_OPENAPI开启 OpenAPI 文档端点默认关闭
KURRENT_CP_ALARM_WEBHOOK告警外投 URL可选
KURRENT_CP_CREDENTIAL_ROTATION_DAYS临时覆盖轮换周期运维与测试
KURRENT_CP_CREDENTIAL_RECONCILE_INTERVAL临时覆盖对账周期运维与测试
KURRENT_CP_CRL_REFRESH_INTERVAL临时覆盖 CRL 重签周期运维与测试

声明是策略的缺省来源;后台任务的两个环境变量只作临时覆盖。容器内路径与监听地址由 compose 固化,不属于声明。

相关页面 ​