노드 관리하기
노드란 컨테이너 애플리케이션이 실행되는 서버로, 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 메뉴로 이동합니다.
- 클러스터 메뉴에서 노드 풀 설정을 확인할 클러스터를 선택합니다.
- 클러스터의 상세 페이지의 노드 풀 탭에서 설정할 노드 풀을 선택합니다.
- 노드 풀 상세에서 스케일링 탭 예약 기반 오토 스케일링 항목에서 규칙 생성버튼을 클릭합니다.
- 규칙 생성 팝업창에서 규칙 이름, 규칙을 입력하고 [생성] 버튼을 클릭합니다.
항목 설명 이름 예약 기반 오토스케일의 규칙 이름 규칙 원하는 노드 개수
- 설정된 시간에 원하는 노드 수를 설정
반복 설정
- 규칙이 주기에 따라 반복 동작하기 위한 설정 [한 번], [매일], [매주], [매월]시작 일시 규칙이 동작하는 시작 일시
- 시작 일시에 따라 반복 시점이 결정됩니다.실행 예정일 시작 일시에 따른 가장 가까운 실행 예정일을 표시합니다.
반복 설정
반복되는 예약을 만들려면 규칙 생성에서 [매일] 또는 [매주] 또는 [매월]을 선택해야 합니다. 현재 제공되는 반복 주기에 대한 자세한 설명은 다음과 같습니다.
반복 주기 | 설명 |
---|---|
한 번 | 시작 일시에 1회 수행 |
매일 | 시작 일시의 시간을 기준으로 매일 반복 - 시작 일시 : 2024/05/01 (수) 10:00 - 반복 시점 : 매일 10:00 |
매주 | 시작 일시의 요일과 시간을 기준으로 매주 반복 - 시작 일시 : 2024/05/01 (수) 10:00 - 반복 시점 : 매주 수요일 10:00 |
매월 | 시작 일시의 일과 시간을 기준으로 매월 반복 - 시작 일시 : 2024/05/01 (수) 10:00 - 반복 시점 : 매월 01일 10:00 |
예약 기반 오토 스케일 삭제
예약 기반 오토 스케일을 삭제하려면 다음과 같습니다.
- 카카오클라우드 콘솔 > Container Pack > Kubernetes Engine 메뉴로 이동합니다.
- 클러스터 탭에서 자동 확장 설정할 클러스터를 선택합니다.
- 클러스터의 상세 페이지의 노드 풀 탭에서 설정할 노드 풀을 선택합니다.
- 노드 풀 상세에서 스케일링 탭 예약 기반 오토 스케일링 규칙 목록에서 휴지통버튼을 클릭합니다.
- 규칙 삭제 팝업창에서 규칙 이름을 입력하고 [삭제] 버튼을 클릭합니다.
- 노드 풀의 상태가 변경 중인 경우, 스케줄 조건을 삭제할 수 없습니다.
- 변경 중인 상태 : ScalingUp, ScalingDown, Updating
예약 기반 오토 스케일 이벤트
예약 기반 오토 스케일 수행 결과를 이벤트 목록에서 확인할 수 있습니다. 예약 기반 오토 스케일을 통한 조정된 활동 내용은 하나의 규칙마다 최대 20개의 이력이 남게됩니다. 예약 기반 오토 스케일 이벤트는 Cloud Trail 서비스에서도 확인 할 수 있습니다.
- 예약 기반 오토 스케일의 이력 상태가 Failed로 떨어지게 되면, 오토스케일 중에 발생한 내부적인 이슈로 노드 풀의 상태가 Failed로 떨어졌음을 의미합니다.
- 노드 풀 쿼터 초과, 용량 조정 시 타임아웃 발생 등의 이유일 수 있으며, 고객이 해결하지 못하는 이벤트의 경우 헬프데스크를 통해 문의 바랍니다.
- 규칙이 삭제되면 관련된 이벤트도 함께 삭제됩니다.
ㄴ Cloud Trail 서비스에 기록된 로그는 유지됩니다.
구분 | 설명 |
---|---|
이벤트 시간 | 규칙이 동작한 시간 |
규칙 이름 | 동작한 규칙의 이름 |
결과 | 동작한 규칙의 결과 - [성공],[실패] 상세 팝업에서 상세 이벤트 결과 확인 가능 |
노드 관리
Kubernetes Engine 서비스에서 노드를 관리하는 방법은 다음과 같습니다.
노드 상세 보기
노드의 상세 정보를 확인할 수 있습니다.
-
카카오클라우드 콘솔 > Container Pack > Kubernetes Engine 메뉴로 이동합니다.
-
클러스터 메뉴에서 상세 정보를 확인할 노드 풀이 속한 클러스터를 선택합니다.
-
클러스터의 상세 페이지에서 노드 탭을 클릭한 후, 확인할 노드를 선택합니다.
- 또는 노드 풀 탭 > 노드 탭에서 상세 정보를 확인할 노드를 선택합니다.
-
세부 정보 탭에서 정보를 확인합니다.
구분 설명 인스턴스 ID 노드에 해당하는 VM 인스턴스 ID 정보
- 인스턴스 ID 클릭 시 VM 인스턴스 페이지로 이동인스턴스 유형 노드에 해당하는 VM 인스턴스 유형과 해당 노드의 노드 풀 유형 정보 인스턴스 생성일 노드에 해당하는 VM 인스턴스 생성 날짜 Kubernetes 버전 노드의 쿠버네티스 버전 가용 영역 노드가 실행되는 서브넷의 가용 영역 정보 볼륨 노드에 해당하는 VM 인스턴스에 연결된 볼륨 정보 키 페어 노드에 설정된 키 페어 정보
- 노드 풀을 통해 지정한 키 페어는 인스턴스 세부 정보에 노출되지 않음프라이빗 IP 노드의 프라이빗 IP 정보 이미지 노드에 설치되어 있는 이미지의 상세 정보 CPU 멀티스레딩 CPU 멀티스레드 기능 활성화 여부 노드 상세 요약 노드 성능과 상태 정보를 제공하며, [새로고침] 아이콘 클릭 시, 노드의 최신 정보를 갱신
- 파드: 현재 노드에 실행 중인 파드 정보
- 노드 컨디션: 현재 노드의 상세한 상태 정보
- 테인트: 현재 노드에 설정된 테인트 정보
- 레이블: 현재 노드에 설정된 레이블 정보
- 어노테이션: 현재 노드에 설정된 어노테이션 정보
- 할당 가능 리소스: 현재 노드에 할당 가능한 리소스 현황 정보
- 이벤트: 현재 노드에 발생한 이벤트 정보
노드 모니터링
노드 리소스의 사용량 및 추세 정보 등 모니터링 정보를 특정 기간의 차트로 확인할 수 있습니다.
Kubernetes Engine의 노드 모니터링을 위해 노드의 59100 포트에 node-exporter가 설치됩니다. node-exporter가 설치되는 59100 포트는 별도 사용할 수 없으니 참고하시기 바랍니다.
-
카카오클라우드 콘솔 > Container Pack > Kubernetes Engine 메뉴로 이동합니다.
-
클러스터 메뉴에서 상세 정보를 확인할 노드 풀이 속한 클러스터를 선택합니다.
-
클러스터의 상세 페이지에서 노드 탭을 클릭한 후, 확인할 노드를 선택합니다.
- 또는 노드 풀 탭 > 노드 탭에서 상세 정보를 확인할 노드를 선택합니다.
노드 모니터링
노드 선택 시, 해당 노드의 리소스 사용량과 추세 정보를 확인할 수 있습니다.
구분 | 설명 |
---|---|
CPU 사용량(millicores) | 해당 노드의 CPU 사용량 |
Memory 사용량(Bytes) | 해당 노드의 Memory 사용량 |
Disk 사용량(Bytes) | 해당 노드의 Disk 사용량 |
RX Network(byte/s) | 해당 노드가 네트워크를 통해 수신받은 바이트 수 |
TX Network(byte/s) | 해당 노드가 네트워크를 통해 전송하는 바이트 수 |
예약된 CPU 컴퓨팅 용량(%) | 해당 노드 구성 요소에 예약된 CPU의 비율 |
예약된 Memory 컴퓨팅 용량(%) | 해당 노드 구성 요소에 예약된 Memory의 비율 |
파드(개) | 해당 노드에서 실행 중인 파드 개수 |
컨테이너(개) | 해당 노드에서 실행 중인 컨테이너 개수 |
파드 모니터링
파드 선택 시, 노드에서 실행 중인 파드의 리소스 사용량과 추세 정보를 확인할 수 있습니다.
구분 | 설명 |
---|---|
CPU 사용량(millicores) | 해당 파드의 CPU 사용량 |
Memory 사용량(Bytes) | 해당 파드의 Memory 사용량 |
RX Network(byte/s) | 해당 파드가 네트워크를 통해 수신받은 바이트 수 |
TX Network(byte/s) | 해당 파드가 네트워크를 통해 전송하는 바이트 수 |
예약된 CPU 컴퓨팅 용량(%) | 해당 파드에 예약된 CPU의 비율 |
예약된 Memory 컴퓨팅 용량(%) | 해당 파드에 예약된 Memory의 비율 |
노드 복구하기
Failed 상태인 노드를 복구할 수 있습니다.
노드 복구 시, 해당 노드를 drain 후 새로운 노드를 생성하며 기존 노드는 삭제됩니다. 실행 중인 서비스가 영향을 받을 수 있으며 삭제된 노드는 복구할 수 없습니다. 복구하여 신규 생성된 노드는 노드에 해당하는 VM의 IP가 변경되니 유의하여 진행해야 합니다.
-
카카오클라우드 콘솔 > Container Pack > Kubernetes Engine 메뉴로 이동합니다.
-
클러스터 메뉴에서 상세 정보를 확인할 노드 풀이 속한 클러스터를 선택합니다.
-
클러스터 상세 페이지의 노드 탭에서 복구할 노드의 [더 보기] 아이콘 > 노드 복구를 선택합니다.
-
노드 복구 팝업창에서 정보를 입력하고, [복구] 버튼을 클릭합니다.
노드 업데이트
클러스터에서 최신 Kubernetes 버전으로 업데이트 완료된 경우 또는 OS 버전 등 최신 노드 컴포넌트 업데이트로 노드에서 최신 이미지를 사용할 수 있는 경우, 노드를 업데이트할 수 있습니다.
노드 업데이트 실행 시 다음 절차에 따라 Rolling 업데이트가 진행됩니다.
-
최신 이미지 버전의 신규 노드를 생성합니다.
-
기존 노드에서 실행되는 파드를 축출(Eviction)하고 노드를 스케줄 불가능(Unschedulable)한 상태로 전환합니다.
-
축출된 파드는 신규 노드에서 실행되며, 축출이 끝나면 기존 노드는 삭제합니다.
-
해당 과정을 모든 기존 노드에 대해 순차적으로 반복합니다.
업데이트하기 전 다음의 조건 중 하나라도 충족하지 않는 경우 업데이트가 진행되지 않습니다.
조건 | 설명 |
---|---|
클러스터 상태 | Provisioned 상태 - 그 외 상태인 경우 업데이트 버튼이 노출되지 않음 |
노드 풀 상태 | Running 상태 - 그 외 상태인 경우 업데이트 버튼이 노출되지 않음 |
업데이트하기
노드 풀이 업데이트 시작 조건을 만족한 경우 노드 풀을 업데이트할 수 있습니다.
업데이트 시작 시 취소할 수 없으며, 업데이트 전으로 되돌릴 수 없습니다.
- 카카오클라우드 콘솔 > Container Pack > Kubernetes Engine 메뉴로 이동합니다.
- 클러스터 메뉴에서 삭제할 노드 풀이 속한 클러스터를 선택합니다.
- 노드 풀 탭을 클릭한 후, 업데이트할 노드 풀의 Kubernetes 버전 > [업데이트] 버튼을 클릭합니다.
- 노드 풀 버전 업데이트 팝업창에서 정보를 확인하고 [업데이트] 버튼을 클릭합니다.
- 노드 풀이 업데이트를 시작하면 노드 풀의 상태는
Updating
으로 전환됩니다. 노드 풀 업데이트가 완료되면Running
상태로 전환됩니다. 업데이트 중에는 신규 노드 풀의 추가와 기존 노드 풀 설정이 불가합니다.
업데이트 실패 시 확인사항
Rolling 업데이트 실행 중 노드를 drain 하는 과정에서 PDB(PodDisruptionBudget) 설정으로 인해 파드를 정상적으로 drain 할 수 없는 경우, 업데이트가 실패할 수 있습니다. 업데이트 실패 시 다음과 같은 방법으로 시도해 볼 수 있습니다. 자세한 설명은 공식 Kubernetes 문서를 참고하시기 바랍니다.
- 파드를 정상적으로 drain 하기 위해 PDB의 Min Available, Max unavailable 값을 수정합니다. Max unavailable 값이
0
일 경우 업데이트를 위한 노드 drain이 실패하므로 유의해야 합니다. - PDB를 백업한 후 PDB를 삭제합니다. 업데이트가 완료된 후 PDB를 다시 설정합니다.
- Deployment, StatefulSet 등으로 배포되어 ReplicaSet으로 파드의 개수가 조절되는 경우 파드 drain이 실패할 수 있습니다. 이 경우 Deployment, StatefulSet 등을 미리 백업 후 삭제합니다.
- 추가로 노드를 안전하게 drain 하는 방법에 대한 가이드는 공식 Kubernetes 문서: Safely Drain a Node에서 확인할 수 있습니다.
- 노드 풀의 업데이트는 Rolling 업데이트 방식으로, 현재 노드와 동일한 수의 노드를 생성할 수 있어야 합니다. 따라서 사용자의 프로젝트에서 사용할 수 있는 VM 및 IaaS 리소스가 부족하면 업데이트가 실패할 수 있습니다.
- 업데이트 중 노드가
Failed
상태로 전환되어Updating
이Pending
되는 경우, 노드 복구를 진행할 수 있습니다. 노드가 복구되면 업데이트가 정상적으로 다시 진행됩니다. 노드 풀이Updating
상태로 장시간 지속 시, 헬프데스크 > 기술 문의로 문의하시기 바랍니다.