在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
前提步骤:在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进行平均分配
}
}
]
}
}
通过上述设置,我们将负载集中且平分到希望的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.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 条评论