![](https://img.haomeiwen.com/i5793257/7366303e398086f1.jpeg)
Pod网络(速)控制的必要性
高速公路上,当流量大时,如果汽车仍然不限制速度的话,将会很容易发生车祸,我们都会自觉地减速缓慢通过,只有减速才能安全行驶。
在平台的集群中也是一样,一台主机上会有大量容器运行,容器相当于高速速上的汽车,对外的网络通信都使用主机出口这条高速路,如果某(几)个容器突然访问流量大增,而且没有作任何网络限速,会占用了主机的网络,严重影响其它容器的网络,进而影响其它业务。
前提
- Openshift打开多租户网络模式
修改/etc/origin/master/master-config.yaml将networkPluginName设置为redhat/openshift-ovs-multitenant
...
hostSubnetLength: 9
networkPluginName: redhat/openshift-ovs-multitenant
serviceNetworkCIDR: 172.30.0.0/16
...
为Pod添加网络限速标记
kind: Pod
apiVersion: v1
metadata:
name: nginx
annotations:
kubernetes.io/ingress-bandwidth: 1M
kubernetes.io/egress-bandwidth: 1M
spec:
containers:
- image: nginx
name: nginx
说明
:
- kubernetes.io/ingress-bandwidth设置的是
(出端口)下行
的网速限制 - kubernetes.io/egress-bandwidth设置的是
(入端口)上行
的网速限制 - 网络限制单位必须是
M
,实际单位对应的是Mb
为DeploymentConfig添加限速标记
kind: DeploymentConfig
metadata:
labels:
app: nginx
name: nginx
namespace: test
spec:
replicas: 1
selector:
deploymentconfig: nginx
template:
metadata:
annotations:
kubernetes.io/egress-bandwidth: 0.5M
kubernetes.io/ingress-bandwidth: 0.5M
labels:
app: nginx
deploymentconfig: nginx
spec:
containers:
- image: nginx
name: nginx
说明
:
- 因为限速是面向Pod的所以需要要Pod对应的template中添加网络上下行速度限制。
测试(上行与下行都限制为0.5M)
Pod访问外网
[root@demo ~]# oc rsh op-java-sample-13-7bmj7
sh-4.2$ wget https://xxxx.com/xx.zip
--2018-07-10 08:31:26-- https://xxxx.com/xx.zip
Resolving xxxx.com (xxxx.com)... 117.211.167.14
Connecting to xxxx.com (xxxx.com)|117.211.167.14|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [application/zip]
Saving to: 'xx.zip.2'
14% [ <=> ] 211,857 57.2KB/s
说明
:
下载速度为57.2KB/s,恰好是被限的500Kb
外部访问Pod
[root@demo ~]# wget http://10.131.1.32:8080/20180416.db
--2018-07-10 16:50:02-- http://10.131.1.32:8080/20180416.db
Connecting to 10.131.1.32:8080... connected.
HTTP request sent, awaiting response... 200 OK
Length: 10698784 (10M) [application/octet-stream]
Saving to: ‘20180416.db.1’
9% [ <=> ]1,056,888 58.3KB/s eta 4m 10s
说明
10.131.1.32为Pod在集群下的IP,从主机访问Pod的服务下载文件,速度为58.3KB/s,恰好是被限的500Kb
同一个Poroject下的Pod间访问
sh-4.2$ wget http://10.131.1.32:8080/20180416.db
--2018-07-10 08:54:50-- http://10.131.1.32:8080/20180416.db
Connecting to 10.131.1.32:8080... connected.
HTTP request sent, awaiting response... 200 OK
Length: 10698784 (10M) [application/octet-stream]
Saving to: '20180416.db'
13% [======================> ] 1,480,482 57.6KB/s eta 47s
说明
:
- Pod间网络访问也会受到Pod网络配置的控制
- 同时在测试过程中发现,刚开始测试时网络是很高的,但是3-5s后会降到被限制的网速
网友评论