스케줄링, 선점 및 축출 퀴즈
이 퀴즈는 Kubernetes의 스케줄링, 선점 및 축출 관련 개념에 대한 이해도를 테스트합니다. 포드 스케줄링 알고리즘, 노드 선택, 어피니티, 테인트, 톨러레이션, 선점, 축출 등의 주제를 다룹니다.
객관식 문제
Kubernetes 스케줄러가 포드를 노드에 할당하는 과정에서 첫 번째 단계는 무엇인가요?
A) 노드에 점수 매기기
B) 노드 필터링
C) 포드 우선순위 결정
D) 바인딩 작업 수행
정답 보기
정답: B) 노드 필터링
설명: Kubernetes 스케줄러는 포드를 노드에 할당할 때 다음과 같은 단계를 거칩니다:
노드 필터링: 포드를 실행할 수 있는 노드를 식별합니다. 이 단계에서는 리소스 요구 사항, 노드 선택기, 어피니티, 테인트 및 톨러레이션 등을 고려합니다.
노드 점수 매기기: 필터링된 노드에 점수를 할당합니다.
최적의 노드 선택: 가장 높은 점수를 받은 노드를 선택합니다.
바인딩: 선택된 노드에 포드를 할당합니다.
따라서 첫 번째 단계는 노드 필터링입니다.
노드 어피니티(Node Affinity)와 포드 어피니티(Pod Affinity)의 주요 차이점은 무엇인가요?
A) 노드 어피니티는 하드 제약 조건만 지원하고, 포드 어피니티는 소프트 제약 조건만 지원한다
B) 노드 어피니티는 노드 레이블을 기반으로 하고, 포드 어피니티는 포드 레이블을 기반으로 한다
C) 노드 어피니티는 클러스터 수준에서 적용되고, 포드 어피니티는 네임스페이스 수준에서 적용된다
D) 노드 어피니티는 스케줄링 시에만 적용되고, 포드 어피니티는 런타임에도 적용된다
정답 보기
정답: B) 노드 어피니티는 노드 레이블을 기반으로 하고, 포드 어피니티는 포드 레이블을 기반으로 한다
설명: 노드 어피니티(Node Affinity)는 노드의 레이블을 기반으로 포드가 특정 노드에 스케줄링되도록 제약 조건을 설정합니다. 예를 들어, GPU가 있는 노드나 특정 가용 영역의 노드에 포드를 배치할 수 있습니다.
포드 어피니티(Pod Affinity)는 이미 실행 중인 다른 포드의 레이블을 기반으로 포드가 스케줄링되도록 제약 조건을 설정합니다. 예를 들어, 프론트엔드 포드를 백엔드 포드와 같은 노드나 같은 가용 영역에 배치할 수 있습니다.
두 가지 모두 requiredDuringSchedulingIgnoredDuringExecution(하드 제약 조건)과 preferredDuringSchedulingIgnoredDuringExecution(소프트 제약 조건)을 지원합니다.
테인트(Taint)와 톨러레이션(Toleration)의 주요 목적은 무엇인가요?
A) 특정 포드가 특정 노드에만 스케줄링되도록 보장
B) 노드가 특정 포드를 거부하도록 하고, 포드가 이를 허용할 수 있게 함
C) 포드 간의 어피니티 규칙 설정
D) 클러스터의 리소스 사용량 최적화
정답 보기
정답: B) 노드가 특정 포드를 거부하도록 하고, 포드가 이를 허용할 수 있게 함
설명: 테인트(Taint)는 노드에 적용되어 특정 포드가 해당 노드에 스케줄링되지 않도록 합니다. 톨러레이션(Toleration)은 포드에 적용되어 특정 테인트가 있는 노드에도 스케줄링될 수 있도록 합니다.
이 메커니즘은 특정 노드를 특정 워크로드 전용으로 예약하거나, 특정 하드웨어를 필요로 하는 워크로드를 적절한 노드에 배치하는 데 유용합니다. 예를 들어, GPU 노드에 테인트를 적용하고 GPU를 필요로 하는 포드에만 해당 톨러레이션을 부여할 수 있습니다.
테인트와 톨러레이션은 노드 어피니티와 반대 방향으로 작동합니다. 노드 어피니티는 포드가 특정 노드에 끌리도록 하는 반면, 테인트와 톨러레이션은 포드가 특정 노드를 피하도록 합니다(톨러레이션이 없는 경우).
포드 우선순위(Pod Priority)와 선점(Preemption)의 관계는 무엇인가요?
A) 우선순위가 높은 포드는 스케줄링 시 우선순위가 낮은 포드를 선점할 수 있다
B) 우선순위는 포드의 CPU 및 메모리 할당량을 결정한다
C) 선점은 노드 유지 보수 중에만 발생한다
D) 우선순위와 선점은 서로 관련이 없다
정답 보기
정답: A) 우선순위가 높은 포드는 스케줄링 시 우선순위가 낮은 포드를 선점할 수 있다
설명: 포드 우선순위(Pod Priority)는 포드의 중요도를 나타내는 값입니다. PriorityClass 리소스를 통해 정의되며, 포드 스펙에서 참조됩니다.
선점(Preemption)은 우선순위가 높은 포드가 스케줄링될 때 리소스가 부족한 경우, 스케줄러가 우선순위가 낮은 포드를 종료하여 리소스를 확보하는 프로세스입니다.
이 메커니즘을 통해 중요한 워크로드가 클러스터 리소스 부족 상황에서도 스케줄링될 수 있도록 보장할 수 있습니다. 예를 들어, 프로덕션 워크로드에 높은 우선순위를 부여하고 개발/테스트 워크로드에 낮은 우선순위를 부여하면, 리소스 경합 시 프로덕션 워크로드가 우선적으로 실행됩니다.
노드 셀렉터(Node Selector)와 노드 어피니티(Node Affinity)의 주요 차이점은 무엇인가요?
A) 노드 셀렉터는 하드 제약 조건만 지원하고, 노드 어피니티는 하드 및 소프트 제약 조건을 모두 지원한다
B) 노드 셀렉터는 여러 레이블을 지원하지 않지만, 노드 어피니티는 지원한다
C) 노드 셀렉터는 클러스터 수준에서 적용되고, 노드 어피니티는 네임스페이스 수준에서 적용된다
D) 노드 셀렉터는 레이블 키만 지정할 수 있고, 노드 어피니티는 키와 값을 모두 지정할 수 있다
정답 보기
정답: A) 노드 셀렉터는 하드 제약 조건만 지원하고, 노드 어피니티는 하드 및 소프트 제약 조건을 모두 지원한다
설명: 노드 셀렉터(Node Selector)는 포드 스펙에서 nodeSelector 필드를 사용하여 특정 레이블이 있는 노드에만 포드를 스케줄링하는 간단한 방법입니다. 이는 항상 하드 제약 조건으로 작동합니다. 즉, 조건을 만족하는 노드가 없으면 포드는 스케줄링되지 않습니다.
노드 어피니티(Node Affinity)는 더 표현력이 풍부한 언어를 제공하며, 두 가지 유형의 제약 조건을 지원합니다:
requiredDuringSchedulingIgnoredDuringExecution: 하드 제약 조건으로, 조건을 만족하는 노드가 없으면 포드는 스케줄링되지 않습니다.preferredDuringSchedulingIgnoredDuringExecution: 소프트 제약 조건으로, 조건을 만족하는 노드가 선호되지만, 없는 경우에도 다른 노드에 스케줄링될 수 있습니다.
또한 노드 어피니티는 In, NotIn, Exists, DoesNotExist, Gt, Lt 등의 연산자를 사용하여 더 복잡한 조건을 표현할 수 있습니다.
Kubernetes에서 포드 축출(Pod Eviction)이 발생하는 주요 원인은 무엇인가요?
A) 포드의 우선순위가 낮을 때
B) 노드의 리소스(메모리, 디스크 등)가 부족할 때
C) 포드가 너무 오래 실행되었을 때
D) 포드의 레플리카 수가 너무 많을 때
정답 보기
정답: B) 노드의 리소스(메모리, 디스크 등)가 부족할 때
설명: Kubernetes에서 포드 축출(Pod Eviction)은 주로 노드의 리소스가 부족할 때 발생합니다. kubelet은 노드의 메모리, 디스크 공간, PID 등의 리소스 사용량을 모니터링하고, 특정 임계값을 초과하면 포드 축출을 시작합니다.
축출 프로세스는 다음과 같은 순서로 진행됩니다:
BestEffort QoS 클래스의 포드(리소스 요청 및 제한이 없는 포드)
Burstable QoS 클래스의 포드(리소스 요청은 있지만 제한이 없거나 요청보다 높은 포드)
Guaranteed QoS 클래스의 포드(리소스 요청과 제한이 동일한 포드)
또한 각 QoS 클래스 내에서는 포드의 우선순위와 리소스 사용량을 고려하여 축출할 포드를 선택합니다.
노드 유지 보수, 노드 풀 크기 조정, 노드 장애 등의 이유로도 포드 축출이 발생할 수 있습니다.
Kubernetes에서 DaemonSet 포드의 스케줄링 특성은 무엇인가요?
A) 모든 노드에 하나씩 스케줄링된다
B) 특정 레이블이 있는 노드에만 스케줄링된다
C) 기본 스케줄러를 사용하지 않고 직접 노드에 배치된다
D) 항상 마스터 노드에 스케줄링된다
정답 보기
정답: A) 모든 노드에 하나씩 스케줄링된다
설명: DaemonSet은 클러스터의 모든 노드(또는 노드 셀렉터를 사용하는 경우 선택된 노드)에 포드의 복사본을 하나씩 실행하도록 설계된 워크로드 리소스입니다. 새 노드가 클러스터에 추가되면 DaemonSet 컨트롤러는 자동으로 해당 노드에 포드를 배치합니다.
DaemonSet은 일반적으로 로깅 에이전트, 모니터링 에이전트, 네트워크 플러그인 등 모든 노드에서 실행해야 하는 백그라운드 서비스에 사용됩니다.
Kubernetes 1.12 이전에는 DaemonSet 컨트롤러가 기본 스케줄러를 우회하고 직접 노드에 포드를 배치했습니다(옵션 C). 그러나 1.12 이후에는 기본 스케줄러를 사용하여 DaemonSet 포드를 스케줄링합니다.
Kubernetes에서 QoS(Quality of Service) 클래스 중 가장 높은 우선순위를 가지는 것은 무엇인가요?
A) BestEffort
B) Burstable
C) Guaranteed
D) Critical
정답 보기
정답: C) Guaranteed
설명: Kubernetes에서는 포드의 리소스 요청(requests)과 제한(limits) 설정에 따라 세 가지 QoS(Quality of Service) 클래스를 정의합니다:
Guaranteed: 모든 컨테이너가 CPU와 메모리에 대한 요청과 제한을 명시적으로 설정하고, 요청과 제한이 동일한 경우입니다. 이 클래스는 가장 높은 우선순위를 가지며, 리소스 부족 시 마지막으로 축출됩니다.
Burstable: 적어도 하나의 컨테이너가 CPU나 메모리에 대한 요청을 설정했지만, 모든 컨테이너의 요청과 제한이 동일하지 않은 경우입니다. 이 클래스는 중간 우선순위를 가집니다.
BestEffort: 어떤 컨테이너도 CPU나 메모리에 대한 요청이나 제한을 설정하지 않은 경우입니다. 이 클래스는 가장 낮은 우선순위를 가지며, 리소스 부족 시 가장 먼저 축출됩니다.
리소스 부족 상황에서 kubelet은 BestEffort 포드를 먼저 축출하고, 그 다음으로 Burstable 포드를, 마지막으로 Guaranteed 포드를 축출합니다.
노드에
node-role.kubernetes.io/master:NoSchedule테인트가 적용되어 있을 때, 이 노드에 포드를 스케줄링하기 위해 필요한 것은 무엇인가요?A) 노드 어피니티 규칙
B) 포드 어피니티 규칙
C) 해당 테인트에 대한 톨러레이션
D) 높은 우선순위 클래스
정답 보기
정답: C) 해당 테인트에 대한 톨러레이션
설명: 노드에 node-role.kubernetes.io/master:NoSchedule 테인트가 적용되어 있으면, 기본적으로 포드는 해당 노드에 스케줄링되지 않습니다. 이 노드에 포드를 스케줄링하려면, 포드에 해당 테인트에 대한 톨러레이션을 추가해야 합니다.
예를 들어, 다음과 같은 톨러레이션을 포드 스펙에 추가할 수 있습니다:
이 톨러레이션은 포드가 마스터 노드의 테인트를 허용하도록 하여, 마스터 노드에도 스케줄링될 수 있게 합니다. 이는 클러스터 관리 도구나 모니터링 도구와 같이 마스터 노드에서 실행해야 하는 특정 워크로드에 유용합니다.
Kubernetes에서 포드 중단 예산(PodDisruptionBudget)의 주요 목적은 무엇인가요?
A) 포드의 리소스 사용량 제한
B) 자발적 중단 중에도 애플리케이션 가용성 보장
C) 포드 스케줄링 우선순위 설정
D) 포드 재시작 정책 정의
정답 보기
주관식 문제
Kubernetes 스케줄러의 필터링 단계에서 사용되는 주요 필터(predicates)를 세 가지 이상 설명하세요.
Kubernetes에서 노드 어피니티(Node Affinity)와 테인트/톨러레이션(Taints/Tolerations)을 함께 사용하는 방법과 그 이점을 설명하세요.
Kubernetes에서 포드 우선순위(Pod Priority)와 선점(Preemption) 메커니즘이 작동하는 방식을 설명하세요.
Kubernetes에서 포드 축출(Pod Eviction)의 종류와 각각의 발생 조건을 설명하세요.
Kubernetes에서 DaemonSet의 스케줄링 동작과 일반 포드의 스케줄링 동작의 차이점을 설명하세요.
마지막 업데이트