본문 바로가기
MLOps/Doker & Kubernetes

Udemy CKA 강의 정리 79: Configuring-Kubernetes-Schedulers

by 공부하는 무니 2023. 2. 22.
반응형

해당 내용은 Udemy의 Certified Kubernetes Administrator (CKA) with Practice Tests 강의를 공부한 내용입니다. 내용을 그대로 번역하기보다는, 제가 이해하기 쉬운 대로 수정한 부분들이 있습니다.

⚠️ 영어 독해가 많이 부족합니다. 틀린 내용이 있으면 알려주시면 감사하겠습니다.


(보충필요)

Configuring Kubernetes Schedulers

스케줄러 프로파일이 무엇인지 살펴보겠습니다.  먼저 여기에서 볼 수 있는 쿠버네티스 클러스터의 일부인 이 네 개의 노드 중 하나에 파드를 스케줄링하는 이 간단한 예제를 사용하여 쿠버네티스 스케줄러가 어떻게 작동하는지 다시 한 번 정리해 보겠습니다.  

(캡처)

여기에는 파드 정의 파일과 파드가 있습니다.  이 네 개의 노드 중 하나에서 스케줄되기를 기다리고 있습니다.  이제 리소스 요구 사항이 10 CPU이므로 10 CPU가 남아있는 노드에서만 스케줄됩니다.  그리고 여기에 나열된 모든 노드에서 사용 가능한 CPU를 확인할 수 있습니다.  

(캡처 필요)

이제, 이 노드만 있는 것이 아니라 다른 파드들도 스케줄링을 기다리고 있습니다.  따라서 가장 먼저 일어나는 일은 이러한 파드가 생성되면 파드가 스케줄링 큐에 들어가는 것입니다.  그래서 여기서 파드가 스케줄링을 기다립니다.  이 단계에서 파드는 파드에 정의된 우선순위에 따라 정렬됩니다.  

이 경우, 우리 파드는 우선순위가 높게 설정되어 있습니다.  따라서 우선순위를 설정하려면 먼저 다음과 같은 우선순위 클래스를 생성하고 이름을 설정하고 우선순위 값을 설정해야 합니다.  

(캡처 필요)

이 경우에는 1백만 개로 설정되어 있으므로 우선순위가 매우 높습니다.  이렇게 하면 우선순위가 높은 파드가 대기열의 시작 부분에 위치하여 먼저 스케줄링됩니다.  따라서 이 스케줄링 단계에서 정렬이 이루어집니다.  그런 다음, 파드는 필터 단계로 들어갑니다.  이 단계에서 파드를 실행할 수 없는 노드가 필터링됩니다.  이 경우 처음 두 노드는 리소스가 충분하지 않아 CPU가 10개도 남아있지 않으므로 필터링됩니다.  다음 단계는 스코어링 단계입니다.  이 단계에서는 노드에 서로 다른 가중치를 부여하여 점수를 매깁니다.  나머지 두 노드에서 스케줄러는 해당 파드에 필요한 CPU를 예약한 후 여유 공간에 따라 각 노드에 점수를 할당합니다.  따라서 이 경우 첫 번째 노드에는 2개가 남고 두 번째 노드에는 6개가 남게 됩니다.  따라서 두 번째 노드가 더 높은 점수를 받게 됩니다.  그래서 그 노드가 선택됩니다.  마지막으로, 바인딩 단계에서는 최종적으로 가장 높은 점수를 받은 노드에 파드가 바인딩됩니다.  이제 이 모든 작업은 특정 플러그인을 통해 이루어집니다.  예를 들어, 스케줄링 대기열에서 파드에 구성된 우선순위에 따라 파드를 순서대로 정렬하는 것은 우선순위 정렬 플러그인입니다.  이렇게 하면 스케줄링할 때 우선순위 클래스가 있는 파드가 다른 파드보다 높은 우선순위를 갖게 됩니다.  

필터링 단계에서, 노드 리소스 적합 플러그인은 파드에 필요한 충분한 리소스를 가진 노드를 식별하고 그렇지 않은 노드를 필터링한다.  이 특정 단계에서 사용되는 다른 플러그인 예로는 파드에 파드 스펙에 언급된 노드 이름이 있는지 확인하고 이 이름과 일치하지 않는 모든 노드를 필터링하는 노드 이름 플러그인이 있습니다.  또 다른 예는 스케줄할 수 없는 플래그가 true로 설정된 노드를 필터링하는 노드 스케줄할 수 없는 플러그인입니다.  이것은 나중에 설명할 노드에 대한 코돈 명령인 배수구에 있을 때입니다.  그러나 예약 불가 플래그가 true로 설정된 모든 노트는 해당 노드에 파드가 설정되어 있지 않은지 확인하는 것은 이 특정 플러그인입니다.  이제 점수 매기기 단계에서, 노드 리소스 적합 플러그인은 각 노드에서 사용 가능한 리소스를 기반으로 그리고 파드가 할당된 후에 각 노드에 점수를 부여합니다.  보시다시피, 하나의 플러그인을 여러 단계에 연결할 수 있습니다.  이 단계의 플러그인의 또 다른 예로는 여러 노드 중에서 파드가 사용하는 컨테이너 이미지가 이미 있는 노드에 높은 점수를 부여하는 이미지 로캘리티 플러그인을 들 수 있습니다.  이제 이 단계에서 플러그인은 특정 노드에 대한 파드 배치를 실제로 거부하지 않는다는 점에 유의하세요.  예를 들어, 이미지 로캘리티 노드의 경우, 이미 이미지가 있는 노드에 파드를 배치하지만, 사용 가능한 노드가 없는 경우 이미지가 없는 노드에 파드를 배치합니다.  따라서 이 단계에서 점수를 매기는 것이다.  마지막으로 바인딩 단계에서는 바인딩 메커니즘을 제공하는 기본 바인더 플러그인이 있습니다.  이제 확장성이 뛰어난 쿠버네티스의 특성 덕분에 어떤 플러그인이 어디로 갈지 사용자 정의할 수 있고, 자체 플러그인을 작성하여 여기에 연결할 수도 있습니다.  그리고 이것은 확장 포인트라고 하는 것을 통해 이루어집니다.  따라서 각 단계에는 플러그인을 연결할 수 있는 확장 지점이 있습니다.  스케줄링 대기열에는 우선순위 정렬 플러그인이 연결되는 대기열 정렬 확장이 있습니다.  그리고 필터 확장자, 점수 확장자, 그리고 방금 말씀드린 각 플러그인이 연결되는 바인드 확장자가 있습니다.  사실 더 있습니다.  필터 단계로 들어가기 전에는 사전 필터 확장이라는 확장이 있고 필터 단계 이후에는 사후 필터라는 확장이 있습니다.  그리고 점수 연장 시점 이전의 사전 점수와 연장 시점 이후의 예약, 즉 점수 연장 시점이 있습니다.  그리고 바인딩 이전의 허가 및 사전 바인딩과 바인딩 단계 이후의 사후 바인딩이 있습니다.  따라서 사용 가능한 옵션이 매우 많습니다.  

기본적으로 플러그인을 생성하고 플러그인을 연결하려는 각 종류의 포인트에 꽂기만 하면 이러한 포인트의 어느 곳에서나 실행할 수 있는 사용자 정의 코드를 얻을 수 있습니다.  다음은 다양한 확장 포인트와 연관되어 기본적으로 제공되는 몇 가지 추가 플러그인에 대해 조금 더 자세히 설명합니다.  보시다시피 일부 플러그인은 여러 확장 지점에 걸쳐 있습니다.  일부는 특정 확장 지점 내에만 있습니다.  이것이 바로 스케줄링 플러그인과 확장 포인트입니다.  따라서 확장성이 뛰어난 쿠버네티스의 특성 덕분에 이러한 플러그인이 호출되는 방식을 사용자 정의하고 필요한 경우 자체 스케줄링 플러그인을 작성할 수 있습니다.  이제 배운 내용을 바탕으로 이러한 플러그인이 호출되는 기본 동작을 변경하는 방법과 정말 필요한 경우 자체 플러그인을 추가하는 방법을 살펴봅시다.  한 걸음 물러나서, 앞서 각각 별도의 스케줄러 바이너리를 사용하여 세 개의 개별 스케줄러를 배포하는 것에 대해 이야기했습니다.  기본 스케줄러와 내 스케줄러, 그리고 내 스케줄러 2가 있습니다.  이제 이 모든 스케줄러는 각각에 연결된 별도의 스케줄러 구성 파일로 실행되는 세 개의 개별 스케줄러 바이너리입니다.  이것이 여러 스케줄러를 배포하는 한 가지 방법입니다.  여기서 문제는 별도의 프로세스이기 때문에 별도의 프로세스를 유지 관리하는 데 추가적인 노력이 필요하고, 더 중요한 것은 별도의 프로세스이기 때문에 스케줄링 결정을 내리는 동안 경쟁 조건이 발생할 수 있다는 것입니다.  예를 들어, 한 스케줄러가 같은 노드에서 동시에 워크로드를 스케줄링하는 다른 스케줄러가 있다는 사실을 모른 채 노드에 대한 워크로드를 스케줄링할 수 있습니다.  그래서 쿠버네티스 1.18 릴리스에서는 단일 스케줄러에서 여러 프로파일을 지원하는 기능이 도입되었습니다.  이제 구성 파일에서 프로파일 목록에 항목을 더 추가하고 각 프로파일에 대해 별도의 스케줄러 이름을 지정하여 단일 스케줄러 내에서 여러 프로파일을 구성할 수 있습니다.  이렇게 하면 각 스케줄러에 대해 별도의 프로파일이 생성되어 각 스케줄러 자체가 별도의 스케줄러로 작동하지만, 이제 각 스케줄러에 대해 별도의 바이너리를 만드는 대신 여러 스케줄러가 동일한 바이너리에서 실행된다는 점을 제외하고는 동일한 바이너리에서 여러 스케줄러가 실행됩니다.  그렇다면 이렇게 서로 다른 스케줄러 프로필이 다르게 작동하도록 구성하려면 어떻게 해야 할까요?

  지금은 모두 이름만 다를 뿐입니다.  따라서 기본 스케줄러와 똑같이 작동합니다.  어떻게 다르게 작동하도록 구성할 수 있나요?
  각 스케줄러 프로필에서 원하는 방식으로 플러그인을 구성할 수 있습니다.  예를 들어, 내 스케줄러 2 프로필에서는 디텐티드 플러그인 및 허용 플러그인과 같은 특정 플러그인을 비활성화하고 나만의 사용자 지정 플러그인을 활성화하겠습니다.  내 스케줄러 3 프로필의 경우 모든 사전 점수 및 점수 플러그인을 비활성화하겠습니다.  플러그인 섹션 아래에서 확장 지점을 지정하고 이 경우와 같이 이름이나 패턴으로 플러그인을 활성화 또는 비활성화하는 방법이 여기에 나와 있습니다.  여기까지입니다.  스케줄러와 스케줄러 프로파일의 작동 방식과 쿠버네티스에서 여러 스케줄러 프로파일을 구성하는 방법에 대한 개요가 되었기를 바랍니다.  이에 대한 자세한 내용은 다중 스케줄러 프로파일을 도입한 쿠버네티스 개선 제안을 확인해보자.  멀티 스케줄링 프로파일을 소개한 캡 1451과 스케줄링 프레임워크에 대한 글도 참고하시기 바랍니다.  

반응형

댓글