如何在Openshift中讓Router Pod獨(dú)占Router節(jié)點(diǎn).png
概念
什么是Router Pod?
Router Pod是Openshift中管理外部流量訪問集群服務(wù)的重要的入口诗宣,它是通過一個haproxy的Pod實現(xiàn)的瘸恼。由于Router Pod的獨(dú)特性龟虎,幾乎所有的流量都過Router中的Pod代理到真正的服務(wù)砸狞,所以它是一個非常非常重要的服務(wù)敛助。
什么是Router節(jié)點(diǎn)
因為集群中的Router Pod數(shù)量是有限的叨粘,外部流量通過負(fù)載均衡器到達(dá)Router的Pod秒梅,所以對于Router Pod必須固定在負(fù)載均衡器下的節(jié)點(diǎn)上旗芬。這些運(yùn)行Router Pod的節(jié)點(diǎn),我們叫做Router節(jié)點(diǎn)捆蜀。
它有兩個特點(diǎn):
- 運(yùn)行default/router的pod;
- 被外部負(fù)載均衡器監(jiān)聽
為什么需要讓Router Pod獨(dú)占Router節(jié)點(diǎn)上
幾乎所有的外部訪問集群服務(wù)的流量都通過Router Pod代理疮丛,所以它是非常重要。在正式使用時辆它,需要對它進(jìn)行保護(hù)誊薄。讓它獨(dú)占節(jié)點(diǎn),防止其它Pod搶占Router Pod的資源锰茉,以確保集群下服務(wù)的可用性呢蔫。
具體實施Router Pod獨(dú)占綁定Router節(jié)點(diǎn)
- Router節(jié)點(diǎn)上添加label
oc label node router1.it.example.com router=true
- Route節(jié)點(diǎn)上添加taint
oc adm taint node router2.it.example.com router=true:NoSchedule
- Router的DC上添加節(jié)點(diǎn)親和配置
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: router
operator: In
values:
- "true"
- Router的DC上使用污點(diǎn)容忍
spec:
tolerations:
- effect: NoSchedule
key: router
operator: Exists
遇到的問題
- 最開始的時候并沒有使用Node Affinity,而是使用nodeSelector來綁定Pod與Node。但是使用nodeSelector后飒筑,部署pod時集群部署pod(pod_deploy)會帶上nodeSelector的屬性咐刨,而并不會帶上容忍污點(diǎn)tolerations的屬性昙衅,這就導(dǎo)致了pod_deploy無法被調(diào)度。
- 解決辦法 :用nodeAffinity替換nodeSelector定鸟。pod_deploy也不會帶上nodeAffinity的屬性而涉,成功被調(diào)度
參考文章
Pod的調(diào)度規(guī)則請參考: 玩轉(zhuǎn)Openshift中Pod調(diào)度