k8s 亲和度
2022-07-22k8skinghu589°c
A+ A-Affinity
全局的调度策略
要在启动调度器时配置,包括kubernetes调度器自带的各种predicates和priorities算法。
运行时调度策略
nodeAffinity
(NODE亲和性)podAffinity
(POD亲和性)podAntiAffinity
(POD反亲和性)
nodeAffinity
主要解决POD要部署在哪些主机,以及POD不能部署在哪些主机上的问题,处理的是POD和主机之间的关系。
podAffinity
主要解决POD可以和哪些POD部署在同一个拓扑域中的问题。
podAntiAffinity
主要解决POD不能和哪些POD部署在同一个拓扑域中的问题。它们处理的是Kubernetes集群内部POD和POD之间的关系。
总结:
node亲和度:pod跑在指定标签的节点上,专款专用
pod亲和度:所有pod在同一个节点上,提高通信效率
pod反亲和度:所有pod不在同一个节点上,高可用
node亲和度示例
apiVersion: apps/v1 kind: Deployment metadata: name: redis-cache spec: selector: matchLabels: app: data replicas: 3 template: metadata: labels: app: data spec: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: worker operator: In values: - true #- hard containers: - name: redis-server image: redis:3.2-alpine
pod亲和度示例
apiVersion: apps/v1 kind: Deployment metadata: name: redis-cache spec: selector: matchLabels: app: data replicas: 3 template: metadata: labels: app: data spec: affinity: podAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: app operator: In values: - data topologyKey: "kubernetes.io/hostname" containers: - name: redis-server image: redis:3.2-alpine
pod反亲和度示例
apiVersion: apps/v1 kind: Deployment metadata: name: redis-cache spec: selector: matchLabels: app: store replicas: 3 template: metadata: labels: app: store spec: affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: app operator: In values: - store topologyKey: "kubernetes.io/hostname" containers: - name: redis-server image: redis:3.2-alpine
node亲和度和pod反亲和度,高可用示例
apiVersion: apps/v1 kind: Deployment metadata: name: king-whoami namespace: default spec: replicas: 3 strategy: rollingUpdate: maxSurge: 1 maxUnavailable: 1 selector: matchLabels: app: king-whoami-deploy template: metadata: labels: app: king-whoami-deploy spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: worker operator: In values: - "true" podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: app operator: In values: - "king-whoami-deploy" topologyKey: "kubernetes.io/hostname" containers: - name: whoami image: containous/whoami:latest imagePullPolicy: IfNotPresent ports: - name: http containerPort: 80