如何在Openshift中让Router Pod独占Router节点

如何在Openshift中让Router Pod独占Router节点.png

概念

什么是Router Pod?

Router Pod是Openshift中管理外部流量访问集群服务的重要的入口,它是通过一个haproxy的Pod实现的。由于Router Pod的独特性,几乎所有的流量都过Router中的Pod代理到真正的服务,所以它是一个非常非常重要的服务。

什么是Router节点

因为集群中的Router Pod数量是有限的,外部流量通过负载均衡器到达Router的Pod,所以对于Router Pod必须固定在负载均衡器下的节点上。这些运行Router Pod的节点,我们叫做Router节点。
它有两个特点:

  1. 运行default/router的pod;
  2. 被外部负载均衡器监听

为什么需要让Router Pod独占Router节点上

几乎所有的外部访问集群服务的流量都通过Router Pod代理,所以它是非常重要。在正式使用时,需要对它进行保护。让它独占节点,防止其它Pod抢占Router Pod的资源,以确保集群下服务的可用性。

具体实施Router Pod独占绑定Router节点

  1. Router节点上添加label
oc label node router1.it.example.com router=true
  1. Route节点上添加taint
oc adm taint node router2.it.example.com router=true:NoSchedule
  1. Router的DC上添加节点亲和配置
spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: router
                operator: In
                values:
                - "true"
  1. Router的DC上使用污点容忍
spec:
      tolerations:
      - effect: NoSchedule
        key: router
        operator: Exists

遇到的问题

  • 最开始的时候并没有使用Node Affinity,而是使用nodeSelector来绑定Pod与Node。但是使用nodeSelector后,部署pod时集群部署pod(pod_deploy)会带上nodeSelector的属性,而并不会带上容忍污点tolerations的属性,这就导致了pod_deploy无法被调度。
  • 解决办法 :用nodeAffinity替换nodeSelector。pod_deploy也不会带上nodeAffinity的属性,成功被调度

参考文章

Pod的调度规则请参考: 玩转Openshift中Pod调度

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1
    健康分享家阅读 117评论 0 0
  • 大家好,第59篇每日原创,我是简单生活中寻找不简单的快乐分享者灿泉,性格分析咨询师。 在心理咨询领域有一个标准
    泉水说阅读 267评论 0 0
  • 生活中,有着很多未知的事情,每件事都可能令你震惊、失望、无措。生活是个很坏的小子,总喜欢给你来上意思意外好让你意...
    一只小小航阅读 498评论 0 1
  • 这样轻盈地飞 我们相逢 地点和距离将不再有什么问题 我们恰如两朵柳絮 只剩下相互倾慕的灵魂在嬉戏 留下彼此相互间卑...
    梦中的期许阅读 319评论 2 2