k8s节点亲和性权重控制调度(阿里云k8s重新部署失败)

        最近发现公司的发布总是自动重构失败,一直没搞清楚,因为有时候重构(重新部署)是好的,只是发布有问题也就一直没管了,后面经常出现服务崩溃问题,发现是pod内存达到指定的阙值自动重构了,然后自动重构又失败了直接导致服务停了,后面找阿里云的工单扯了半天,虽然没解决问题 不过发现了问题是因为有个节点项目部署不上去,就是重构会跳到别的节点上去,然后那个节点是对这个项目有问题的,所以经常重构失败,以前的解决方法是手动伸缩多几个  然后pod起来后再伸缩调回自己需要的   这样就能重构成功了,后面觉得太麻烦了  就着手解决了

         文档 :将 Pod 指派给节点 | Kubernetes

上面的是k8s的文档  几乎所有都能在上面找到

一般驱逐pod都是用的污点,但是我们的pod已经在运行了,这里我就用的亲和性来调度了

我用的是.spec.affinity.nodeAffinity来设置的

spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: topology.kubernetes.io/zone
            operator: In
            values:
            - antarctica-east1
            - antarctica-west1
      preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 1
        preference:
          matchExpressions:
          - key: another-node-label-key
            operator: In
            values:
            - another-node-label-value
  • 节点必须包含一个键名为 topology.kubernetes.io/zone 的标签, 并且该标签的取值必须为 antarctica-east1 或 antarctica-west1
  • 节点最好具有一个键名为 another-node-label-key 且取值为 another-node-label-value 的标签。

你可以使用 operator 字段来为 Kubernetes 设置在解释规则时要使用的逻辑操作符。 你可以使用 InNotInExistsDoesNotExistGt 和 Lt 之一作为操作符。 

按照上面的示例给对应的节点打上不同的标签  然后给对应的pod设置yaml就好了 

你可能感兴趣的:(kubernetes,阿里云,容器)