ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • K8S Scheduling 정리 (Taint, Toleration, Node Affinity)
    K8S 2021. 6. 12. 22:40

    1. manual scheduling 

     

    k8s 스케줄러는 포드가 어떤 노드에 될 것인지 결정한다.

    만약 스케줄러에 장애가 생긴다면 포드를 생성해도 포드는 pending상태에 머문다.

     

    이때 manual한 방법으로 스케줄링 시켜줄 수 있는데

    다음과 같이 nodeName에  할당할 노드명을 적어주면 정상적으로 동작시킬 수 있다.

     

     

     

     

    2. annotation 

     

    annoatation은 tool detail, version, build information등을 기록하기 위한 용도로 사용된다. 

     

     

     

    3. label을 기반으로 pod 찾기 

     

    selector를 이용하여 원하는 label에 속하는 포드를 구할 수 있다. 

     

    여러개의 label에 속한 포드를 찾고 싶다면 콤마를 이용한다. 

     

     

     

    4. taint, toleration 

     

    1) node01에 taint 설정하기 

    (뒤에 - 대쉬를 써주면 untaint된다)

     

     

    2) taint 설정을 해주면 일반 포드는 taint가 되어 있는 노드에 접근하지 못한다. 

     

     

    3) 위에 taint를 지정해준 node01에 포드를 생성하고 싶다면

    다음과 같이 taint를 tolerate할 수 있는 pod를 생성해준다.

     

     

    4) taint가 spray=mortein:NoSchedule인 노드에 포드 생성 확인 

     

     

     

    5. Node Affinity

     

    1) 노드에 label 설정하기 

     

     

    2) 노드의 label 확인하기 

     

     

    3) node affinity를 이용해서 node select하기 

     

    requiredDuringSchedulingIgnoredDuringException으로 nodeAffinity를 생성하여 

    스케줄링시에만 해당 deployment를 color=blue를 label을 갖는 node에 deploy한다. 

     

     

    6. controlplane node에 pod 생성하기 

     

    4번 과정을 이용하여 control plane node의 taint 설정을 untaint 해준다. 

     

    이후 controlplane 노드의 label을 하나 선택해서 node affinity 방식으로 node를 selector 해본다.

     

    node-role.kubernetes.io/master label을 이용한다.

     

    이 때 key만 있고, value는 없으므로 operation은 Exists로 설정해준다. (와일드 카드) 

     

    다음과 같이 blue container가 control plane node에 생성되었음을 알 수 있다. 

     

    반응형

    댓글

Designed by Tistory.