oe1019
作者oe1019·2019-11-06 10:37
软件开发工程师·IBM

IBM Could Private,Linux One上通过Affinity进一步控制容器部署

字数 2160阅读 3850评论 0赞 1

1. 背景

在Linux One上搭建IBM Could Private的K8S平台时,我们通常会将在LPAR上搭建KVM虚拟机作为集群的工作节点。
详细,请参见: 在LinuxOne服务器上运行KVM客户机部署多中心区块链网络

在集群中,考虑到虚拟网络层面的设置。参见在LinuxOne服务器上安装配置KVM客户机我们通常通过将业务上有关联性的pod部署在同一个工作节点的VM中从而降低数据在网络中的时间开销。如,我们可以将Fabric的Peer节点和web UI节点,如fabcar中的web UI部署在同一个LinuxOne的不同VM上,从而降低网络通信的时间成本。

具体来说,结合下图,VM上MACVTAP的设置。我们可以看到,在LPAR的网卡实现了转发。

同一VM上的container通信通过VM上的虚拟网卡完成。 同一LPAR上,不同VM之间的container通信,可以通过MACVTAP完成。从而避免数据包反复进出LPAR。

接下来将以IBM Could Private作为K8s cluster为例,向大家展示如何通过修改affinity字段,从而达到上述的效果。

原理,参考4.2

2. 步骤

前提步骤:在IBM Could Private已经部署好负载。

步骤一: 为工作节点打上标签,作为准备

首先我们为集群中的工作节点打上标签,以表明其所处的物理数据中心。

kubectl label nodes instance=

然后我们为集群中的工作节点打上标签,用于区分工作节点的类别。

kubectl label nodes type=

如下:

我们可以设置worker1,worker2是分别在Linux_one_A,Linux_one_B上的计算型VM

kubectl label nodes worker1 instance=Linux_one_A

kubectl label nodes worker2 instance=Linux_one_A

kubectl label nodes worker3 instance=Linux_one_B

kubectl label nodes worker1 type=A

kubectl label nodes worker2 type=B

kubectl label nodes worker3 type=Orderer

步骤二: 为deployment添加node affinity

参考参考资料4.1中修改deployment的方式,在ICP中修改deployment,为Pod制定

2.2. affinity设置

通过添加如下字段,将计算型pod部署在worker1,worker2上

"nodeAffinity": {

"requiredDuringSchedulingIgnoredDuringExecution": {

"nodeSelectorTerms": [

{

"matchExpressions": [

{

"key": "type",

"operator": "In",

"values": [

"cpu"

]

}

]

}

]

}

},

通过添加如下字段,将计算型pod平均分配在worker1,worker2上,请注意,这里我们假设计算型的pod拥有label(key=type,value=cpu)

"podAntiAffinity": {

"preferredDuringSchedulingIgnoredDuringExecution": [

{

"weight": 100,

"podAffinityTerm": {

"labelSelector": {

"matchExpressions": [

{

"key": "type",

"operator": "In",

"values": [

"cpu"

]

}

]

},

"topologyKey": "instance" #如果这里使用"kubernetes.io/hostname"的话,是按照k8s的worker节点ip进行平均分配

}

}

]

}

}

3. 结论

通过上述设置,我们将负载集中且平分到希望的Linux_one_A,VM上

$ kubectl get pod -o wide

NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES

PeerA 5/5 Running 0 mm 10.x.x.x worker1

Web_UI_A 5/5 Running 0 mm 10.x.x.x worker1

PeerB 5/5 Running 0 mm 10.x.x.x worker2

Web_UI_B 5/5 Running 0 mm 10.x.x.x worker2

Orderer 5/5 Running 0 mm 10.x.x.x worker3

4. 参考资料

4.1 https://www.ibm.com/support/knowledgecenter/SSBS6K_3.1.2/kc_welcome_containers.html

4.2 https://kubernetes.io/docs/concepts/configuration/assign-pod-node/

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

1

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广