brunch

You can make anything
by writing

C.S.Lewis

by Master Seo Dec 24. 2024

NKS1탄-7. NKS 클러스터 오토스케일링-7/7

<1> 클러스터 오토스케일링 = 물리적인 장비에 대한 서버 자동 확장,축소

<2> 콘솔로 클러스터 오토스케일링 설정하기

<3> CLI로 클러스터 오토스케일러 설치, 클러스터(물리서버) 확장 테스트

<4> 삭제




<1> 클러스터 오토스케일링 = 물리적인 장비에 대한 서버 자동 확장,축소


1

클라우드의 장점이다.

클라우드 물리서버를 부하에 따라 자동으로 확장,축소가 가능하다는것.



2

서버인 Pod의 수가 리소스 증가에 따라 물리서버를 자동 확장,축소하는 기능이다.

최소, 최대, 원하는 워커노드의 수를 미리 지정한다.



3

자동확장?

워커노드의 리소스 부족으로 파드가 팬딩(Pending) + 노드 풀이 사용자가 정의한 최대 노드수에 도달하지 않은 경우 둘다 만족하면 자동 확장한다.



4

자동 축소?

클러스터 오토스케일러가 10초마다 불필요한 노드를 확인하며, 10분동안 조건에 해당하면 스케일 축소도 진행된다.



5

동작 방법?

클러스터 오토스케일러가 10초마다 불필요한 노드를 확인




<2> 콘솔로 클러스터 오토스케일링 설정하기



1

1

모니터링

kwn


watch -d kubectl get no,deploy,svc,pods --kubeconfig=/root/kubeconfig.yaml


kube-ops-view  





2

참고 자료

https://guide.ncloud-docs.com/docs/k8s-k8suse-clusterautoscaler



Cluster > 노드풀 



3

 k get configmap -n kube-system cluster-autoscaler-status -o yaml

apiVersion: v1


[root@agame-com1 ~]# k get configmap -n kube-system cluster-autoscaler-status -o yaml

apiVersion: v1

data:

  status: |

    Cluster-autoscaler status at 2024-12-26 01:33:05.330557327 +0000 UTC:

    Cluster-wide:

      Health:      Healthy (ready=2 unready=0 (resourceUnready=0) notStarted=0 longNotStarted=0 registered=2 longUnregistered=0)

                   LastProbeTime:      2024-12-26 01:33:05.312537848 +0000 UTC m=+106466.626501352

                   LastTransitionTime: 2024-12-24 19:59:14.125638167 +0000 UTC m=+35.439601673

      ScaleUp:     NoActivity (ready=2 registered=2)

                   LastProbeTime:      2024-12-26 01:33:05.312537848 +0000 UTC m=+106466.626501352

                   LastTransitionTime: 2024-12-24 19:59:14.125638167 +0000 UTC m=+35.439601673

      ScaleDown:   NoCandidates (candidates=0)

                   LastProbeTime:      2024-12-26 01:33:05.312537848 +0000 UTC m=+106466.626501352

                   LastTransitionTime: 2024-12-24 19:59:14.125638167 +0000 UTC m=+35.439601673

kind: ConfigMap

metadata:

  annotations:

    cluster-autoscaler.kubernetes.io/last-updated: 2024-12-26 01:33:05.330557327 +0000

      UTC

  creationTimestamp: "2024-12-24T19:58:54Z"

  name: cluster-autoscaler-status

  namespace: kube-system

  resourceVersion: "665949"

  uid: ea5e4623-2aa8-4994-b1a9-206a5c0320f6

[root@agame-com1 ~]#




4

메트릭 서버 확인


 k  top pods -n kube-system


[root@agame-com1 ~]# k  top pods -n kube-system

NAME                                            CPU(cores)   MEMORY(bytes)

cilium-4dqlk                                    3m           128Mi

cilium-cr6ks                                    4m           165Mi

cilium-monitor-jbtxk                            0m           1Mi

cilium-monitor-nl2qx                            0m           1Mi

cilium-operator-5589fccd99-m26qb                2m           20Mi

cilium-operator-5589fccd99-z2vkf                1m           15Mi





5

k apply -f https://k8s.io/examples/application/php-apache.yaml

---

apiVersion: apps/v1

kind: Deployment

metadata:

name: php-apache

spec:

selector:

    matchLabels:

    run: php-apache

replicas: 1

template:

    metadata:

    labels:

        run: php-apache

    spec:

    containers:

    - name: php-apache

        image: registry.k8s.io/hpa-example

        ports:

        - containerPort: 80

        resources:

        limits:

            cpu: 500m

        requests:

            cpu: 200m

---

apiVersion: v1

kind: Service

metadata:

name: php-apache

labels:

    run: php-apache

spec:

ports:

- port: 80

selector:

    run: php-apache




6

k autoscale deployment php-apache --cpu-percent=5 --min=1 --max=10



7

 k get hpa

[root@agame-com1 ~]# k get hpa

NAME         REFERENCE               TARGETS   MINPODS   MAXPODS   REPLICAS   AGE

php-apache   Deployment/php-apache   0%/5%     1         10        1          24s



8

# 별도 터미널  부하주기

k run -i --tty load-generator --rm --image=busybox:1.28 --restart=Never -- /bin/sh -c "while sleep 0.001; do wget -q -O- http://php-apache; done"



9

 k get hpa

[root@agame-com1 ~]# k get hpa

NAME         REFERENCE               TARGETS   MINPODS   MAXPODS   REPLICAS   AGE

php-apache   Deployment/php-apache   237%/5%   1         10        4          2m4s




10

k get pods -o wide | grep php-apache




11

 k get configmap -n kube-system cluster-autoscaler-status -o yaml

apiVersion: v1


12

[root@agame-com1 ~]# k get nodes

NAME                   STATUS   ROLES    AGE   VERSION

agame-nks1-np-w-6d94   Ready    <none>   29h   v1.29.9

agame-nks1-np-w-b57a   Ready    <none>   38m   v1.29.9






<3> CLI로 클러스터 오토스케일러 설치, 클러스터(물리서버) 확장 테스트



1

모니터링

watch -d kubectl get no,deploy,svc,pods --kubeconfig=/root/kubeconfig.yaml


2

kube-ops-view  



3

helm으로 클러스터 오토스케일러 설치한다.

helm이 미리 설치되어 있어야 한다. 앞에서 설치했다.



4

helm repo add ncloud https://navercloudplatformdeveloper.github.io/helm-charts

helm search repo autoscaler


helm search repo autoscaler


[root@agame-com1 ~]# helm search repo autoscaler

NAME                            CHART VERSION   APP VERSION     DESCRIPTION

stable/acs-engine-autoscaler    2.2.2           2.1.1           DEPRECATED Scales worker nodes within agent pools

stable/aws-cluster-autoscaler   0.3.4                           DEPRECATED Scales worker nodes within autoscali...

stable/cluster-autoscaler       8.0.0           1.17.1          Scales worker nodes within autoscaling groups.

stable/cluster-overprovisioner  0.4.1           1.0             Installs the a deployment that overprovisions t...




# 최소 , 최대 설정 설정


helm  install ncloud/autoscaler --set min=1 --set max=4 --version 1.12.7-beta-201909190000  --generate-name  --kubeconfig=/root/kubeconfig.yaml


helm --kubeconfig=$KUBE_CONFIG get pods -n kube-system | grep cluster-autoscaler


kubectl get cm cluster-autoscaler-status -o yaml -n kube-system


helm --kubeconfig=$KUBE_CONFIG create deployment nginx --image=nginx


helm --kubeconfig=$KUBE_CONFIG scale deployment nginx --replicas=100


k logs $CA_PODS -f


k logs $CA_PODS -n kube-system -f 


k --kubeconfig=$KUBE_CONFIG logs -f


helm --kubeconfig=$KUBE_CONFIG scale deployment nginx --replicas=10


10초마다 확인하고, 10분동안 

가용량이  노드 사용률의 50% 이하일때 변경 된다.

일부 파드중 디플로이먼트, 리플리카셋, 스테이트 풀로 생성 되지 않아 쿠버네티스에서 제외 할수 없거나.

워커노드의 로컬 스토리지를 파트가 사용하거나 , 어피니티 설정으로 다른 노드로 이동 못하거나 하면 스케일 다운 진행이 안된다.


# 로그 확인

k --kubeconfig=$KUBE_CONFIG logs -f





<4> 삭제


1

쿠버네티스 클러스터 삭제



2

로드밸런서 삭제


3

서브넷 삭제


4

VPC 삭제


참고

요금 계산기

https://www.ncloud.com/charge/calc/ko?category=containers#kubernetes



다시보기

https://brunch.co.kr/@topasvga/4193


브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari