Pod 스케줄 링 의 PodAffinity: pod 친화 와 상호 배척 스케줄 링 전략

11030 단어 k8s
pod 간 의 친화 와 상호 배척 스 케 쥴 링 전략 은 사용자 로 하여 금 다른 측면 에서 pod 가 실행 하 는 노드 를 제한 하 게 합 니 다. 노드 에서 실행 중인 pod 의 태그 에 따라 노드 의 태그 가 아 닌 판단 과 스 케 쥴 링 을 하고 노드 와 pod 두 가지 조건 을 일치 시 켜 야 합 니 다.다음은 실례 를 통 해 pod 간 의 친화 성과 상호 배척 적 정책 설정 을 설명 한다
  • 목표 pod 를 참조 하여 먼저 pod - flag 라 는 pod 를 만 듭 니 다. 태그 보안 = s1 과 app = nginx 가 있 습 니 다. 뒤의 예 는 pod - flag 를 pod 친화 와 상호 배척 의 목표 pod 로 사용 합 니 다.
  • [root@bogon ~]# vim pod-flag.yaml 
    
    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-flag
      labels:
        security: "s1"
        app: "nginx"
    spec:
      containers:
      - name: nginx
        image: nginx
    
    
    [root@bogon ~]# kubectl get pods -o wide
    NAME                 READY   STATUS      RESTARTS   AGE   IP           NODE       NOMINATED NODE   READINESS GATES
    pod-flag             1/1     Running     0          24s   172.17.0.3   kafka03    <none>           <none>
    172.17.0.4   kafka03    <none>           <none>
    
  • pod 의 친화 적 인 스케줄 링 아래 두 번 째 pod 를 만들어 pod 의 친화 적 인 스케줄 링 을 설명 합 니 다. 여기 서 정 의 된 친화 적 인 태 그 는 security = s1 로 위의 pod 'pod - flag' 에 대응 합 니 다.
  • [root@bogon ~]# vim pod-affinity.yaml 
    
    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-affinity
    spec:
      affinity:
        podAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
              - key: security
                operator: In
                values:
                - s1
            topologyKey: kubernetes.io/hostname
      containers:
      - name: with-pod-affinity
        image: k8s.gcr.io/pause:3.1
    
    
    [root@bogon ~]# kubectl create -f pod-affinity.yaml 
    pod/pod-affinity created
    [root@bogon ~]# kubectl get pod -o wide
    NAME                 READY   STATUS      RESTARTS   AGE   IP           NODE       NOMINATED NODE   READINESS GATES
    pod-affinity         1/1     Running     0          10s   172.17.0.5   kafka03    <none>           <none>
    pod-flag             1/1     Running     0          16m   172.17.0.3   kafka03    <none>           <none>
    172.17.0.4   kafka03    <none>           <none>
    
    

    이 두 pod 가 같은 node 에서 실행 되 는 것 을 볼 수 있 습 니 다.
  • pod 의 상호 배척 적 인 스케줄 링 은 세 번 째 pod 를 만 듭 니 다. 우 리 는 그 가 목표 pod 와 같은 node 에서 실행 되 지 않 기 를 바 랍 니 다: vim anti - affinity. yaml
  • apiVersion: v1
    kind: Pod
    metadata:
      name: anti-affinity
    spec:
      affinity:
        podAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
              - key: security
                operator: In
                values:
                - s1
            topologyKey: failure-damon.beta.kubernetes.io/zone
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
              - key: app
                operator: In
                values:
                - nginx
            topologyKey: kubernetes.io/hostname
    
      containers:
      - name: anti-affinity
        image: k8s.gcr.io/pause:3.1
    
    

    이 새로운 pod 와 security = s1 의 pod 는 같은 zone 이지 만 app = nginx 의 pod 와 같은 node 가 아 닙 니 다!
    [root@bogon ~]# kubectl get pod -o wide
    NAME                 READY   STATUS      RESTARTS   AGE    IP           NODE       NOMINATED NODE   READINESS GATES
    anti-affinity        0/1     Pending     0          26s    <none>       <none>     <none>           <none>
    
    

    자세 한 내용 보기: kubectl describe pod / anti - afinity 에서 스케줄 규칙 에 맞지 않 는 글 자 를 발견 할 수 있 습 니 다!
    Events:
      Type     Reason            Age        From               Message
      ----     ------            ----       ----               -------
      Warning  FailedScheduling  <unknown>  default-scheduler  0/2 nodes are available: 2 node(s) didn't match pod affinity rules.
      Warning  FailedScheduling    default-scheduler  0/2 nodes are available: 2 node(s) didn't match pod affinity rules.
    
    

    노드 친화 성 유형, pod 친화 적 인 연산 자 도 포함 합 니 다.
  • In
  • NotIn
  • Exists
  • DoseNotExist
  • Gt
  • Lt
  • 좋은 웹페이지 즐겨찾기