imhamburger 님의 블로그

데이터엔지니어 부트캠프 - 쿠버네티스 시작하기, Apache HTTP 부하테스트하기 (18주차) 본문

데이터엔지니어 부트캠프

데이터엔지니어 부트캠프 - 쿠버네티스 시작하기, Apache HTTP 부하테스트하기 (18주차)

imhamburger 2024. 11. 4. 17:35

쿠버네티스

 

애플리케이션을 컨테이너(Container) 형태로 패키징하여 자동으로 배포, 확장 및 운영할 수 있게 해주는 오픈소스 플랫폼이다.

주로 마이크로서비스나 여러 컨테이너 기반의 애플리케이션을 운영하는 데 사용된다.

 

 

왜 쿠버네티스를 사용해?

 

기업이나 개발팀이 마이크로서비스 구조의 애플리케이션을 운영할 때, 각 서비스를 컨테이너로 분리하여 관리하면 유연성이 높아진다.

하지만 이렇게 관리해야 할 컨테이너의 수가 많아지면, 이를 직접 제어하는 것이 어려워지기 마련이다.

 

Kubernetes는 이처럼 수많은 컨테이너와 서버를 자동으로 관리하고, 높은 가용성을 유지하며 효율적인 자원 활용을 가능하게 한다!

 

나는 내 컴퓨터에서 Kubernetes 클러스터를 쉽게 실행할 수 있도록 도와주는 오픈소스 도구인 minikube를 이용하여 살짝 쿠버네티스에 발 담가보려 한다...ㅎ

 

minikube를 실행하는 방법은 공식사이트에서 설치를 하고 실행하면 된다.

 

minikube 바로가기

 

minikube start

minikube is local Kubernetes, focusing on making it easy to learn and develop for Kubernetes. All you need is Docker (or similarly compatible) container or a Virtual Machine environment, and Kubernetes is a single command away: minikube start What you’ll

minikube.sigs.k8s.io

 

Kubernetes는 보통 여러 개의 서버가 필요한 대규모 클러스터 환경에서 운영되지만,

Minikube를 사용하면 단일 노드(하나의 가상 머신)로 Kubernetes를 간단히 테스트하고 학습할 수 있다.

 

 

설치가 완료되면, minikube를 실행해주면된다.

$ minikube start

 

 

대시보드 실행하기

$ minikube dashboard --url

 

 

대시보드를 실행한 후 url로 들어가면, 다음과 같은 화면을 볼 수 있다.

 

 

만약에 대시보드가 실행되지 않는다면, addons list를 확인해보자.

$ minikube addons list #리스트 확인

 

그럼 아래와 같은 테이블을 확인할 수 있는데 dashboard 부분에 enable 표시가 되어있어야 한다.

 

 

enable ✅ 해주기

$ minikube addons enable dashboard
$ minikube addons enable metrics-server

 

나는 CPU와 메모리 사용량 같은 리소스 소비량에 관한 정보도 보기 위해 metrics-server 도 추가해주었다.

 

다시 대시보드 실행하면 잘 들어가질 것이다!!

 

 

이제 테스트를 위해 미리 만들어 놓은 yaml 파일로 pod 를 생성해보자.

 

httpd-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: httpd-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: httpd
  template:
    metadata:
      labels:
        app: httpd
    spec:
      containers:
      - name: httpd
        image: httpd
        ports:
        - containerPort: 80
        resources:
          requests:
            cpu: 0.1m
            memory: 1Mi
          limits:
            cpu: 1m
            memory: 14Mi
---
apiVersion: v1
kind: Service
metadata:
  name: httpd-service
spec:
  selector:
    app: httpd
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
  type: ClusterIP

 

 

pod 생성하기

$ kubectl apply -f <파일명>.yaml

 

 

생성된 pod 확인하기

$ minikube service list

 

 

 

pod에 접속하기

minikube service <NAME>

 

 

URL로 접속하면! 잘 나온다!

 

명령어가 조금 헷갈릴 수 있는데, 이렇게 이해하면 쉽다.
minikube는 로컬 Kubernetes 클러스터를 생성하고 관리하는 툴
kubectl은 클러스터 내 리소스를 제어하는 툴

 

 

 

부하테스트 

 

실행시켜놓은 어플리케이션에 부하테스트를 해보자.

이번엔 ngrinder가 아니고 Apache HTTP 서버 프로젝트에서 제공하는 부하 테스트 도구로 테스트를 진행해보았다.

 

부하주기

ab -c 10 -t 60 http://<IP주소:포트번호>/

 

  • -c 10: 한 번에 10개의 동시 연결을 사용해 테스트
  • -t 60: 60초 동안 부하를 지속해서 서버에 요청
  • http://...: 테스트할 서버의 URL을 지정

 

나는 cpu limit을 1m 그리고 memory 14Mi로 설정하였다.

 

httpd-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: httpd-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: httpd
  template:
    metadata:
      labels:
        app: httpd
    spec:
      containers:
      - name: httpd
        image: httpd
        ports:
        - containerPort: 80
        resources:
          requests:
            cpu: 0.1m
            memory: 1Mi
          limits:
            cpu: 1m
            memory: 14Mi
---
apiVersion: v1
kind: Service
metadata:
  name: httpd-service
spec:
  selector:
    app: httpd
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
  type: NodePort

 

 

결과는 다음과 같다.

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.1      0       1
Processing:   220 2651 1764.8   2199    8796
Waiting:        0 1392 1327.5   1099    7400
Total:        220 2652 1764.8   2199    8796

Percentage of the requests served within a certain time (ms)
  50%   2199
  66%   2901
  75%   3400
  80%   4199
  90%   5100
  95%   6400
  98%   7899
  99%   8199
 100%   8796 (longest request)

 

memory: 13.5Mi 로 설정할 시, 결과는 Total of 196 requests completed 였다.

딱 14Mi까지가 안끊겼다....

 

 

쿠버네티스는 구조가 복잡하기때문에... 공부를 할 것이 많다.

다음엔 쿠버네티스 구조와 이론 정리를 해야겠다!!

 

 

 

일주일을 보내며...

 

이번 주는 쿠버네티스(Kubernetes)를 배우며 많은 걸 느끼고 배웠던 시간이었다. 처음에는 이 기술이 워낙 생소하다 보니 사용법부터 배우기보다는 기본 개념부터 차근차근 익히는 게 더 도움이 될 것 같아서 개념 위주로 공부를 시작했다. 솔직히 Pod, 클러스터 같은 용어들이 처음엔 낯설고 뭔가 딱 와닿지 않아서 구체적으로 어떤 역할을 하는지 이해하기 어려웠다. 그래서 필요한 개념을 하나씩 검색해 보면서 스스로 천천히 이해하는 시간을 가졌다. 단순히 기술을 따라 쓰기보다는 왜 쿠버네티스가 필요한지, 어떤 상황에서 유용하게 쓰이는지를 이해하려고 노력했다.

물론 일주일이라는 짧은 시간 안에 쿠버네티스를 완벽히 이해하고 다루는 건 무리라고 생각하지만, 이번 공부를 통해서 쿠버네티스가 운여하는데 있어 중요한 도구가 되었는지를 조금씩 이해하게 된 것 같다. 이렇게 큰 그림을 먼저 잡고 나니까 쿠버네티스 개념에 대해 조금은 이해가 갔다.

 

 

앞으로 나의 방향

 

이제 다음 주부터 파이널 프로젝트가 시작될 예정이다. 그 전에 소규모 프로젝트가 하나 더 있긴 하지만, 그건 크게 부담 없이 진행할 수 있을 것 같다. 파이널 프로젝트를 앞두고 있기에 이번 주는 일부러 쉬어가는 시간을 가졌다. 사실 지난 5개월 동안 쉬지 않고 열심히 달려왔더니, 최근에 몸과 마음에 피로가 한꺼번에 몰려오는 걸 느꼈다. 눈도 계속 충혈이 되어서 한동안은 컴퓨터 화면을 멀리하려고 노력했다. 그래서 하루는 완전히 쉬어가면서 재충전하는 시간을 가졌고 오랜만에 푹 쉬고 나니 확실히 컨디션이 많이 좋아진 것 같다.

이제 남은 기간 동안 파이널 프로젝트를 열심히 준비할 계획이다. 이번 주는 재충전을 하면서 스스로 다시 한번 목표를 점검하고, 앞으로의 방향을 설정하는 시간으로 삼았던 것 같다. 파이널 프로젝트 화이팅!!!