노드 관리하기
노드란 컨테이너 애플리케이션이 실행되는 서버로, Kubernetes Engine에서는 동일한 인스턴스 유형을 가지는 노드 그룹인 노드 풀 단위로 노드를 관리합니다.
노드 풀 생성 및 관리
Kubernetes Engine 서비스에서 노드 풀을 관리하는 방법은 다음과 같습니다.
노드 풀 생성
클러스터를 먼저 생성한 후, 노드 풀을 생성할 수 있습니다.
-
카카오클라우드 콘솔 > Container Pack > Kubernetes Engine 메뉴로 이동합니다.
-
클러스터 메뉴에서 노드 풀을 생성할 클러스터를 선택합니다.
-
클러스터의 상세 페이지에서 노드 풀 탭을 클릭한 후, [노드 풀 생성] 버튼을 클릭합니다.
-
노드 풀 생성에서 정보를 입력하고, [생성] 버튼을 클릭합니다.
구분 설명 노드 풀 유형 생성할 노드 풀 유형을 선택
-Bare Metal Server
유형은kr-central-2
리전만 지원기본 설정 노드 풀의 기본 정보 설정
- 노드 풀 이름: 노드 풀 이름을 입력
- 노드 풀 설명(선택): 60자 이내로 노드 풀 설명 작성이미지 노드에 사용할 이미지를 1개 선택
- 노드 풀 유형에 따라 선택 가능한 이미지가 다름인스턴스 유형 노드 풀의 인스턴스 유형 선택
⚠️ 정상적인 Kubernetes Engine 서비스 이용을 위해 최소 1 GiB 이상의 인스턴스 사용 필요볼륨 인스턴스의 볼륨 유형과 크기를 설정
- 현재 볼륨 유형은 SSD 유형으로 고정되어 있고, 볼륨 크기는 30 ~ 5,120GB 내에서 지정 가능
⚠️Bare Metal Server
유형 노드 풀은 설정 불가노드 수 노드 풀의 노드 개수 설정 노드 풀 네트워크 설정 노드가 실행되는 VPC와 서브넷을 선택
- VPC: 클러스터의 VPC와 동일하며, 별도 설정 불가
- 서브넷: 클러스터 생성 시 선택한 서브넷 중, 해당 노드 풀의 노드가 실행될 서브넷을 선택
ㄴ Multi-AZ를 지원하는 kr-central-2 리전의 경우, 노드 풀의 네트워크를 서로 다른 가용 영역의 서브넷으로 다중 선택하여 가용성을 높일 수 있음리소스 기반 오토 스케일 (선택) 노드 풀의 가용 리소스가 부족해 파드를 스케줄링 할 수 없을 때 노드의 수를 자동으로 확장하고, 노드의 리소스 사용률이 일정 수준 이하로 유지될 때에는
노드의 수를 자동으로 축소하는 기능
⚠️Bare Metal Server
유형 노드 풀은 설정 불가
- 최소 노드 수: 자동 확장을 사용하여 자동으로 노드 수를 축소할 때 가능한 최소 노드 수
- 최대 노드 수: 자동 확장을 사용하여 자동으로 노드 수를 확장할 때 가능한 최대 노드 수키 페어 노드 풀에 속한 노드 인스턴스에 SSH 접근이 필요한 경우 키 페어 사용을 설정함
ㄴ 기존 키 페어를 선택 또는 신규 키 페어 생성 가능
ㄴ 신규 키 페어 생성 방법: 신규 키 페어 생성을 클릭한 후, 키 페어 이름 입력 후 [생성 및 다운로드]를 클릭하여 pem 파일을 다운로드
- 노드 풀에 지정한 키 페어는 인스턴스 세부 정보에 표시되지 않음
- 클러스터 생성 후에는 키 페어 변경이 불가하며, 변경 필요시 노드 풀을 새로 생성하여 설정 필요네트워크 본딩 Bare Metal Server
유형 노드 풀을 생성하는 경우, 네트워크 본딩 기능이 자동 적용됨
- 네트워크 본딩은 노드 풀 네트워크 설정에서 선택한 서브넷으로 생성되는 각 노드의 IP와 동일하게 2개의 인터페이스가 설정됨
- 단일 가용 영역만 가능고급 설정(선택) 노드 풀의 고급 정보 설정
- 노드 레이블(선택): 노드 풀에 있는 모든 노드에 적용될 Kubernetes 레이블 지정, 설정한 레이블은 nodeSelector와 함께 사용 가능
- 노드 테인트(선택): 노드 풀에 있는 모든 노드에 적용될 Kubernetes 테인트 지정, 설정한 테인트는 toleration과 함께 사용 가능
- CPU 멀티스레딩: CPU 코어당 단일 스레드를 지정하여 성능을 최적화하는 옵션 (일부 인스턴스 유형은 CPU 멀티스레딩 옵션이 필수)
ㄴ 고성능 컴퓨팅(HPC)과 같은 특정 워크 로드일 경우에는 비활성화 추천합니다.
ㄴ ⚠️Bare Metal Server
유형 노드 풀은 설정 불가
- 사용자 스크립트(선택): 노드 풀에 있는 모든 노드의 생성 시점에 실행할 쉘 스크립트 입력
ㄴ 노드에 별도 구성이 필요할 때 사용하며 최대 16KB까지 입력 가능, 한 번 설정한 사용자 스 크립트는 변경 불가
노드 풀 설정
클러스터에 속한 노드 풀의 정보 및 노드 수를 확인하거나 수정할 수 있습니다.
-
카카오클라우드 콘솔 > Container Pack > Kubernetes Engine 메뉴로 이동합니다.
-
클러스터 메뉴에서 노드 풀 설정을 확인할 클러스터를 선택합니다.
-
클러스터 상세 페이지의 노드 풀 탭에서 설정할 노드 풀의 [더 보기] 아이콘 > 노드 풀 설정을 선택합니다.
-
노드 풀 설정 팝업창에서 정보를 확인합니다. 설정 수정 시, 정보를 입력하고 [저장] 버튼을 클릭합니다.
구분 설명 노드 풀 정보 노드 풀의 정보
- 노드 풀 이름: 변경 불가
- 노드 풀 설명(선택): 현재 노드 풀 설명을 확인하거나 60자 이내로 수정 가능노드 수 현재 노드 풀의 노드 수
- 노드 수 변경 가능
노드 풀 상세 보기
노드 풀의 세부 정보와 해당 노드 풀에 속한 노드의 정보를 확인할 수 있습니다.
-
카카오클라우드 콘솔 > Container Pack > Kubernetes Engine 메뉴로 이동합니다.
-
클러스터 메뉴에서 상세 정보를 확인할 노드 풀이 속한 클러스터를 선택합니다.
-
클러스터 상세 페이지에서 노드 풀 탭을 클릭한 후, 세부 정보를 확인할 노드 풀을 선택합니다.
-
노드 풀의 상세 페이지에서 정보를 확인합니다.
탭 구분 설명 세부 정보 키 페어 노드 풀의 노드에 설정된 키 페어 정보 생성일 노드 풀의 생성일 정보 볼륨 유형 노드 풀에 설정된 볼륨 유형 정보 이미지 노드 풀의 노드에 설치되어 있는 이미지의 상세 정보 VPC 클러스터의 VPC 정보 서브넷 해당 노드 풀의 노드가 실행되는 서브넷 정보 파드 스케줄링 설정 노드 풀의 파드 스케줄링 설정 정보 노드 레이블 노드 풀에 설정된 노드 레이블 정보 노드 테인트 노드 풀에 설정된 노드 테인트 정보 사용자 스크립트 노드 풀에 설정된 사용자 스크립트 정보 스케일링 리소스 기반 오토 스케일 리소스 기반 오토 스케일 정책 생성 및 관리 예약 기반 오토 스케일 예약 기반 오토 스케일 정책 생성 및 관리
- 예약 기반 오토스케일 이벤트 조회노드 노드 노드의 정보
- 노드 이름 클릭 시, 노드 상세 페이지에서 노드 정보 확인 가능노드 상태 노드 상태의 정보
-Running
: 노드가 준비되어 실행 중
-Running (Scheduling Disable)
: 해당 노드로 신규 스케줄링 차단된 상태 (이미 할당되어 실행 중인 파드와는 무관)
-Provisioned
: 노드 프로비저닝 완료
-Deleted
: 노드 삭제 완료
-Pending
: 노드 프로비저닝 준비 중
-Provisioning
: 노드 프로비저닝 중
-Deleting
: 노드 삭제 중
-Failed
: 사용자의 개입이 필요한 실패 상태노드 풀 노드가 속한 노드 풀 정보 프라이빗 IP 노드의 프라이빗 IP 정보 가용 영역 노드가 실행되는 서브넷의 가용 영역 정보 가동 시간 노드가 생성 요청된 시점부터 현재까지의 시간의 합으로, 노드의 생성일을 의미하지 않음
노드 레이블 설정
-
카카오클라우드 콘솔 > Container Pack > Kubernetes Engine 메뉴로 이동합니다.
-
클러스터 메뉴에서 상세 정보를 확인할 노드 풀이 속한 클러스터를 선택합니다.
-
클러스터 상세 페이지에서 노드 풀 탭을 클릭한 후, 세부 정보에서 [노드 레이블 설정] 버튼을 클릭합니다.
-
노드 레이블 설정 화면에서 키, 값을 입력 후 저장 버튼을 클릭합니다. 노드 레이블을 설정하면 노드 풀의 모든 노드에 레이블이 반영됩니다.
구분 설명 키 레이블을 구분하기 위한 키, 최대 50개 값 레이블에 대한 값 [휴지통] 아이콘 클릭 시 해당 레이블 삭제
- 카카오클라우드 및 Kubernetes에서 이미 예약된 키워드는 레이블 키로 저장할 수 없습니다.
사용자 스크립트 설정
- 카카오클라우드 콘솔 > Container Pack > Kubernetes Engine 메뉴로 이동합니다.
- 클러스터 메뉴에서 상세 정보를 확인할 노드 풀이 속한 클러스터를 선택합니다.
- 클러스터 상세 페이지에서 노드 풀 탭을 클릭한 후, 세부 정보에서 [사용자 스크립트 설정] 버튼을 클릭합니다.
- 사용자 스크립트 설정 화면에서 스크립트를 불러오거나 또는 입력한 후 저장 버튼을 클릭합니다.
- 사용자 스크립트는 설정 시점 이후에 신규로 생성되는 노드부터 적용됩니다.
노드 풀 삭제
더 이상 사용하지 않는 노드 풀을 삭제할 수 있습니다.
노드 풀 삭제 시, 노드 풀에 포함된 모든 노드가 삭제되며 복구할 수 없습니다.
- 카카오클라우드 콘솔 > Container Pack > Kubernetes Engine 메뉴로 이동합니다.
- 클러스터 탭에서 삭제할 노드 풀이 속한 클러스 터를 선택합니다.
- 노드 풀 탭을 클릭한 후, 삭제할 노드 풀의 [더 보기] 아이콘 > 노드 풀 삭제를 선택합니다.
- 노드 풀 삭제 팝업창에서 정보를 입력하고, [삭제] 버튼을 클릭합니다.
파드 스케줄링 설정
파드 스케줄링 설정(노드 풀)
노드 풀의 모든 노드에 대한 파드 스케줄링 여부를 설정할 수 있습니다.
- 카카오클라우드 콘솔 > Container Pack > Kubernetes Engine 메뉴로 이동합니다.
- 클러스터 탭에서 파드 스케줄링 설정을 확인할 클러스터를 선택합니다.
- 클러스터의 상세 페이지의 노드 풀 탭에서 설정할 노드 풀의 [더 보기] 아이콘 > 파드 스케줄링 설정을 선택합니다.
- 파드 스케줄링 설정 팝업창에서 정보를 확인합니다.
- 설정 수정 시, 변경할 정보를 선택하고 [저장] 버튼을 클릭합니다.
- 노드 풀 상태와 관계없이 허용 또는 차단을 적용할 수 있습니다. 파드 스케줄링 설정 팝업창에서 적용한 허용 또는 차단 설정에 따라 노드 풀 내 모든 노드의 스 케줄링 상태가 일괄 변경됩니다.
파드 스케줄링 설정(단일 노드)
단일 노드에 대한 파드를 스케줄링 여부를 설정합니다.
단일 노드에 설정한 파드 스케줄링이 노드 풀에서 설정한 파드 스케줄링보다 우선 적용되지 않습니다. 마지막으로 적용한 스케줄링 설정에 따라 개별 노드의 스케줄링 상태가 적용됩니다.
노드 | 설명 |
---|---|
스케줄링 차단된 노드 | 스케줄링 차단된 노드는 차단 설정한 이후 시점부터 더 이상 파드가 할당되지 않으며 기존 할당된 파드는 정상적으로 실행됨 |
스케줄링 허용된 노드 | 스케줄링 허용된 노드의 경우 파드가 정상적으로 할당됨 |
- 카카오클라우드 콘솔 > Container Pack > Kubernetes Engine 메뉴로 이동합니다.
- 클러스터 탭에서 설정 대상 노드가 있는 클러스터를 선택합니다.
- 클러스터 상세 페이지의 노드 탭에서 스케줄링을 설정할 노드의 [더 보기] 아이콘 > 노드 스케줄링 차단을 선택합니다.
- 노드의 스케줄링 상태에 따라, 설정 가능한 스케줄링 차단 또는 스케줄링 허용이 노출됩니다.
- 파드 스케줄링 설정 팝업창에서 정보를 확인한 후 [확인] 버튼을 클릭합니다.
- 노드의 현재 스케줄링 상태에 따라 허용 또는 차단에 대한 확인을 진행합니다.
노드 풀 스케일링 관리
- 기존 노드 풀 자동 확장 설정의 서비스 이름은 리소스 기반 오토 스케일로 변경되었습니다.
- 현재 스케줄링 기능은 리소스 기반 오토 스케일 과 예약 기반 오토 스케일기능을 제공하고 있습니다. 두 기능을 동시에 설정할 수 없으며, 한 번에 하나의 기능만 사용할 수 있습니다.
ㄴ 향후 리소스 기반 오토스케일과 예약 기반 오토스케일 기능을 혼합하여 동시에 사용 할 수 있는 기능이 개선될 예정입니다.
리소스 기반 오토 스케일 설정
리소스 기반 오토 스케일 설정은 노드 풀의 리소스 사용에 따라 노드의 수를 자동으로 확장 또는 축소하는 기능입니다. 노드의 가용 리소스 부족으로 파드가 스케줄링 될 수 없을 경우에는 노드 수를 자동으로 확장하고, 노드의 리소스 사용률이 일정 수준 이하로 유지될 경우에는 노드의 수를 자동으로 축소합니다.
해당 기능은 Kubernetes 프로젝트의 공식 지원 기능인 Cluster-autoscaler 기능을 기반으로 합니다. 자세한 사항은 Cluster Autoscaler를 참고하시기 바랍니다.
- 자동 확장은 노드 풀 단위로 조건을 설정할 수 있으며 서로 독립적으로 동작합니다.
- 자동 축소는 클러스터 단위로 조건 설정 가능하며, 클러스터/노드 풀 생성 시 자동 확장을 설정한 경우, 클러스터에 설정된 조건으로 적용됩니다.
- Bare Metal Server 유형 노드 풀은 자동 확장 기능을 사용할 수 없습니다.
- 리소스 기반 오토 스케일은 파드 리소스의 request에 정의된 값을 기준으로 동작합니다.
- 파드 리소스의 request 값을 정의하지 않았다면, 오토 스케일 기능이 동작하지 않습니다.
-
카카오클라우드 콘솔 > Container Pack > Kubernetes Engine 메뉴로 이동합니다.
-
클러스터 메뉴에서 자동 확장 설정할 클러스터를 선택합니다.
-
클러스터의 상세 페이지의 노드 풀 탭에서 설정할 노드 풀을 선택합니다.
-
노드 풀 상세에서 스케일링 탭에서 리소스 기반 오토 스케일버튼을 클릭합니다.
-
리소스 기반 오토 스케일 팝업창에서 정보를 확인합니다. 설정 수정 시, 정보를 입력하고 [저장] 버튼을 클릭합니다.
항목 설명 노드 풀 오토 스케일 노드 리소스 사용에 따라 노드 풀의 노드 수를 자동으로 확장 또는 축소 여부를 설정 최소 노드 수 자동으로 노드 수를 축소할 때 가능한 최소 노드 수
- 자동 축소 조건은 클러스터 단위로 설정 가능하며, 자세한 설명은 클러스터 자동 축소 설정을 참고최대 노드 수 자동으로 노드 수를 확장할 때 가능한 최대 노드 수
HPA 설정 및 부하 테스트
HPA(HorizontalPodAutoscale)를 Cluster Autoscaler와 함께 설정하면 더욱 효과적으로 리소스를 관리할 수 있습니다. HPA를 함께 적용하여 자동 확장이 정상적으로 동작하는지 테스트하는 예시를 통해 안내합니다.
HPA(HorizontalPodAutoscale) 기능은 CPU 등의 리소스 사용량을 관찰하여 워크로드 리소스(디플로이먼트(Deployment), 스테이트풀셋(StatefulSet) 등)의 파드 개수를 자동으로 확장합니다. HPA에 대한 자세한 설명은 Kubernetes 공식 문서를 참고하시기 바랍니다.
-
HPA 설정하기 전, Helm client를 설치합니다. 운영체제별 Helm 설치에 대한 자세한 설명은 Helm 공식 문서 > 헬름 설치하기를 참고하시기 바랍니다.
-
HPA 부하 테스트를 위해 파드를 모니터링하는 metrics-server를 설치합니다.
- metrics-server chart repository를 추가한 후, metrics-server를 설치합니다.
metrics-server 설치 명령어helm repo add metrics-server https://kubernetes-sigs.github.io/metrics-server/
helm upgrade --install metrics-server metrics-server/metrics-server --set hostNetwork.enabled=true --set containerPort=4443 - metrics-server chart repository를 추가한 후, metrics-server를 설치합니다.
-
노드의 리소스 사용량을 정상적으로 모니터링하는지 확인합니다. metrics-server 설치 후 모니터링 정보가 수집되기까지 최대 5분 정도 소요될 수 있습니다.
노드의 리소스 사용량 확인 명령어kubectl top node
-
HPA와 Cluster Autoscaler을 설정한 후, 부하 테스트를 진행하기 위한 php-server를 배포합니다.
php-server App 배포 명령어apiVersion: apps/v1
kind: Deployment
metadata:
name: php-apache
spec:
selector:
matchLabels:
run: php-apache
replicas: 1
template:
metadata:
labels:
run: php-apache
spec:
containers:
- name: php-apache
image: ike-controlplane-provider.kr-central-1.kcr.dev/ike-cr/hpa-example:latest
ports:
- containerPort: 80
resources:
limits:
cpu: 500m
requests:
cpu: 500m
---
apiVersion: v1
kind: Service
metadata:
name: php-apache
labels:
run: php-apache
spec:
ports:
- port: 80
selector:
run: php-apachephp-server App 배포 확인 명령어kubectl apply -f php-apache.yaml
-
부하 테스트를 위해 HPA를 생성합니다.
HPA 생성 명령어kubectl autoscale deployment php-apache --cpu-percent=10 --min=1 --max=10 // HPA 생성
kubectl get hpa // HPA 설정 확인실행 결과NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
php-apache Deployment/php-apache 46%/50% 1 10 5 28m -
HPA 및 자동 확장 설정 테스트를 위해 부하를 일으키는 파드를 실행합니다.
파드 실행 명령어kubectl run -i --tty load-generator --rm --image=ike-controlplane-provider.kr-central-1.kcr.dev/ike-cr/busybox:1.28 --restart=Never -- /bin/sh -c "while sleep 0.01; do wget -q -O- `HTTP`://php-apache; done"
-
부하가 커지며 파드와 노드 개수가 정상적으로 증가하는 것을 확인합니다.
-
php-apache 서버 HPA가 발생하며, 리소스가 부족하여 스케줄링 되지 못한 일부 파드들은
Pending
상태가 됩니다. -
일부 파드가 스케줄링 되지 못하므로 리소스 추가를 위해 노드가 3개로 자동 확장됩니다.
HPA 및 자동 확장 동작 결과 확인 명령어kubectl get pods -w // 파드 개수 변경 확인
kubectl get nodes -w // 노드 개수 변경 확인실행 결과NAME READY STATUS RESTARTS AGE
php-apache-766d5cdd5b-2t5p8 0/1 Pending 0 44s
php-apache-766d5cdd5b-5mhlk 0/1 Pending 0 29s
php-apache-766d5cdd5b-5vjt6 0/1 Pending 0 14s
php-apache-766d5cdd5b-74z87 1/1 Running 0 44s
php-apache-766d5cdd5b-d49g9 0/1 Pending 0 29s
php-apache-766d5cdd5b-fnlld 1/1 Running 0 44s
php-apache-766d5cdd5b-nr5f2 0/1 Pending 0 29s
php-apache-766d5cdd5b-t7zr8 0/1 Pending 0 29s
php-apache-766d5cdd5b-vjjlz 1/1 Running 0 2m49s
php-apache-766d5cdd5b-whjhw 0/1 Pending 0 14s
NAME STATUS ROLES AGE VERSION
host-10-187-5-177 Ready <none> 51s v1.24.6
host-10-187-5-189 Ready <none> 9m5s v1.24.6
host-10-187-5-98 Ready <none> 69s v1.24.6
-
-
노드가 추가되면 Pending 상태였던 파드들이 모두
Running
상태로 변경됩니다.
예약 기반 오토 스케일 설정
예약 기반 오토 스케일은 노드 풀의 노드 개수를 예약 시점에 조정하는 기능입니다.
예약 기반 오토 스케일을 사용하면 트래픽 증가 또는 감소하는 시간을 예측하여 노드 풀의 노드 개수 조정을 자동화할 수 있습니다.
예를 들어, 주말에는 트래픽이 감소하고, 주중에는 트래픽이 증가하는 패턴이 정기적으로 발생하는 워크 로드는 아래와 같은 규칙을 생성하여 운영할 수 있습니다.
- 예약 기반 오토 스케일
ㄴ 규칙 1 : 매주-월요일-오전8시30분 | 최대 늘어나기 원하는 노드 수의 개수
ㄴ 규칙 2 : 매주-금요일-오후7시30분 | 최소 줄어들기 원하는 노드 수의 개수
애플리케이션은 주중에 트래픽이 최고조에 달할 때를 처리할 수 있을 만큼 충분한 노드의 개수를 갖출 수 있고, 사용량이 상대적으로 적은 주말에는 불필요한 노드의 개수를 줄일 수 있습니다. 이러한 예약 기반 오토 스케일을 통해 비용과 성능을 최적화할 수 있습니다.
- 예약 기반 오토스케일의 예약 규칙은 최대 2개까지 생성 가능합니다.
- 최대 2개의 규칙을 사용할 수 있기 때문에 특정 시점에 확장하는 규칙 1개, 다시 기존의 노드수로 축소하는 규칙 1개를 권장합니다.
- 카카오클라우드 콘솔 > Container Pack > Kubernetes Engine 메뉴로 이동합니다.
- 클러스터 메뉴에서 노드 풀 설정을 확인할 클러스터를 선택합니다.
- 클러스터의 상세 페이지의 노드 풀 탭에서 설정할 노드 풀을 선택합니다.
- 노드 풀 상세에서 스케일링 탭 예약 기반 오토 스케일링 항목에서 규칙 생성버튼을 클릭합니다.
- 규칙 생성 팝업창에서 규칙 이름, 규칙을 입력하고 [생성] 버튼을 클릭합니다.
항목 설명 이름 예약 기반 오토스케일의 규칙 이름 규칙 원하는 노드 개수
- 설정된 시간에 원하는 노드 수를 설정
반복 설정
- 규칙이 주기에 따라 반복 동작하기 위한 설정 [한 번], [매일], [매주], [매월]시작 일시 규칙이 동작하는 시작 일시
- 시작 일시에 따라 반복 시점이 결정됩니다.실행 예정일 시작 일시에 따른 가장 가까운 실행 예정일을 표시합니다.