✔️

오토스케일링

클러스터 레벨

파드레벨

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 구문으로 해도 안되는것은 마찬가지더라