1
클라우드의 장점이다.
클라우드 물리서버를 부하에 따라 자동으로 확장,축소가 가능하다는것.
2
서버인 Pod의 수가 리소스 증가에 따라 물리서버를 자동 확장,축소하는 기능이다.
최소, 최대, 원하는 워커노드의 수를 미리 지정한다.
3
자동확장?
워커노드의 리소스 부족으로 파드가 팬딩(Pending) + 노드 풀이 사용자가 정의한 최대 노드수에 도달하지 않은 경우 둘다 만족하면 자동 확장한다.
4
자동 축소?
클러스터 오토스케일러가 10초마다 불필요한 노드를 확인하며, 10분동안 조건에 해당하면 스케일 축소도 진행된다.
5
동작 방법?
클러스터 오토스케일러가 10초마다 불필요한 노드를 확인
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
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
1
쿠버네티스 클러스터 삭제
2
로드밸런서 삭제
3
서브넷 삭제
4
VPC 삭제
참고
요금 계산기
https://www.ncloud.com/charge/calc/ko?category=containers#kubernetes
다시보기
https://brunch.co.kr/@topasvga/4193