Kubernetes 节点亲和性

节点亲和性 是对节点选择器方法的一种泛化,允许指定必要规则和偏好规则

下面的例子是一个 nginx , 亲和性规则要求它

只考虑有3个以上核心(不包含3个)的节点

尽量选择不是 master 的节点

这里还有一个权重,值为1,如果这个节点符合 名称不为 master,则会获得一个权重积分1

调度器最后会选择一个 所有权重 得分最高的节点,权重是一个列表

看下面一个例子

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-hello-deployment
  namespace: lizhe
  labels:
    app: nginx-hello
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx-hello
  template:
    metadata:
      labels:
        app: nginx-hello
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: numberCores
                operator: Gt
                values: ["3"]
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 1
            preference:
              matchFields:
              - key: metadata.name
                operator: NotIn
                values: ["master"]
      containers:
      - name: nginx-hello
        image: nginx
        ports:
        - containerPort: 80

在这个例子中,使用了 numberCores ,请不要误以为这是一个 原生字段,实际上这是一个 node 上的 label,我们需要自己手动创建

不创建的话,是不会调度成功的

添加label

已经可以正确调度了

Send a Message