Autoscaler 실습
1. Metrics Server 설치
- 마스터 노드에서 작업
1. 설치
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.3.6/components.yaml
2. Metrics Deployment 수정
kubectl edit deployment metrics-server -n kube-system
------------------------
spec:
containers:
- args:
- --cert-dir=/tmp
- --secure-port=4443
- --kubelet-insecure-tls
- --kubelet-preferred-address-types=InternalIP
image: k8s.gcr.io/metrics-server-amd64:v0.3.6
imagePullPolicy: IfNotPresent
name: metrics-server
------------------------
kubelet-insecure-tls
와kubelet-preferred-address-types=InternalIP
추가
3. 설치 확인
kubectl get apiservices | grep metrics
4. Metric 값 확인 (1~2분 후에)
kubectl top node
2. HPA 실습 - CPU
- Deployment를 통해서 CPU의 requests가 10m인 파드를 만듦
- 서비스를 달아 HPA를 만듦
- HPA의 타겟은 Deployment
- CPU를 트리거로 Utilization을 50으로 할 예정
- 즉, 두 CPU의 사용량의 평균이 5m을 넘으면 파드를 더 생성함
Target Deployment (CPU) / Service
apiVersion: apps/v1
kind: Deployment
metadata:
name: stateless-cpu1
spec:
selector:
matchLabels:
resource: cpu
replicas: 2
template:
metadata:
labels:
resource: cpu
spec:
containers:
- name: container
image: tmkube/app:v1
resources:
requests:
cpu: 10m
limits:
cpu: 20m
---
apiVersion: v1
kind: Service
metadata:
name: stateless-svc1
spec:
selector:
resource: cpu
ports:
- port: 8080
targetPort: 8080
nodePort: 30001
type: NodePort
- 최초 replicas는 2
- 파드의 CPU 자원에 대한 request, limits 설정
- 파드에 연결된 서비스 생성
- 서비스의 nodePort는 30001
HPA - Resource (Utilization)
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: hpa-resource-cpu
spec:
maxReplicas: 10
minReplicas: 2
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: stateless-cpu1
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50
- max, min Replicas 존재
- 해당 타겟이 되는 컨트롤러로 Deployment 지정
- 트리거로 cpu 지정
실습 과정
- Target Deployment, Service 생성
- HPA 생성
- 마스터 노드에 다음 명령어로 HPA 수치변화 조회
kubectl get hpa -w
현재 성능정보/타겟으로 지정한 수치, minimum, maximum 파드 개수, replicas 등이 나옴 - 마스터 노드 쉘창을 하나 더 켜서 다음 명령어로 부하 주기
while true;do curl 192.168.35.30:30001/hostname; sleep 0.01; done
- HPA가 변하는지 확인
- 무한 명령문 끄고 HPA가 변하는지 확인
3. HPA 실습 - 메모리
Target Deployment (Memory) / Service
apiVersion: apps/v1
kind: Deployment
metadata:
name: stateless-memory1
spec:
selector:
matchLabels:
resource: memory
replicas: 2
template:
metadata:
labels:
resource: memory
spec:
containers:
- name: container
image: tmkube/app:v1
resources:
requests:
memory: 10Mi
limits:
memory: 20Mi
---
apiVersion: v1
kind: Service
metadata:
name: stateless-svc2
spec:
selector:
resource: memory
ports:
- port: 8080
targetPort: 8080
nodePort: 30002
type: NodePort
- 파드의 requests에 memory를 줌
- 서비스의 노드포트는 30002
HPA - Resource (AverageValue)
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: hpa-resource-memory
spec:
maxReplicas: 10
minReplicas: 2
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: stateless-memory1
metrics:
- type: Resource
resource:
name: memory
target:
type: AverageValue
averageValue: 5Mi
- resource의 name은 memory
- type과 averageValue가 cpu와 다름
- CPU의 type은 Utilization
실습 과정
- 기존에 걸었던 HPA 중지
- 마스터 노드에서 다음 명령어로 기존 HPA 삭제
kubectl delete horizontalpodautoscalers.autoscaling hpa-resource-cpu
- Target Deployment, Service 생성
- HPA - Resource 생성
- 마스터 노드에서 다음 명령어로 HPA 모니터링
kubectl get hpa -w
현재 수치에 단위가 없는데 그냥 앞자리 비교하면 됨 - 다른 마스터 노드 쉘 켜서 다음 명령어로 부하 주기
while true;do curl 192.168.35.30:30002/hostname; sleep 0.01; done
- HPA 변하는지 확인
- 무한 명령문 끄면 언젠가 HPA가 변하겠지...
출처
인프런 - 대세는 쿠버네티스
'네트워크 > k8s' 카테고리의 다른 글
[k8s] 42. Networking (0) | 2021.02.26 |
---|---|
[k8s] 41. Component (0) | 2021.02.26 |
[k8s] 39. Autoscaler - HPA (0) | 2021.02.25 |
[k8s] 38. Ingress - 실습 (0) | 2021.02.25 |
[k8s] 37. Ingress - Nginx (0) | 2021.02.25 |