매트릭 서버
포드의 autoscale은 지정된 자원사용량의 제한을 확인하고 이를 넘어서는 경우 수평적인 확장을 하게 된다. 따라서 포드가 어느정도의 자원을 할당받았는 지 미리 지정해두어야 한다.
참고 : 1000m이 1개의 CPU
limits:
cpu: 500m → 0.5개 cpu
requests:
cpu: 200m → 0.2개 cpu
최소 보장값은 0.2개, 만약 다른 포드에서 CPU를 사용하고 있지 않아 물리자원(CPU)에 여유가 있다면 이를 확장하여 최대 0.5개 까지 사용하겠다는 뜻
gke에서 0.5~2(VM)
cpu사용량을 봐서 20%가 넘는다면 min은1이고 10개까지 늘린다는 뜻. 만약 3개를 배포했는데 min이 1이고 max가 10이면
Quiz. 그렇다면 replicas는 몇이 되는건가 ? 3 or 1? → 1이 된다.
매트릭 서버를 인터넷으로부터 직접 설치하게 되면 인증된 공인인증서를 통한 인증이 먼저 수행 되어야한다. 하지만 우리는 해당 인증서 발급을 하지 않은 상태이므로 이 단계를 bypass 하더라도 문제없도록 —kubelet-insecure-tls를 작성해준다.
wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
vi components.yaml
136번째 줄 추가
root@manager:~/k8slab# kubectl apply -f components.yaml
autoscaletest.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deploy
spec: # 아래는 ReplicaSet 설정
replicas: 3
selector: # 아래의 라벨 개수를 확인하여 관리
matchLabels:
app: webserver
template: # 아래는 Pod 구성
metadata:
name: my-webserver
labels:
app: webserver
spec: # 아래 부분은 컨테이너 구성 내용
containers:
- name: my-webserver
image: nginx
ports:
- containerPort: 80
resources:
limits:
cpu: 500m
requests:
cpu: 200m
---
apiVersion: v1
kind: Service
metadata:
name: nginx-lb
spec:
ports:
- name: web-port
port: 80
selector:
app: webserver
type: LoadBalancer
root@manager:~/k8slab# kubectl apply -f autoscaletest.yaml
deployment.apps/autoscaletest created
service/autoscaletest-lb created
root@manager:~# kubectl get deploy,svc
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/autoscaletest 1/1 1 1 22m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/autoscaletest-lb LoadBalancer 10.99.245.166 211.183.3.202 80:31060/TCP 22m
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 4h35m
root@manager:~/k8slab# kubectl autoscale deploy autoscaletest --cpu-percent=10 --min=1 --max=20
horizontalpodautoscaler.autoscaling/autoscaletest autoscaled
root@manager:~# kubectl top no --use-protocol-buffers ; kubectl get hpa
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
manager 335m 8% 1605Mi 42%
worker1 183m 4% 953Mi 51%
worker2 165m 4% 890Mi 48%
worker3 198m 4% 997Mi 54%
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
autoscaletest Deployment/autoscaletest 0%/10% 1 20 1 18m
kubectl top ~ 이 안된다면, kubectl edit deploy -n kube-system metrics-server 을 입력하고,
nodeSelector: 윗줄에 hostNetwork: true 하고 재부팅도 해보기
ab -c 1000 -n 200 -t 60 http://211.183.3.101:31060/
동시 사용자 수 -n, 각 사용자당 -c 회, -t 초동안 실행
root@manager:~# kubectl top no --use-protocol-buffers ; kubectl get hpa
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
manager 830m 20% 1694Mi 44%
worker1 629m 15% 937Mi 50%
worker2 345m 8% 862Mi 46%
worker3 404m 10% 930Mi 50%
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
autoscaletest Deployment/autoscaletest 30%/10% 1 20 20 29m
root@manager:~# kubectl get pod
NAME READY STATUS RESTARTS AGE
autoscaletest-7c7986bdcb-4nl87 1/1 Running 0 52s
autoscaletest-7c7986bdcb-5c7nh 1/1 Running 0 52s
autoscaletest-7c7986bdcb-5jdtj 1/1 Running 0 6m23s
autoscaletest-7c7986bdcb-8wp86 1/1 Running 0 6m23s
autoscaletest-7c7986bdcb-94bwd 1/1 Running 0 6m38s
autoscaletest-7c7986bdcb-9cg68 1/1 Running 0 6m53s
autoscaletest-7c7986bdcb-bshv8 1/1 Running 0 6m53s
autoscaletest-7c7986bdcb-c8zm8 1/1 Running 0 6m38s
autoscaletest-7c7986bdcb-d6tn9 1/1 Running 0 6m23s
autoscaletest-7c7986bdcb-gss7f 1/1 Running 0 6m53s
autoscaletest-7c7986bdcb-jsl64 1/1 Running 0 52s
autoscaletest-7c7986bdcb-lxr9g 1/1 Running 0 6m23s
autoscaletest-7c7986bdcb-m2mht 1/1 Running 0 31m
autoscaletest-7c7986bdcb-m8zvk 1/1 Running 0 6m23s
autoscaletest-7c7986bdcb-pvq6w 1/1 Running 0 6m23s
autoscaletest-7c7986bdcb-svjt5 1/1 Running 0 6m38s
autoscaletest-7c7986bdcb-t4rcz 1/1 Running 0 52s
autoscaletest-7c7986bdcb-t4t99 1/1 Running 0 6m38s
autoscaletest-7c7986bdcb-thjc9 1/1 Running 0 6m23s
autoscaletest-7c7986bdcb-thzng 1/1 Running 0 6m23s
root@manager:~# kubectl top no --use-protocol-buffers ; kubectl get hpa
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
manager 360m 9% 1703Mi 44%
worker1 183m 4% 895Mi 48%
worker2 187m 4% 809Mi 43%
worker3 206m 5% 877Mi 47%
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
autoscaletest Deployment/autoscaletest 0%/10% 1 20 1 41m
root@manager:~# kubectl get pod
NAME READY STATUS RESTARTS AGE
autoscaletest-7c7986bdcb-m2mht 1/1 Running 0 43m