上云无忧 > 文档中心 > 腾讯云容器服务实战教程 - 在 TKE 上对 Pod 进行带宽限速
容器服务 TKE
腾讯云容器服务实战教程 - 在 TKE 上对 Pod 进行带宽限速

文档简介:
操作场景: 腾讯云容器服务 TKE 暂不支持 Pod 限速,但可通过修改 CNI 插件来支持此功能。本文档介绍如何在 TKE 上实现对 Pod 的带宽限速,您可结合实际场景进行操作。
*此产品及展示信息均由腾讯云官方提供。免费试用 咨询热线:400-826-7010,为您提供专业的售前咨询,让您快速了解云产品,助您轻松上云! 微信咨询
  免费试用、价格特惠

操作场景

腾讯云容器服务 TKE 暂不支持 Pod 限速,但可通过修改 CNI 插件来支持此功能。本文档介绍如何在 TKE 上实现对 Pod 的带宽限速,您可结合实际场景进行操作。

注意事项

腾讯云容器服务 TKE 支持使用社区的 bandwidth 插件对网络进行限速,目前适用于 Global Router 模式和 VPC-CNI 共享网卡模式。
暂不支持 VPC-CNI 独占网卡模式。

操作步骤

修改 CNI 插件

Global Router 模式

Global Router 网络模式是容器服务 TKE 基于底层私有网络 VPC 的全局路由能力,实现了容器网络和 VPC 互访的路由策略。GlobalRouter 网络模式适用于常规场景,可与标准 Kuberentes 功能无缝集成,更多信息请参见 Global Router模式介绍
1. 请参考 使用标准登录方式登录 Linux 实例(推荐),登录 Pod 所在节点。
2. 执行以下命令,查看 tke-bridge-agent配置。
		
kubectl edit daemonset tke-bridge-agent -n kube-system
之后添加 args --bandwidth,开启 bandwidth 插件支持。

VPC-CNI 共享网卡模式

VPC-CNI 模式是容器服务 TKE 基于 CNI 和 VPC 弹性网卡实现的容器网络能力,适用于对时延有较高要求的场景。开源组件 Bandwidth 能够支持 Pod 出口和入口流量整形,以及支持带宽控制,使用详细介绍请参阅 VPC-CNI 模式介绍
1. 登录 容器服务控制台,单击左侧导航栏中集群
2. 集群管理页面,选择需开启安全组的集群 ID,进入集群详情页。
3. 在集群详情页面,选择左侧组件管理,在组件管理页面中,单击 eniipamd 组件右侧的修改全局配置

4. 全局配置中找到 bandwidth 插件的配置项(路径:agent.cniChaining.bandwidth),修改为true

说明:
eniipamd 组件修改以上参数即可开启/关闭该特性。支持部署、变更开启和变更关闭,只影响增量的 Pod。

Pod 指定 annotation

可使用社区提供的方式设置:
通过 kubernetes.io/ingress-bandwidth 此 annotation 指定入带宽限速。
通过 kubernetes.io/egress-bandwidth 此 annotation 指定出带宽限速。
示例如下:
		
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
annotations:
kubernetes.io/ingress-bandwidth: 10M
kubernetes.io/egress-bandwidth: 20M
spec:
containers:
- name: nginx
image: nginx

验证配置

您可通过以下两种方式验证配置是否成功:
方式1:登录 Pod 所在的节点,执行以下命令确认限制已经添加。
		
tc qdisc show
返回类似如下结果,则限制已添加成功。
		
qdisc tbf 1: dev vethc09123a1 root refcnt 2 rate 10Mbit burst 256Mb lat 25.0ms
qdisc ingress ffff: dev vethc09123a1 parent ffff:fff1 ----------------
qdisc tbf 1: dev 6116 root refcnt 2 rate 20Mbit burst 256Mb lat 25.0ms
方式2:执行以下命令,使用 iperf 测试。
		
iperf -c <服务 IP> -p <服务端口> -i 1
返回类似如下结果,则说明限制已添加成功。
		
------------------------------------------------------------
Client connecting to 172.16.0.xxx, TCP port 80
TCP window size: 12.0 MByte (default)
------------------------------------------------------------
[ 3] local 172.16.0.xxx port 41112 connected with 172.16.0.xx port 80
[ ID] Interval Transfer Bandwidth
[ 3] 0.0- 1.0 sec 257 MBytes 2.16 Gbits/sec
[ 3] 1.0- 2.0 sec 1.18 MBytes 9.90 Mbits/sec
[ 3] 2.0- 3.0 sec 1.18 MBytes 9.90 Mbits/sec
[ 3] 3.0- 4.0 sec 1.18 MBytes 9.90 Mbits/sec
[ 3] 4.0- 5.0 sec 1.18 MBytes 9.90 Mbits/sec
[ 3] 5.0- 6.0 sec 1.12 MBytes 9.38 Mbits/sec
[ 3] 6.0- 7.0 sec 1.18 MBytes 9.90 Mbits/sec
[ 3] 7.0- 8.0 sec 1.18 MBytes 9.90 Mbits/sec
[ 3] 8.0- 9.0 sec 1.18 MBytes 9.90 Mbits/sec
[ 3] 9.0-10.0 sec 1.12 MBytes 9.38 Mbits/sec
[ 3] 0.0-10.3 sec 268 MBytes 218 Mbits/sec
相似文档
  • 概述: Kubernetes 在集群接入层设计并提供了 Service 及 Ingress 两种原生资源,分别负责四层和七层的网络接入层配置。传统方案是创建 Ingress 或 LoadBalancer 类型的 Service 来绑定腾讯云负载均衡,将服务对外暴露。此方式将用户流量负载至用户节点的 NodePort 上,再通过 KubeProxy 组件转发到容器网络中,此方案在业务性能和能力方面的支持会有所局限。
  • 概述: Kubernetes 官方提供了 NodePort 类型的 Service,即给所有节点开通一个相同端口用于暴露该 Service。大多云上负载均衡 (Cloud Load Balancer,CLB) 类型 Service 的传统实现也都是基于 NodePort,即 CLB 后端绑定各节点的 NodePort,CLB 接收外界流量,转发到其中一个节点的 NodePort 上,再通过 Kubernetes 内部的负载均衡,使用 iptables 或 ipvs 转发到 Pod。示意图如下:
  • 应用场景: 当需明确服务请求来源以满足业务需求时,则需后端服务能够准确获取请求客户端的真实源 IP。例如以下场景: 具有对服务请求的来源进行审计的需求,例如异地登录告警。 具有针对安全攻击或安全事件溯源的需求,例如 APT 攻击及 DDoS 攻击等。
  • 操作场景 Traefik 是一款优秀的反向代理工具,与 Nginx 相比,Traefik 具有以下优势: 原生支持动态配置。例如,Kubernetes 的 Ingress 资源或 IngressRoute 等 CRD 资源(Nginx 每次需重新加载完整配置,部分情况下可能会影响连接)。
  • 操作场景: 腾讯云 Kubernetes 集群实现蓝绿发布或灰度发布通常需向集群额外部署其他开源工具,例如 Nginx Ingress、Traefik 或将业务部署至服务网格 Service Mesh,利用服务网格的能力实现。这些方案均具有一定难度,若您的蓝绿发布或灰度需求不复杂,且不期望集群引入过多的组件或复杂的用法,则可参考本文利用 Kubernetes 原生的特性以及腾讯云容器服务 TKE 标准集群和 TKE Serverless 集群自带的 LB 插件实现简单的蓝绿发布和灰度发布。
官方微信
联系客服
400-826-7010
7x24小时客服热线
分享
  • QQ好友
  • QQ空间
  • 微信
  • 微博
返回顶部