클라우드 + DevOps/Kubernetes (k8s)

Kubernetes 쿠버네티스 :: 노드 스케줄링 실습

gamjadori 2024. 4. 26. 11:49
728x90

<Kubernetes 쿠버네티스 :: 노드 스케줄링 실습 >

<Node Schedule>

  • 쿠버네티스 배포가 더 크고 다양해지면 스케줄링 (노드 할당) 관리가 더 중요해짐
  • 사용자가 원하는 노드에 스케줄링 가능
    • nodeSelector: kuce-schedualr에게 직접 노드 배치 요청
    • nodeName: 해당 노드의 kubelet에게 직접 요청
    • Affinity: 다양한 조건 (친밀도, Affinity)으로 노드 배치 요정
    • Tolerations: Taint가 설정된 노드 강제 허용 요청
    • schedulerName: 멀티 클러스터 환경인 경우
    • 사용자 정의 스케줄러
  • 마스터 노드에는 Taint(자물쇠) 설정으로 Application Pod를 할당하지 않음
  • 따라서, 이를 허용하기 위해서는 Tolerations(열쇠)이 요구

<Taint 구성 요소>

  • nodeSchedule 폴더 생성하여 실습 진행

1. 명령어로 sch-test1.yaml 파일 생성

PS C:\\Users\\admin\\Desktop\\k8s-pods> kubectl run sch-test1 --image=nginx:1.25.3-apline --dry-run=client -o yaml > shc-test1.yaml

<sch-test1.yaml>

  • kubernetes.io/hostname: k8s-node1: Pod를 특정 노드(k8s-node1)에 스케줄링
apiVersion: v1
kind: Pod
metadata:
  name: sch-test1
spec:
  nodeSelector:
    kubernetes.io/hostname: k8s-node1
  containers:
  - image: nginx:1.25.3-alpine
    name: sch-test1

 

2. sch-test1 pod 실행

PS C:\\Users\\admin\\Desktop\\k8s-pods> kubectl apply -f sch-test1
pod/sch-test1 created

 

3. "k8s-node2"와 "k8s-node3"에 레이블 추가

  • gpu: 컴퓨터 그래픽스와 이미지 처리 작업을 수행하는 데 주로 사용
PS C:\\Users\\admin\\Desktop\\k8s-pods> kubectl label nodes k8s-node2 cputype=gpu
node/k8s-node2 labeled
PS C:\\Users\\admin\\Desktop\\k8s-pods> kubectl label nodes k8s-node3 cputype=cpu
node/k8s-node3 labeled

<설정 확인>

 

4. sch-test2.yaml 생성

<sch-test2.yaml>

  • GPU를 가진 노드에 배치되는 pod 생성 파일
apiVersion: v1
kind: Pod
metadata:
  name: sch-test2
spec:
  nodeSelector:
    cputype: gpu
  containers:
  - image: nginx:1.25.3-alpine
    name: sch-test2

 

5. 노드 레이블 수정

  • 노드 k8s-node2에 cputype 레이블을 cpu2으로 수정
PS C:\\Users\\admin\\Desktop\\k8s-pods> kubectl label nodes k8s-node2 cputype=cpu2 --overwrite
node/k8s-node2 labeled

<수정 확인>

  • 레이블 삭제
PS C:\\Users\\admin\\Desktop\\k8s-pods> kubectl label nodes k8s-node2 cputype-
node/k8s-node2 unlabeled
  • 레이블 추가
    • "k8s-node1 / k8s-node2 / k8s-node3에 node-role.kubernetes.io/worker=data-plane 레이블 추가
    • 데이터 처리 및 저장과 같은 데이터 플레인 역할을 수행하는 워커 노드
PS C:\\Users\\admin\\Desktop\\k8s-pods> kubectl label nodes k8s-node1 node-role.kubernetes.io/worker=data-plane
node/k8s-node1 labeled
PS C:\\Users\\admin\\Desktop\\k8s-pods> kubectl label nodes k8s-node2 node-role.kubernetes.io/worker=data-plane
node/k8s-node2 labeled
PS C:\\Users\\admin\\Desktop\\k8s-pods> kubectl label nodes k8s-node3 node-role.kubernetes.io/worker=data-plane
node/k8s-node3 labeled

<워커 노드 역할 적용 확인>