오토스케일링
클러스터 레벨
- 노드에 리소스가 부족하게 되면, 노드자체를 새로 만들어 준다
- 워커노드를 자동을 확장해주는것은 CSP 환경(AWS, GCP, Azure)에서 쿠버네티스 서비스를 쓰고 있을때 가능
- 오픈스택에 Auto Scaling Kubernetes 클러스터 구성을 했다면 가능
파드레벨
- HPA 수평적인 파드 오토스케일링 : 파드가1개였다가 2개로 3개로 늘어나는 것
- metrics server 설치 필요 : cpu,memory의 사용량을 etcd에 기록
- HPA : 30초에 한번씩 연산
- Deployment와 rc를 이용하여 처리
- VPA 수직적인 파드 오토스케이링 : 파드의 cpu가 1이었다가 cpu2로 키워주는 것
- metrics server 설치 필요
- VPA
- change CPU/memory values
Metrics 서버 설치
#default k8s에는 metrics 서버가 없다.
kubectl top nodes
error: Metrics API not available
#이성미 강사의 github repository에서 다운
git clone https://github.com/237summit/kubernetes-metrics-server.git
#metrics 관련해서 나중에 안되는게 생겼는데, 실제 kubernetes에서 공식으로 지원하는 git에서 받아보자
#git clone https://github.com/kodekloudhub/kubernetes-metrics-server.git
cd kubernetes-metrics-server
#현재 폴더에 있는 모든 yaml파일을 실행
kubectl apply -f .
kubectl get deployments.apps -A
NAMESPACE NAME READY UP-TO-DATE AVAILABLE AGE
kube-system coredns 2/2 2 2 13d
kube-system metrics-server 1/1 1 1 26s
kubectl top nodes
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
master.example.com 143m 7% 1435Mi 49%
node1.example.com 18m 0% 920Mi 49%
node2.example.com 27m 1% 785Mi 41%
kubectl top pods -A
NAMESPACE NAME CPU(cores) MEMORY(bytes)
kube-system coredns-565d847f94-9gc55 2m 12Mi
kube-system coredns-565d847f94-bztps 2m 12Mi
kube-system etcd-master.example.com 16m 108Mi
kube-system kube-apiserver-master.example.com 30m 265Mi
kube-system kube-controller-manager-master.example.com 10m 45Mi
kube-system kube-proxy-52fqm 1m 14Mi
kube-system kube-proxy-fl7kg 1m 19Mi
kube-system kube-proxy-mxvhf 0m 14Mi
kube-system kube-scheduler-master.example.com 3m 17Mi
kube-system metrics-server-84fc559c86-qrr9w 1m 14Mi
kube-system weave-net-25z25 2m 69Mi
kube-system weave-net-cjjh5 2m 88Mi
kube-system weave-net-qr8cj 2m 70Mi
HPA 실습
💢최종 확인에 성공하진 못해서, 추후에 다시 한번 절차를 수정해 볼 예정.
mkdir horizontal
cd horizontal
#cpu 부하를 주는 php소스를 만든다.
cat > index.php
<?php
$x = 0.0001;
for($i=0; $i<=1000000; $i++){
$x += sqrt($x);
}
echo "OK!";
?>
#dockerfile 만들기 및 빌드
#php가 돌아갈 수 있는 apache기반 php 컨테이너
cat > dockerfile
FROM php:5-apache
ADD index.php /var/www/html/index.php
RUN chmod a+rx index.php
docker build -t bluedove97/hpa-example .
docker push bluedove97/hpa-example
#deployment와 cluster ip를 가지는 service를 동시 실행
cat > deploy_web.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: deploy-web
spec:
replicas: 1
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- image: bluedove97/hpa-example
name: web
ports:
- containerPort: 80
resources:
requests:
cpu: 200m
---
apiVersion: v1
kind: Service
metadata:
name: svc-web
spec:
ports:
- port: 80
targetPort: 80
selector:
app: web
kubectl apply -f deploy_web.yaml
#HPA pod 생성
cat > hpa_web.yaml
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: hpe-web
spec:
maxReplicas: 10
minReplicas: 1
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment # <-- Deployment형태이고
name: deploy-web # <-- deploy-web이라는 이름인 녀석에게
targetCPUUtilizationPercentage: 50 # <-- cpu 50%이상 쓰게되면
kubectl apply -f hpa_web.yaml
#HPA 동작 확인 및 부하전달
watch -n 0.5 kubectl top pods
watch kubectl get all -o wide
while true
> do
> curl 10.104.208.152
> done
#여기서 문제점
metric서버 설치완료 및 hpa 파드도 잘 올라가지만
kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
hpe-web Deployment/deploy-web <unknown>/50% 1 10 1 11m
#정작 <unknown>이 없어지지를 않네... 때문에 부하를 줘도 동작하지 않음
#metrics 서버를 못찾아서 그런거라는데
#강사님 서버 설치파일이 아니라 쿠버네티스쪽 metrics서버 설치를 해야할지도 모르겠다.
#kubectl autoscale deployment deploy-web --cpu-percent=50 --min=1 --max=10
#CLI 구문으로 해도 안되는것은 마찬가지더라