K8S学习之基础六:k8s中pod亲和性

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

Pod节点亲和性和反亲和性

podaffinity:pod节点亲和性指的是pod会被调度到更趋近与哪个pod或哪类pod。

podunaffinity:pod节点反亲和性指的是pod会被调度到远离哪个pod或哪类pod

1.  Pod节点亲和性

requiredDuringSchedulingIgnoredDuringExecution: 硬亲和性

preferredDuringSchedulingIgnoredDuringExecution:软亲和性

vi pod-required-affinity-demo-1.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    app: nginx
    tier: monitor
spec:
    containers:
    - name: nginx
      image: 172.16.80.140/nginx/nginx:1.26
      imagePullPolicy: IfNotPresent
kubectl apply -f pod-required-affinity-demo-1.yaml 
kubectl get pods -owide

vi pod-required-affinity-demo-2.yaml 
kind: Pod
metadata:
  name: busybox
  labels:
    app: backend
    tier: db
spec:
    containers:
    - name: busybox
      image: 172.16.80.140/busybox/busybox:latest
      imagePullPolicy: IfNotPresent
      command: ["sh","-c","sleep 3600"]
    affinity:
      podAffinity:
         requiredDuringSchedulingIgnoredDuringExecution:
         - labelSelector:
              matchExpressions:
              - {key: app, operator: In, values: ["nginx"]}
           topologyKey: kubernetes.io/hostname

以上可以看出,第二个pod(busybox)由于设置了硬亲和性,需要和具有app=nginx的标签的pod在一起,所以也被创 建到了node01上

Pod节点亲和性

vi pod-required-affinity-demo-3.yaml 
kind: Pod
metadata:
  name: busybox1
  labels:
    app: backend1
    tier: db
spec:
    containers:
    - name: busybox1
      image: 172.16.80.140/busybox/busybox:latest
      imagePullPolicy: IfNotPresent
      command: ["sh","-c","sleep 3600"]
    affinity:
      podAntiAffinity:
         requiredDuringSchedulingIgnoredDuringExecution:
         - labelSelector:
              matchExpressions:
              - {key: app, operator: In, values: ["nginx"]}
           topologyKey: kubernetes.io/hostname

以上可以看出,第三个pod(backend)设置了pod发亲和性,和匹配的pod创建在了不同的node上

vi pod-required-affinity-demo-4.yaml
apiVersion: v1
kind: Pod
metadata:
  name: busybox2
  labels:
    app: backend
    tier: db
spec:
    containers:
    - name: busybox2
      image: 172.16.80.140/busybox/busybox:latest
      imagePullPolicy: IfNotPresent
      command: ["sh","-c","sleep 3600"]
    affinity:
      podAntiAffinity:
         requiredDuringSchedulingIgnoredDuringExecution:
         - labelSelector:
              matchExpressions:
              - {key: app, operator: In, values: ["nginx"]}
           topologyKey: kubernetes.io/hostname
         - labelSelector:
              matchExpressions:
              - {key: tier, operator: In, values: ["db"]}
           topologyKey: kubernetes.io/hostname

以上可以看出,因为busybox2的反亲和性,导致没有pod符合条件,只能是pending状态