쿠버네티스 클러스터 구축을 진행하며, 메트릭 모니터링(여기선 Prometheus+Grafana)이 잘 설정되었는지 확인하기 위해 스트레스 테스트를 진행했다.
교육용 환경을 세팅중이었기 때문에 실제로 배포 하거나 앱을 올리지는 않았고, 그냥 stress tool을 이용해 가볍게 해보았다. 다음과 같은 과정으로 진행했다.
$ kubectl create deployment stress --image=vish/stress
$ kubectl get deployment stress -o 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
여기서 spec.template.spec.resources를 추가해서, 다음과 같이 메모리 제한을 걸어줬다.
$ kubectl replace -f stress.yaml
이번에 메모리랑 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/