K8S学习之基础五:k8s中node节点亲和性

发布于:2025-03-04 ⋅ 阅读:(12) ⋅ 点赞:(0)

pod调度具体会调度到哪个节点呢?这里就涉及到node亲和性的问题

node节点亲和性nodeAffinity

硬亲和性:requiredDuringSchedulingIgnoredDuringExecution,必须满足

软亲和性:preferredDuringSchedulingIgnoredDuringExecution,最好满足

# 硬亲和性
vi pod-nodeaffinity-demo.yaml 
kind: Pod
metadata:
  name:  pod-node-affinity-demo
  namespace: default
  labels:
    app: myapp
    tier: frontend
spec:
  affinity:
    nodeAffinity:
     requiredDuringSchedulingIgnoredDuringExecution:
       nodeSelectorTerms:
       - matchExpressions:
         - key: zone
           operator: In
           values:
           - foo
           - bar
  containers:
  - name: myapp
    image: 172.16.80.140/nginx/nginx:1.26
    imagePullPolicy: IfNotPresent
kubectl describe pod pod-node-affinity-demo

# pod处于pending状态,原因是没有符合硬亲和性条件的node节点

# 在node02上打上标签 zone=foo或者zone=bar,那先pod被调度到node02节点

# 软亲和性,如果没有符合条件的就忽略,weight是相对权重,权重越高,pod调度的几率越大
vi pod-nodeaffinity-demo-2.yaml
kind: Pod
metadata:
  name: pod-node-affinity-demo-2
  namespace: default
  labels:
    app: myapp
    tier: frontend
spec:
  containers:
  - name: myapp
    image: 172.16.80.140/nginx/nginx:1.26
    imagePullPolicy: IfNotPresent
  affinity:
    nodeAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
      - preference:
          matchExpressions:
          - key: zone1
            operator: In
            values:
            - foo1
            - bar1
        weight: 10
      - preference:
          matchExpressions:
          - key: zone2
            operator: In
            values:
            - foo2
            - bar2
        weight: 20
kubectl apply -f pod-nodeaffinity-demo-2.yaml