AWS EKS ์คํฐ๋ 5์ฃผ์ฐจ - Autoscaling
- kkumtree
2023-05-22T19:23:37+09:00
์ด๋ฒ ์ฃผ์ฐจ๋ ์คํ ์ค์ผ์ผ๋ง์ ๋ฉ์ธ์ผ๋ก ํ์ฌ, ์ํ/์์ง ํ๋ก๋น์ ๋์ ํ์ตํด๋ณด์์ต๋๋ค.
๋ง์ง๋ง์๋ ๊ณ ์ฑ๋ฅ ์คํ ์ค์ผ์ผ๋ฌ์ธ Karpenter๋ฅผ ๋ณ๋๋ก ์ค์ตํด๋ณด์์ต๋๋ค.
ํนํ..
-
HPA custom metrics(์ฌ์ฉ์ ์ ์ ๋ฉํธ๋ฆญ) ์ ์ฉ
-
YAML ์ค์ ๊ฐ์ CPU๋ก ๋ง์ถ ๊ฒ์ ์๊ณ , ํ๋ก๋น์ ๋์ ์๋ชป ์์ธกํ ๊ฒ๋ ํจ๊ป ๊ณต์ ํฉ๋๋ค.
-
AutoScaling
- HPA: Horizontal Pod Autoscaler
- VPA: Vertical Pod Autoscaler
- CA: Cluster Autoscaler
- ๊ฐ CSP ์์กด์ , ์์ปค ๋ ธ๋ ๋ ๋ฒจ์์์ ์คํ ์ค์ผ์ผ๋ง
1. ์ค์ต ํ๊ฒฝ ๋ฐฐํฌ
- 4์ฃผ์ฐจ์ ์ด๊ธฐ ๋ฐฐํฌ ๋ด์ฉ์ p8s ๋ฐ Grafana๋ฅผ ์ถ๊ฐํ์ฌ ๋ฐฐํฌ
- verticalPodAutoscaler ํ์ฑํ
- ์ถ์ฒ ๋์๋ณด๋: 15757, 17900, 15172
curl -O https://s3.ap-northeast-2.amazonaws.com/cloudformation.cloudneta.net/K8S/eks-oneclick4.yaml
# ์ดํ ์ค๋ต
## Prometheus & Grafana ์ค์น
# ์ธ์ฆ์ ARN
CERT_ARN=`aws acm list-certificates --query 'CertificateSummaryList[].CertificateArn[]' --output text`
echo $CERT_ARN
# ํ๋ผ๋ฏธํฐ ํ์ผ ์์ฑ ๋ฐ ๋ฐฐํฌ
cat <<EOT > monitor-values.yaml
prometheus:
prometheusSpec:
podMonitorSelectorNilUsesHelmValues: false
serviceMonitorSelectorNilUsesHelmValues: false
retention: 5d
retentionSize: "10GiB"
verticalPodAutoscaler:
enabled: true
ingress:
enabled: true
ingressClassName: alb
hosts:
- prometheus.$MyDomain
paths:
- /*
annotations:
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/target-type: ip
alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443}, {"HTTP":80}]'
alb.ingress.kubernetes.io/certificate-arn: $CERT_ARN
alb.ingress.kubernetes.io/success-codes: 200-399
alb.ingress.kubernetes.io/load-balancer-name: myeks-ingress-alb
alb.ingress.kubernetes.io/group.name: study
alb.ingress.kubernetes.io/ssl-redirect: '443'
grafana:
defaultDashboardsTimezone: Asia/Seoul
adminPassword: prom-operator
ingress:
enabled: true
ingressClassName: alb
hosts:
- grafana.$MyDomain
paths:
- /*
annotations:
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/target-type: ip
alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443}, {"HTTP":80}]'
alb.ingress.kubernetes.io/certificate-arn: $CERT_ARN
alb.ingress.kubernetes.io/success-codes: 200-399
alb.ingress.kubernetes.io/load-balancer-name: myeks-ingress-alb
alb.ingress.kubernetes.io/group.name: study
alb.ingress.kubernetes.io/ssl-redirect: '443'
defaultRules:
create: false
kubeControllerManager:
enabled: false
kubeEtcd:
enabled: false
kubeScheduler:
enabled: false
alertmanager:
enabled: false
EOT
kubectl create ns monitoring
helm install kube-prometheus-stack prometheus-community/kube-prometheus-stack --version 45.27.2 \
--set prometheus.prometheusSpec.scrapeInterval='15s' --set prometheus.prometheusSpec.evaluationInterval='15s' \
-f monitor-values.yaml --namespace monitoring
# metrics-server ๋ฐฐํฌ
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
1-1. EKS Node Viewer ์ค์น
- ํ๋ ๋ฆฌ์์ค์ ๋ํ ์์ฒญ ์ ๋ณด๋ฅผ ํ์ธํ ์ ์๋ ๋์๋ณด๋
- ํด๋น ๋ ธ๋์ ํ ๋น ๊ฐ๋ฅํ ์ฉ๋์ ์๊ฐ์ ์ผ๋ก ํ์
- ์ค์ ์ฌ์ฉ๋์ด ์๋๋ผ, ์์ฒญ๋ ๋ฆฌ์์ค(CPU, Memory)์ ๋ํ ํ์
- ์ค์ต ์ค์ฑ ์์์ go ์ค์น ๋ฐ ๋ทฐ์ด ์ค์น์ ๋ค์ ์๊ฐ์ด ์์ (์ฝ 5๋ถ)
- Karpenter ์ค์ต ์์๋ ์ธ๊ธ๋๊ฒ ์ง๋ง, EKS๊ฐ ๊ตฌ์ถ๋ ๋ค์ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
# go ๋ฐ EKS Node Viewer ์ค์น
yum install -y go
go install github.com/awslabs/eks-node-viewer/cmd/eks-node-viewer@latest
# EKS Node Viewer ์คํ
tree ~/go/bin
cd ~/go/bin && ./eks-node-viewer
## EKS Node Viewer ๋ช
๋ น ์ํ
# Display both CPU and Memory Usage
./eks-node-viewer --resources cpu,memory
# Karenter nodes only
./eks-node-viewer --node-selector "karpenter.sh/provisioner-name"
# Display extra labels, i.e. AZ
./eks-node-viewer --extra-labels topology.kubernetes.io/zone
# Specify a particular AWS profile and region
AWS_PROFILE=myprofile AWS_REGION=ap-northeast-2
## ๊ธฐ๋ณธ ์ต์
ํ๊ฒฝ ๋ณ์
# select only Karpenter managed nodes
node-selector=karpenter.sh/provisioner-name
# display both CPU and memory
resources=cpu,memory
