服务器区域隔离

解决问题

在资源冗余不足情况下,有些批量服务导致节点内存和CPU间歇性暴增,从而导致节点拓机影响客户服务稳定性。

解决方案

将服务进行分离分为计算区和稳定区。
稳定区服务通过pods资源限制使得总资源使用量低于80%,以此保障服务的稳定性。
计算区服务总资源使用量达到120%,允许节点拓机,但需要报警并及时响应,对部署在计算区服务不提供99.9%可用性保障。

如何进行区域隔离

通过k8s的节点亲和性和污点功能来进行区域隔离。

隔离稳定区

稳定区节点添加标签

添加容忍部署会尽可能部署到有污点节点但是不必须,所以为了可以部署到指定的节点,要做节点亲和性配置(节点亲和性配置是通过节点label来做的)。

kubectl label node izuf684p7jmyrzfr3oq2fxz yb-scope=stable 

移除标签

kubectl label node izuf684p7jmyrzfr3oq2fxz yb-scope-

稳定区节点添加污点

添加污点的节点如果部署配置中没有配置容忍将不会将pod部署到节点中。

kubectl taint nodes izuf684p7jmyrzfr3oq2fxz stable=whoami:NoSchedule

移除节点污点

kubectl taint nodes izuf684p7jmyrzfr3oq2fxz stable=whoami:NoSchedule

部署文件添加节点亲和性

"affinity": {
          "nodeAffinity": {
            "requiredDuringSchedulingIgnoredDuringExecution": {
              "nodeSelectorTerms": [
                {
                  "matchExpressions": [
                    {
                      "key": "yb-scope",
                      "operator": "In",
                      "values": [
                        "stable"
                      ]
                    }
                  ]
                }
              ]
            }
          }
        }

部署配置添加容忍

"tolerations": [
    {
      "key": "stable",
      "operator": "Equal",
      "value": "whoami",
      "effect": "NoSchedule"
    }
  ]

计算区服务部署

默认不添加亲和性配置部署到计算区域

添加标签

kubectl label node izuf684p7jmyrzfr3oq2fxz yb-scope=computing 

部署配置添加节点亲和性配置

"affinity": {
          "nodeAffinity": {
            "requiredDuringSchedulingIgnoredDuringExecution": {
              "nodeSelectorTerms": [
                {
                  "matchExpressions": [
                    {
                      "key": "yb-scope",
                      "operator": "In",
                      "values": [
                        "computing"
                      ]
                    }
                  ]
                }
              ]
            }
          }
        }
最后编辑: 马运宝  文档更新时间: 2021-01-08 14:32   作者:马运宝