功能概述
Kata Containers 是一种开源的安全容器运行时,通过轻量级虚拟机技术为容器提供虚拟机级别的安全隔离。TKE 原生节点支持 Kata 运行时,适用于多租户隔离、安全敏感业务等场景。
核心优势
强隔离性:每个 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:创建支持 Kata 运行时的节点池
控制台操作
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: katanode.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-publicnode.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: disablenode.tke.cloud.tencent.com/update-existed-nodes-security-group: disablenode.tke.cloud.tencent.com/vCPU: "208"spec:autoRepair: falsedeletePolicy: NewestdisplayName: xd-test-katahealthCheckPolicyName: ""instanceTypes:- BMS5.52XLARGE768replicas: 1scaling:createPolicy: ZonePriorityselector:matchLabels:node.tke.cloud.tencent.com/machineset: np-xxxsubnetIDs:- subnet-xxxtemplate:metadata:annotations:node.tke.cloud.tencent.com/cluster-cloud-tags: '[{"tagKey":"xxx","tagValue":"xxxx"}]'node.tke.cloud.tencent.com/container-runtime: katanode.tke.cloud.tencent.com/image-label: ts4-publicnode.tke.cloud.tencent.com/machine-cloud-tags: '[]'labels:node.tke.cloud.tencent.com/machineset: np-l2oj4hdnspec:metadata:annotations:node.tke.cloud.tencent.com/automation-service: "true"node.tke.cloud.tencent.com/container-runtime: katanode.tke.cloud.tencent.com/image-label: ts4-publicnode.tke.cloud.tencent.com/monitor-service: "true"node.tke.cloud.tencent.com/security-agent: "false"providerSpec:type: NativeCVMvalue:instanceChargeType: PostpaidByHourkeyIDs:- skey-xxxlifecycle: {}management: {}metadata:creationTimestamp: nullsecurityGroupIDs:- sg-xxxsystemDisk:DiskPartition: ""diskSize: 50diskType: CloudBSSDruntimeRootDir: /var/lib/containerdtype: 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
步骤2:部署工作负载到 Kata 节点
查看可用的 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-katanamespace: defaultspec:replicas: 2selector:matchLabels:app: nginx-katatemplate:metadata:labels:app: nginx-kataspec:runtimeClassName: kata-qemu # 指定使用 kata-qemu 运行时containers:- name: nginximage: nginx:1.24.0ports:- containerPort: 80resources:requests:cpu: 100mmemory: 128Milimits:cpu: 200mmemory: 256Mi---apiVersion: v1kind: Servicemetadata:name: nginx-kata-servicenamespace: defaultspec:type: LoadBalancerselector:app: nginx-kataports:- port: 80targetPort: 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 相关信息
部署建议
1. 资源规划
Kata 容器需要额外的资源开销,建议在 Pod 配置中预留:
resources:requests:cpu: 200m # 建议比普通容器多 5%-10%memory: 256Mi # 建议比普通容器多 10%-20%limits:cpu: 400mmemory: 512Mi
2. 健康检查配置
Kata 容器启动时间略长,建议调整健康检查参数:
livenessProbe:httpGet:path: /healthport: 8080initialDelaySeconds: 30 # 增加初始延迟periodSeconds: 10timeoutSeconds: 5readinessProbe:httpGet:path: /readyport: 8080initialDelaySeconds: 20 # 增加初始延迟periodSeconds: 5timeoutSeconds: 3
3. RuntimeClass 选择
# 性能优先场景(启动快、资源占用低)runtimeClassName: kata-clh# 兼容性优先场景(功能完善、稳定性好)runtimeClassName: kata-qemu
4. 节点池隔离
建议将 Kata 节点和普通容器节点分开管理。
常见问题
1. 创建节点池时提示“不支持该机型”
原因:当前仅支持 BMS5 系列裸金属实例。
解决方案:在控制台选择 BMS5 系列实例。
2. Pod 创建失败,提示字段不支持
常见错误:
HostNetwork is not supported for kata containershostPID is not supported解决方案:检查 Pod 配置,移除不支持的字段(
hostNetwork、hostIPC、hostPID、shareProcessNamespace、privileged),请参考本文档的 字段兼容性限制。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 配置使用了不支持的字段。
4. Kata 容器启动慢
原因:Kata 容器需要启动轻量级虚拟机。
优化建议:
使用
kata-clh 运行时,启动速度更快。使用镜像缓存。
调整健康检查参数。
5. 无法采集 Container 级别监控指标
原因:当前版本暂不支持 Container 级别监控。
替代方案:
使用 Pod 级别监控指标。
在容器内暴露 Prometheus 指标。
使用 Sidecar 方式部署监控 Agent。