Kubernetes 部署
K8s 形态与物理机部署的差异集中在三点:guardian 省略(探针指向管理口,保活交给编排器)、
存储走持久卷(local:// 挂 PVC)、Gateway API 入站可用 CRD 声明直接物化为平台配置。
节点装配要点
| 项 | K8s 形态 |
|---|---|
| 进程 | 单 worker(traffic-worker run)——guardian=0 |
| 探针 | readinessProbe: /readyz(管理口)——存储+raft 双确认;livenessProbe: /healthz |
| 端口 | 数据口(容器/Service 暴露)+管理口(ClusterIP 不对公网)+Tier 口(Headless Service 集群内) |
| 存储 | volume: "virtual:///data/traffic/config.tier" 挂 PersistentVolume——虚拟卷单工件(推荐);另需 resourceKey(非 memory 卷强制) |
| 多租户 | namespace→tenant 1:1(启用 Gateway API 时) |
集群组网的 worker.json(raft 段/members)与集群部署完全一致—— CP 用 StatefulSet(稳定网络标识)、DP 用 Deployment。
Gateway API 控制器
平台可作为 Kubernetes Gateway API 的实现方:watch Gateway/GatewayClass/HTTPRoute 等 CRD → 合批 → 走七阶段发布物化为节点配置 → status 三条件写回。
安装物料在 deploy/k8s/gateway-api/:
# 1. 上游 CRD(钉定 standard channel v1.2.1——Gateway/HTTPRoute GA)
kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.2.1/standard-install.yaml
# 2. controller RBAC
kubectl apply -f rbac.yaml
# 3. Traffic 节点(helm chart:traffic-gatewayapi)
helm install traffic deploy/k8s/gateway-api/helm
装配声明(builder 形态,chart 以旗标等价注入):
TrafficNodeBuilder.Create()
.WithVolume("virtual:///data/traffic/config.tier")
.WithGatewayApi(new GatewayApiOptions(
Tenant: "default",
GatewayClass: "gateway.tc.traffic",
Namespaces: ["default"]))
.StartAsync();
| 选项 | 语义 |
|---|---|
Tenant |
A 批单一目标租户——CRD 物化的实体全部落该租户 |
GatewayClass |
本实现受理的 GatewayClass 名 |
Namespaces |
watch 的 namespace 选择器 |
namespacePerTenant |
namespace→tenant 1:1 映射开关 |
样例路由见 sample-httproute.yaml;E2E 门(Kind 集群真验)见 e2e-gate.sh。
手改保护
Gateway API 物化的实体带 k8s/ 键前缀——手改/手删被拒绝(422):
CRD 是唯一编辑入口,绕过 CRD 的修改会破坏 watch 回写的一致性。
与物理机形态的能力差异
- validating webhook(缺省仅管线挂载,helm 侧控制 apiserver 注册);
- 版本升级=镜像滚动(编排器保活职责由 Deployment 接管)。