개요
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
복사