Deployment 文件

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-anti
spec:
  replicas: 2
  selector:
    matchLabels:
      app: anti-nginx
  template:
    metadata:
      labels:
        app: anti-nginx
    spec:
      affinity:
        podAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
                - key: a
                  operator: In
                  values:
                    - b
            topologyKey: kubernetes.io/hostname
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
                - key: app
                  operator: In
                  values:
                    - anti-nginx
            topologyKey: kubernetes.io/hostname
      magePullSecrets: 
      - name: kleven-registry
      containers:
        - name: with-pod-affinity
          image: kleven-repository:8083/nginx

利用Pod亲和性,将Pod部署到相关联的Pod目前所在的节点

必须部署到拥有标签a=b的Pod所在的节点

	  affinity:
        podAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
                - key: a
                  operator: In
                  values:
                    - b
            topologyKey: kubernetes.io/hostname

利用Pod反亲和性,将不同副本部署到不同节点上

不能部署到拥有标签 app=anti-nginx所在的节点上,也就是其他副本所在的节点。

        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
                - key: app
                  operator: In
                  values:
                    - anti-nginx
            topologyKey: kubernetes.io/hostname

避免将同一个Deployment的不同副本调度到同一个节点上,万一这个节点出现故障,将导致整个服务不可用。

topologyKey: kubernetes.io/hostname 即将亲和性和反亲和性拓扑到节点上。同样也可以拓扑到kubernetes.io/zone等等。

Logo

开源、云原生的融合云平台

更多推荐