k8s 在有些應用場景下需要把某些應用容器,固定在相應的節點上,比如主流量入口,會有大量的流量進來,那麼如果固定在node 節點上,那麼根據k8s 調度pod 規則,會把這個大流量的pod 漂移到其他node節點上,但是問題很容易,影響這個node節點上的其他pod 容器的網絡通信,
比如,我司,有個服務主入口,那麼這個容器只能固定在4個,4核16g 的高性能node 節點上,這樣,因爲網卡最多就是100m,那麼即使是跑滿了,也不會影響其他節點上的pod
下面說下方法:
1,獲取某個節點的labels
如果修改labels 在命令行最後加上 --overwrite
kubectl label node 172.17.122.109 as-rank=node1 kubectl describe node 172.17.122.109 ##然後查詢Labels 這個字段或看到一下信息 Labels: as-rank=node beta.kubernetes.io/arch=amd64 beta.kubernetes.io/instance-type=QCLOUD beta.kubernetes.io/os=linux failure-domain.beta.kubernetes.io/region=sh failure-domain.beta.kubernetes.io/zone=200003 kubernetes.io/hostname=172.17.122.109
這個時候,編輯app應用的deployment文件,利用篩選器字段,將容器固定制定的node節點
....... spec: ... nodeSelector: as-rank: node ...
這時就會發現這個容器已經被k8s 調度到制定的節點上
這裏要注意下,因爲labels,可能多個節點是一樣的,這麼當用deployment部署的時候,只會往這幾個相同labels 節點部署