Search

Feature Gates와 In-Place Pod Vertical Scaling

Tags
k8s
feature-gates
scale-up
in-place
Created
2024/09/06 08:53
Created time
2024/09/05 23:53
category
kubernetes

개요

Feature Gates 기능을 이용하여 클러스터 단위로 모든 k8s 컴포넌트에 걸친 Feature를 설정 가능
KinD에서 해당 기능 활성화 하는 방법과 In-Place로 리소스를 증설하는 방법을 기술

클러스터 생성

# Feature Gates 기능 중 InPlacePodVerticalScaling 활성화한 클러스터 설정 파일 생성 cat <<EOT> kind-FG.yaml kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 nodes: - role: control-plane featureGates: "InPlacePodVerticalScaling": true EOT # 클러스터 생성 kind create cluster --config kind-FG.yaml --name feature-cluster
Shell
복사
# 설정된 Feature Gates는 Controller Manager에 존재 kubectl describe pod -n kube-system kube-controller-manager-feature-cluster-control-plane | grep feature-gates
Shell
복사

지표 조회 설정

초기 셋업된 클러스터에는 Metrics 서버가 존재하지 않기 때문에 Metrics API를 사용할 수 없고, 이에 따라 kubectl top node 명령어가 동작하지 않음

manifest 수정

# Metrics 서버 설정 파일 다운로드 # https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml -O metric-server.yaml # - --secure-port 옵션 다음 라인에 - --kubelet-insecure-tls 옵션을 추가 # sed 명령어가 잘 실행되지 않는다면, brew install gnu-sed 후 alias로 sed를 걸어서 실행 sed -i'' -r -e "/- --secure-port=10250/a\ - --kubelet-insecure-tls" metric-server.yaml
Shell
복사

Metrics 서버 배포

# Metrics 서버 배포 kubectl apply -f metric-server.yaml # 레이블이 k8s-app=metrics-server인 리소스를 모두 조회 kubectl get all -n kube-system -l k8s-app=metrics-server # apiservices 리소스 조회 kubectl get apiservices |egrep '(AVAILABLE|metrics)'
Shell
복사

지표 조회

# 노드의 지표 조회 kubectl top node # 파드 지표를 CPU 리소스로 정렬하여 조회 kubectl top pod -A --sort-by='cpu' # 파드 지표를 Memory 리소스로 정렬하여 조회 kubectl top pod -A --sort-by='memory'
Shell
복사

Scale Up

Stress Pod 생성

# Stress Pod 생성 # CPU 리소스는 700m으로 제한, 파드는 1 CPU 스트레스 설정 cat <<EOF | kubectl create -f - apiVersion: v1 kind: Pod metadata: name: stress-pod spec: containers: - name: stress image: alpine:latest command: ["sh", "-c", "apk add --no-cache stress-ng && stress-ng --cpu 1"] resources: limits: memory: "200Mi" cpu: "700m" requests: memory: "200Mi" cpu: "500m" EOF # 생성된 Pod 조회 # kubectl neat는 아래 링크 준비 사항 > krew 설치를 참고하여 설치 # https://www.jseo.cc/6119a21a-3daa-4ea3-bb41-4b9d7975813b#5783b423-d63f-4b6a-9f42-e890e3287968 kubectl get po stress-pod -o yaml | kubectl neat
Shell
복사
# 파드 지표 확인 # CPU 리소스 700m 만큼 점유 kubectl top pod
Shell
복사

Scale Up

# patch를 통해 CPU 리소스 제한을 1000m으로 수정 kubectl patch pod stress-pod --patch '{"spec":{"containers":[{"name":"stress", "resources":{"requests":{"cpu":"500m"}, "limits":{"cpu":"1000m"}}}]}}'
Shell
복사
# 파드 지표 확인 # CPU 리소스 1000m 만큼 점유 kubectl top pod
Shell
복사

Stress Pod 삭제

# Stress Pod 리소스 삭제 kubectl delete po/stress-pod
Shell
복사

클러스터 삭제

kind delete cluster --name feature-cluster
Shell
복사