Deployment Stress Test

강다·2024년 3월 24일
0

쿠버네티스 클러스터 구축을 진행하며, 메트릭 모니터링(여기선 Prometheus+Grafana)이 잘 설정되었는지 확인하기 위해 스트레스 테스트를 진행했다.
교육용 환경을 세팅중이었기 때문에 실제로 배포 하거나 앱을 올리지는 않았고, 그냥 stress tool을 이용해 가볍게 해보았다. 다음과 같은 과정으로 진행했다.


Stress app 배포 및 yaml 템플릿 생성

$ kubectl create deployment stress --image=vish/stress
$ kubectl get deployment stress -o yaml > stress.yaml 

처음에 바로 받아 올 수 있는 yaml파일(stress.yaml)은 다음과 같다.
apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
    deployment.kubernetes.io/revision: "2"
  creationTimestamp: "2024-02-08T00:44:33Z"
  generation: 2
  labels:
    app: stress
  name: stress
  namespace: default
  resourceVersion: "6308"
  uid: 00956a01-4be6-4b39-868e-2daf24968b8c
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: stress
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: stress
    spec:
      containers:
      - image: vish/stress
        imagePullPolicy: Always
        name: stress
        resources: {}
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30
status:
  availableReplicas: 1
  conditions:
  - lastTransitionTime: "2024-02-08T00:44:40Z"
    lastUpdateTime: "2024-02-08T00:44:40Z"
    message: Deployment has minimum availability.
    reason: MinimumReplicasAvailable
    status: "True"
    type: Available
  - lastTransitionTime: "2024-02-08T00:44:33Z"
    lastUpdateTime: "2024-02-08T00:52:35Z"
    message: ReplicaSet "stress-c99c7f564" is progressing.
    reason: ReplicaSetUpdated
    status: "True"
    type: Progressing
  observedGeneration: 2
  readyReplicas: 1
  replicas: 2
  unavailableReplicas: 1
  updatedReplicas: 1



stress.yaml 파일에 memory 설정 추가 및 업데이트

여기서 spec.template.spec.resources를 추가해서, 다음과 같이 메모리 제한을 걸어줬다.

  • limits: 최대
  • requests: 최소
$ kubectl replace -f stress.yaml 



resource 설정에 cpu 추가 및 적용

이번에 메모리랑 cpu에 둘 다 제한을 걸었다.

# args 설정을 했기 때문에(컨테이너 인자 변경) 삭제후 실행 
$ kubectl delete deployment stress
$ kubectl create -f stress.yaml

# 또는

$ kubectl replace --force -f stress.yaml

args를 통해 컨테이너가 시작될 때 해당 인자를 사용하여 실행될 수 있도록 한다. limits와 requests는 리소스 사용량의 상한/하한선을 설정하지만, args를 통해 애플리케이션 수준에서 더 세밀한 제어가 가능하다.

ex) 2개의 cpu코어를 사용하도록 지시

args:
  - -cpus
  - "2"



확인

cpu사용률 증가 및 memory 할당 부분을 불 수 있다.



Grafana에서도 잘 확인이 된다.


참고
https://github.com/vishh/stress
https://kubernetes.io/ko/docs/tasks/configure-pod-container/assign-cpu-resource/

0개의 댓글