1. 개요
- 애플리케이션을 자동으로 Scale-out 할수 있는 Horizontal Pod Autoscaler 기능
CPU 자원설정에 따라 자동으로 pod의 숫자를 scale-up 한다.
2. deployment 작성
- back-end-rolling-deployment.yaml
apiVersion: apps/v1beta2 kind: Deployment metadata: name: rolling-update-test labels: app: web-front-end spec: replicas: 1 minReadySeconds: 10 strategy: type: RollingUpdate rollingUpdate: maxUnavailable: 50% selector: matchLabels: app: web-front-end template: metadata: labels: app: web-front-end department: group3 spec: containers: - name: m-client-rolling image: skarl/client:latest env: - name: PORT_ARGS value: "--port=80" ports: - containerPort: 80 name: web-port protocol: TCP resources: requests: memory: "256Mi" cpu: "200m" limits: memory: "1Gi" cpu: "500m"
Resources Requests 사용량 설정 필수
resources.requests.cpu 부분에 CPU 자원을 200m(milli-cores) 또는 0.2로 요청
2. hpa 작성
- hpa-deployment.yaml
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: rolling-update-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1beta2
kind: Deployment
name: rolling-update-test
maxReplicas: 10
minReplicas: 1
targetCPUUtilizationPercentage: 10
scaleTargetRef: 대상설정
minReplicas: 최소pod
maxReplicas: 최대pod
targetCPUUtilizationPercentage: CPU 사용 임계치 %로설정 넘어서면 업스케일 동작
3. 모니터링 및 테스트
- 부하테스트를 통해 cpu 사용량 늘리고
while true; do wget q -O https://rolling.test.com:30100/coin/list; done
- 명령어로 모니터링 kubectl get hpa -w
- 대쉬보드에서 확장된 pods 확인
4. 사용중 CPU -> UNKnown 일때 해결방법
- 메트릭 api 존재유무 확인
kubectl get --raw /apis/metrics.k8s.io/v1beta1/nodes
- 메트릭 서버 설치
git clone https://github.com/kubernetes-incubator/metrics-server.git
cd metrics-server/
kubectl create -f deploy/1.8+/
- 설치 후 확인
[root@tweb01 ~] kubectl get –raw “/apis/metrics.k8s.io/v1beta1/nodes” {“kind”:”NodeMetricsList”,”apiVersion”:”metrics.k8s.io/v1beta1”,”metadata”:{“selfLink”:”/apis/metrics.k8s.io/v1beta1/nodes”},”items”:[{“metadata”:{“name”:”tweb01.freebex.com”,”selfLink”:”/apis/metrics.k8s.io/v1beta1/nodes/tweb01.freebex.com”,”creationTimestamp”:”2018-06-28T07:27:00Z”},”timestamp”:”2018-06-28T07:26:00Z”,”window”:”1m0s”,”usage”:{“cpu”:”116m”,”memory”:”2454816Ki”}},{“metadata”:{“name”:”tweb02.freebex.com”,”selfLink”:”/apis/metrics.k8s.io/v1beta1/nodes/tweb02.freebex.com”,”creationTimestamp”:”2018-06-28T07:27:00Z”},”timestamp”:”2018-06-28T07:26:00Z”,”window”:”1m0s”,”usage”:{“cpu”:”76m”,”memory”:”1818256Ki”}}]}
- kubernetes 설정파일 수정
vi /etc/kubernetes/manifests/kube-controller-manager.yaml
controller-manager 옵션에 추가
- –horizontal-pod-autoscaler-use-rest-clients=true
그래도 unknown이 나오면 재실행 해보고 부하를 줘보고 기다려보면 나온다.