二、核心优势
·强隔离性:每个 Pod 运行在独立的轻量级虚拟机中,提供 VM 级别的安全隔离。
·兼容性:完全兼容 Kubernetes 和 OCI 标准,无需修改应用代码。
·多运行时支持:提供 kata-clh 和 kata-qemu 两种运行时类型。
三、适用场景
·多租户工作负载隔离。
·运行不可信代码或处理敏感数据。
·Agent Sandbox 沙箱环境。
·满足金融、政务等行业的安全合规要求。
五、前置条件
| 限制项 | 要求 |
| 集群版本 | Kubernetes >= 1.30 |
| 节点类型 | 仅支持原生节点 |
| 实例类型 | 仅支持 BMS5 裸金属实例 |
| 操作系统 | Tencent OS 4 |
七、不兼容字段
由于 Kata 容器运行在独立的轻量级虚拟机中,以下 Kubernetes Pod 字段不被支持:
| 字段 | 说明 | 替代方案 |
| hostNetwork: true | 无法使用宿主机网络 | 使用 NodePort 或 LoadBalancer Service |
| hostIPC: true | 无法共享宿主机 IPC | 通过网络通信或共享存储 |
| hostPID: true | 无法共享宿主机 PID | 使用 Sidecar 容器模式 |
| shareProcessNamespace: true | 不支持进程命名空间共享 | 使用网络通信或共享存储 |
| privileged: true | 不支持特权模式 | 移除特权依赖,使用 capabilities |
八、完全兼容字段
以下字段在 Kata 运行时中完全兼容,无需修改:
·调度相关: nodeSelector, nodeName, affinity, tolerations, priority
·网络相关: dnsPolicy, dnsConfig, hostname, subdomain
·存储相关: volumes, volumeMounts, configMap, secret, emptyDir, persistentVolumeClaim
·服务账户: serviceAccount, serviceAccountName
·生命周期: initContainers, restartPolicy, livenessProbe, readinessProbe
九、网络限制
·不支持 HostNetwork 模式:Kata 容器网络栈与宿主机隔离。
·网络模式待验证:建议在生产环境前进行充分测试。
十、监控与日志限制
| 功能 | 支持情况 |
| 监控指标 – Pod 级别 | 支持 |
| 监控指标 – Container 级别 | 不支持 |
| 日志采集 – CLS | 当前不可用 |
十三、控制台操作
1. 登录 腾讯云容器服务控制台。
2. 选择目标原生集群,进入节点管理 > 节点池。
3. 单击新建,选择原生节点。
4. 单击创建,在新建节点管理页面中:
·选择机型配置,选择 BMS5 系列裸金属实例。
·在高级设置中,开启安全容器(Kata 运行时) 选项。
5. 完成其他配置后,单击创建节点池。
十四、YAML 操作
·特性开关位置:spec.template.spec.metadata.annotations
·参数值:node.tke.cloud.tencent.com/container-runtime: kata
·需指定操作系统镜像:node.tke.cloud.tencent.com/image-label: ts4-public
可参考如下 YAML 示例直接在集群创建原生节点:
apiVersion: node.tke.cloud.tencent.com/v1beta1kind: MachineSetmetadata: annotations: capacity.cluster-autoscaler.kubernetes.io/extended-resources: '{"tke.cloud.tencent.com/qgpu-core":0,"tke.cloud.tencent.com/qgpu-memory":0,"tke.cloud.tencent.com/sub-eni":0}' node.tke.cloud.tencent.com/container-runtime: kata node.tke.cloud.tencent.com/deletion-protection: "true" node.tke.cloud.tencent.com/direct-eni: "31" node.tke.cloud.tencent.com/hostname-pattern: "" node.tke.cloud.tencent.com/image-label: ts4-public node.tke.cloud.tencent.com/memoryGb: "768" node.tke.cloud.tencent.com/route-eni: "285" node.tke.cloud.tencent.com/security-groups-spread: "false" node.tke.cloud.tencent.com/specify-delete-machines: "" node.tke.cloud.tencent.com/update-existed-nodes: "false" node.tke.cloud.tencent.com/update-existed-nodes-metadata: disable node.tke.cloud.tencent.com/update-existed-nodes-security-group: disable node.tke.cloud.tencent.com/vCPU: "208"spec: autoRepair: false deletePolicy: Newest displayName: xd-test-kata healthCheckPolicyName: "" instanceTypes: – BMS5.52XLARGE768 replicas: 1 scaling: createPolicy: ZonePriority selector: matchLabels: node.tke.cloud.tencent.com/machineset: np-xxx subnetIDs: – subnet-xxx template: metadata: annotations: node.tke.cloud.tencent.com/cluster-cloud-tags: '[{"tagKey":"xxx","tagValue":"xxxx"}]' node.tke.cloud.tencent.com/container-runtime: kata node.tke.cloud.tencent.com/image-label: ts4-public node.tke.cloud.tencent.com/machine-cloud-tags: '[]' labels: node.tke.cloud.tencent.com/machineset: np-l2oj4hdn spec: metadata: annotations: node.tke.cloud.tencent.com/automation-service: "true" node.tke.cloud.tencent.com/container-runtime: kata node.tke.cloud.tencent.com/image-label: ts4-public node.tke.cloud.tencent.com/monitor-service: "true" node.tke.cloud.tencent.com/security-agent: "false" providerSpec: type: NativeCVM value: instanceChargeType: PostpaidByHour keyIDs: – skey-xxx lifecycle: {} management: {} metadata: creationTimestamp: null securityGroupIDs: – sg-xxx systemDisk: DiskPartition: "" diskSize: 50 diskType: CloudBSSD runtimeRootDir: /var/lib/containerd type: Native
十五、验证节点池创建成功
节点池创建完成后,检查节点是否已支持 Kata 运行时:
# 查看带有 kata-runtime 标签的节点kubectl get nodes -l katacontainers.io/kata-runtime=true# 预期输出NAME STATUS ROLES AGE VERSIONkata-node-1 Ready <none> 10m v1.24.0kata-node-2 Ready <none> 10m v1.24.0
十七、查看可用的 RuntimeClass
kubectl get runtimeclass# 预期输出NAME HANDLER AGEkata-clh kata-clh 5mkata-qemu kata-qemu 5m
RuntimeClass 选择建议:
·kata-clh:性能优先,启动更快,资源占用更低。
·kata-qemu:兼容性优先,功能更完善,稳定性更好。
十八、示例:部署 Nginx 应用
创建 nginx-kata.yaml 文件:
apiVersion: apps/v1kind: Deploymentmetadata: name: nginx-kata namespace: defaultspec: replicas: 2 selector: matchLabels: app: nginx-kata template: metadata: labels: app: nginx-kata spec: runtimeClassName: kata-qemu # 指定使用 kata-qemu 运行时 containers: – name: nginx image: nginx:1.24.0 ports: – containerPort: 80 resources: requests: cpu: 100m memory: 128Mi limits: cpu: 200m memory: 256Mi—apiVersion: v1kind: Servicemetadata: name: nginx-kata-service namespace: defaultspec: type: LoadBalancer selector: app: nginx-kata ports: – port: 80 targetPort: 80
部署应用:
# 部署应用kubectl apply -f nginx-kata.yaml# 查看 Pod 状态kubectl get pods -l app=nginx-kata -o wide# 预期输出NAME READY STATUS RESTARTS AGE IP NODEnginx-kata-5f8d9c7b4d-abc12 1/1 Running 0 1m 10.244.1.10 kata-node-1nginx-kata-5f8d9c7b4d-def34 1/1 Running 0 1m 10.244.1.11 kata-node-2# 验证 Pod 是否运行在 Kata 容器中kubectl exec -it nginx-kata-5f8d9c7b4d-abc12 — cat /proc/1/cgroup# 输出应包含 kata 相关信息
20、1. 资源规划
Kata 容器需要额外的资源开销,建议在 Pod 配置中预留:
resources: requests: cpu: 200m # 建议比普通容器多 5%-10% memory: 256Mi # 建议比普通容器多 10%-20% limits: cpu: 400m memory: 512Mi
21、2. 健康检查配置
Kata 容器启动时间略长,建议调整健康检查参数:
livenessProbe: httpGet: path: /health port: 8080 initialDelaySeconds: 30 # 增加初始延迟 periodSeconds: 10 timeoutSeconds: 5readinessProbe: httpGet: path: /ready port: 8080 initialDelaySeconds: 20 # 增加初始延迟 periodSeconds: 5 timeoutSeconds: 3
22、3. RuntimeClass 选择
# 性能优先场景(启动快、资源占用低)runtimeClassName: kata-clh# 兼容性优先场景(功能完善、稳定性好)runtimeClassName: kata-qemu
23、4. 节点池隔离
建议将 Kata 节点和普通容器节点分开管理。
25、1. 创建节点池时提示“不支持该机型”
原因:当前仅支持 BMS5 系列裸金属实例。
解决方案:在控制台选择 BMS5 系列实例。
26、2. Pod 创建失败,提示字段不支持
常见错误:
·HostNetwork is not supported for kata containers
·hostPID is not supported
解决方案:检查 Pod 配置,移除不支持的字段(hostNetwork、hostIPC、hostPID、shareProcessNamespace、privileged),请参考这篇档的 字段兼容性限制。
27、3. Pod 一直处于 Pending 状态
排查步骤:
# 查看 Pod 事件kubectl describe pod <pod-name># 检查是否有 Kata 节点kubectl get nodes -l katacontainers.io/kata-runtime=true# 检查 RuntimeClass 是否存在kubectl get runtimeclass
常见原因:
·集群中没有 Kata 节点。
·RuntimeClass 不存在。
·节点资源不足。
·Pod 配置使用了不支持的字段。
28、4. Kata 容器启动慢
原因:Kata 容器需要启动轻量级虚拟机。
优化建议:
·使用 kata-clh 运行时,启动速度更快。
·使用镜像缓存。
·调整健康检查参数。
29、5. 无法采集 Container 级别监控指标
原因:当前版本暂不支持 Container 级别监控。
替代方案:
·使用 Pod 级别监控指标。
·在容器内暴露 Prometheus 指标。
·使用 Sidecar 方式部署监控 Agent。