kubernetes 部署拓扑约束在第一次之后忽略反关联

rqenqsqc  于 2023-03-29  发布在  Kubernetes
关注(0)|答案(1)|浏览(140)

我在k8s中运行一个部署,它有2个副本和hpa,这取决于它可以扩展的使用情况,我为pod设置了一个反亲和力以确保HA,但当hpa扩展时,它将需要更多的节点,这不是我的愿望。我希望在任何节点上调度任何副本2+,而不注意反亲和力,我可以使用拓扑约束和maxskew来实现这一点吗?如果可以,有人可以帮助我吗?我没能成功

m1m5dgzv

m1m5dgzv1#

没有任何函数允许你按你说的去做,但是你可以将反亲和规则从 requiredDuringSchedulingIgnoredDuringExecution 更改为 preferredDuringSchedulingIgnoredDuringExecution

apiVersion: v1
kind: Pod
metadata:
  name: with-pod-affinity
spec:
  affinity:
    podAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
      - labelSelector:
          matchExpressions:
          - key: security
            operator: In
            values:
            - S1
        topologyKey: topology.kubernetes.io/zone
    podAntiAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 100
        podAffinityTerm:
          labelSelector:
            matchExpressions:
            - key: security
              operator: In
              values:
              - S2
          topologyKey: topology.kubernetes.io/zone
  containers:
  - name: with-pod-affinity
    image: registry.k8s.io/pause:2.0

此示例定义了一个Pod关联规则和一个Pod反关联规则。Pod关联规则使用“硬”requiredDuringSchedulingIgnoredDuringExecution,而反关联规则使用“软”preferredDuringSchedulingIgnoredDuringExecution。
关联规则表示,调度器只能将一个Pod调度到一个节点上,如果该节点与一个或多个标签为security=S1的现有Pod位于同一个区域。更准确地说,调度器必须将Pod放置在具有www.example.com标签的节点上topology.kubernetes.io/zone=V,只要该区域中至少有一个节点当前具有一个或多个Pod标签为security=S1的Pod。
反亲合规则是指调度器应该尽量避免将Pod调度到与一个或多个标签为security=S2的Pod位于同一个zone的节点上。更准确地说,如果同一个zone中有其他节点正在运行标签为Security=S2的Pod,则调度器应该尽量避免将Pod放置在标签为www.example.com的节点上topology.kubernetes.io/zone=R。
https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#an-example-of-a-pod-that-uses-pod-affinity
这样,每次配置新VM时,都会配置Pod。
当“even”节点启动时,您只需安排重新启动。

相关问题