CKA 공부 6일차

스케쥴링

  • 스케쥴러가 없으면 노드에 있는 파드들의 관리를 직접해야한다.

  • k8s에서는 스케쥴러 없이 매뉴얼로 스케쥴링하는 기능을 제공한다.

  • 파드 디피니션 설정에 nodeName을 주어서 특정 노드에만 파드를 배포시킬 수 있다.

  • binding yaml 파일에 타겟 노드를 지정하고 파드에 바인딩 API로 해당 yaml 파일을 전송해서 특정 노드에만 스케쥴되게 할 수도 있다. (쬐끔 귀찮지만 이미 배포된 파드에서 써볼만 한 듯)

Label, Selector, Annotation

Label

  • 이름 그대로 라벨링을 위한 용도

  • 여러 개의 k8s 오브젝트들을 라벨링해서 나중에 찾기 쉽게 해준다.

  • 라벨은 key, value로 자유롭게 설정이 가능하다. 가령 age: 18과 같은 값도 가능하다.

  • k8s 내에서 라벨은 유니크한 값이어야한다.

  • 그래서 보통 라벨은 해당 서비스의 타입 type: froent-end 정도로 쓰인다.

Selector

  • 존재하는 라벨을 선택하는 용도이다.

  • 라벨링된 오브젝트들을 선택하는 용도인데, 가령 예를 들어 레플리카셋에서 파드의 레이블을 type: back-end라고 했으면, 레플리카의 라벨을 설정하고, 파드 스펙안에서 셀렉터는 파드를 바라보게 해야한다.

  • 이렇게 설정된 레플리카에 서비스를 적용하고 싶다면 서비스의 셀렉터로 type: back-end를 지정하기만 하면 간단하게 해당 서비스와 레플리카셋을 묶어주는 것이 가능하다.

Annotation

  • 오브젝트에 메타데이터를 추가하는 용도로 사용된다.

  • 이름 그대로 주석의 의미를 가지며, 애플리케이션의 버전, git 브랜치 등등을 정의해줄 수 있다.

  • k8s 오브젝트에 메타데이터를 남기고 싶은 경우에 사용할 수 있을 듯 하다.

Taints and Toleration

  • Taints는 노드에 Toleration이 적용된 파드만 배포될 수 있게 하는 옵션이다.
kubectl taint node node-name key=value:traint-effect
  • Taints에는 3가지 옵션을 줄 수 있는데 NoSchedule, PreferNoSchedule, NoExecute가 그 예시이다.

  • NoSchedule은 이름 그대로

  • PreferNoSchedule는 시스템이 가급적이면 파드를 해당 노드에 배포안해줄 것이지만, 보장은 못한다… 정도의 옵션이다.

  • NoExecuteTaintTolerate 할 수 없는 파드가 배포되지 못하게 함은 물론이고, 이미 노드에 배포된 파드가 TaintTolerate 할 수 없다면 제거한다.

  • 여기서 중요한 사실이 NoExecute에서 Taint 노드의 Toleratation를 가진 파드가 항상 Taint 노드에 배치되는 것은 아니다. 전혀 엉뚱한 노드에 배치될 가능성도 존재한다.

  • 그러나 여기서 Taint 노드는 반드시 특정 Toleration을 가진 파드만 허용해준다 것을 기억하자.

  • 만약 어떤 파드가 특정 노드에만 배포되길 원한다면 이는 node affinity라는 다른 컨셉을 배워야하는데 이건 곧 배운다.

  • 또 하나 재밌는 사실은 스케쥴러가 마스터 노드에는 어떤 파드도 스케줄 하지 않는다는 사실이다.

  • 이 역시도 Taint와 관련이 있는데, k8s 클러스터가 구성될 때 마스터 노드에는 어떤 파드도 스케줄 되지 않게 클러스터가 마스터 노드에 Taint한다.

  • 가장 이상적인 것은 사실 마스터 노드에는 어떤 애플리케이션도 배포하지않는 것이 좋다고 한다.




© 2022. by minkuk

Powered by minkuk