IT/Cloud & DevOps

GKE 노드풀과 클러스터 오토스케일러

iamhyeon 2025. 4. 24. 19:06

💡 NodeGroup 

- 노드 그룹이란 같은 역할을 하기 위해 모인 여러 개의 노드를 묶어서 부르는 용어이다

- 노드(서버)들의 묶음을 의미하며, 주로 클라우드 환경에서 관리되는 노드 집합을 말한다 

- 노드 그룹은 쿠버네티스의 오브젝트가 아니고, 편의를 위해 만든 개념이다 (쿠버네티스는 이 존재를 모른다)

- AWS, GCP, Azure와 같은 클라우드에서 노드 그룹(Node Group)이라는 개념은 자동 스케일링, 업데이트, 관리 등을 쉽게 하기 위해 사용된다 
- 쿠버네티스 클러스터 안에는 실제로 다양한 사양의 노드가 존재할 수 있다
    => 여러 노드를 용도별로 분류해놓아 관리의 편의성을 높인다 
- 실제 대규모 환경에서는 노드의 개수도 매우 많기 때문에 이를 그룹화하여 노드 그룹으로 관리하는 경우가 대부분이다 

 

Node :  쿠버네티스 클러스터에서 컨테이너(Pod)를 실행하는 물리 또는 가상 머신
NodeGroup :  비슷한 설정을 가진 노드들의 묶음 (예: 같은 인스턴스 타입, 같은 리전 등)

 

예)

클라우드 NodeGroup 개념 
AWS EKS Node Group, 또는 Auto Scaling Group (ASG)
GCP GKE Node Pool
Azure AKS Node Pool

 

- 동일한 설정(인스턴스 타입, OS, 태그 등)을 공유한다
- 스케일 업/다운을 하나의 단위로 처리한다
- 롤링 업데이트가 가능하다 
- 관리 및 모니터링 효율화

 

- 운영 편의성 :  그룹 단위로 노드를 관리해서 운영이 쉽다 
- 확장성 :  부하에 따라 노드 수 자동 증가/감소 가능하다 
- 격리성 :  목적별로 노드를 나누어 리소스 분리가 가능하다 (예: GPU 전용 노드그룹)


⚠️ 이전에 해야할 것

2025.04.19 - [IT/Cloud & DevOps] - 클라우드 환경에서 쿠버네티스 클러스터 만들기

2025.04.21 - [IT/Cloud & DevOps] - Pod : 쿠버네티스에서 컨테이너 실행하는 방법

2025.04.21 - [IT/Cloud & DevOps] - ReplicaSet : 정해진 수의 Pod을 유지시켜주는 관리자

 

🔶 GCP GKE 클러스터의 노드풀 설정 

- GKE에서는 ‘노드 그룹’이라는 말 대신 ‘노드 풀’이라는 용어를 사용한다 

 

 

✅ GCP 콘솔 접속  =>  Kubernetes Engine  =>  클러스터 상세 화면에서 ‘노드 풀 추가’ 버튼을 클릭한다

 

 

✅ 노드 풀 세부정보 입력 

 

- '클러스터 자동 확장 처리 사용 설정'을 체크하면 노드 오토스케일링이 적용된다 

 

 

 

✅ 노드 상세 설정 후 생성 완료하기 

- 기존 노드 풀 보다 고사양의 머신을 설정해주어 비교할 것이다 

 

 

✅ 클러스터 상세 화면에서 ‘노드’ 탭으로 진입하여 설정 할 노드 풀을 클릭한다 

 

 

✅ 노드 풀 상세 화면에서 ‘수정’ 버튼을 클릭하여 설정 화면으로 진입한다 

 

 

 

 Kubernetes 라벨 항목에서 라벨 추가 버튼을 클릭 후, 설정할 Label 내용을 입력하고 저장한다 

 

 

 

✅ yaml 파일에 nodeSelector 옵션 추가 

📁 sample-replicaset.yaml

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: sample-replicaset
  namespace: default
spec:
  replicas: 8
  selector:              
    matchLabels:
      app: nginx
  template:
    metadata: 
      labels: 
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:1.27.0
          ports:
            - containerPort: 80
      nodeSelector:
        optimized_type: memory
kubectl get replicasets

kubectl delete replicaset sample-replicaset

kubectl apply -f sample-replicaset.yaml

kubectl get pods

 

 

✅ 설정하지 않은 레이블로 바꿔보기

- optimized_type:cpu 로 변경하고 다시 적용해본다.

=>  계속 pending 상태인 것을 알 수 있다

 

 

✅ 기존의 노드그룹에서 레이블을 변경해서 확인하기
- `kubectl get pods` 해보면 running 상태로 바뀐 것을 볼 수 있다 

 

 

 

💡 클러스터 오토스케일러 (CA)

- 많은 Pod가 필요한 경우 현재 존재하는 노드가 부족할 수 있는데, 이럴 때 클라우드 서비스의 오토스케일링 기능을 이용하면 부족한 만큼 노드가 알아서 증가되게 할 수 있다

- 노드가 부족할 때 알아서 필요한 만큼 노드를 증설(Scale-out)(Scale-up) 하고, 노드가 너무 과하게 많은 경우 노드를 감설(Scale-in)(Scale-down) 하는 역할을 하는 기능을 ‘클러스터 오토스케일러’라고 한다 
- 쿠버네티스의 기능이 아니라 AWS나 GCP와 같은 클라우드 서비스가 제공하는 기능이다

 

- GCP의 GKE는 별다른 설정 없이도, 노드 풀에서 ‘클러스터 자동 확장 처리 사용 설정’ 기능을 활성화하면 자동으로 노드 오토 스케일링이 작동한다 

 

 

반응형