imhamburger 님의 블로그
데이터엔지니어 부트캠프 - 쿠버네티스 시작하기, Apache HTTP 부하테스트하기 (18주차) 본문
쿠버네티스
애플리케이션을 컨테이너(Container) 형태로 패키징하여 자동으로 배포, 확장 및 운영할 수 있게 해주는 오픈소스 플랫폼이다.
주로 마이크로서비스나 여러 컨테이너 기반의 애플리케이션을 운영하는 데 사용된다.
왜 쿠버네티스를 사용해?
기업이나 개발팀이 마이크로서비스 구조의 애플리케이션을 운영할 때, 각 서비스를 컨테이너로 분리하여 관리하면 유연성이 높아진다.
하지만 이렇게 관리해야 할 컨테이너의 수가 많아지면, 이를 직접 제어하는 것이 어려워지기 마련이다.
Kubernetes는 이처럼 수많은 컨테이너와 서버를 자동으로 관리하고, 높은 가용성을 유지하며 효율적인 자원 활용을 가능하게 한다!
나는 내 컴퓨터에서 Kubernetes 클러스터를 쉽게 실행할 수 있도록 도와주는 오픈소스 도구인 minikube를 이용하여 살짝 쿠버네티스에 발 담가보려 한다...ㅎ
minikube를 실행하는 방법은 공식사이트에서 설치를 하고 실행하면 된다.
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개월 동안 쉬지 않고 열심히 달려왔더니, 최근에 몸과 마음에 피로가 한꺼번에 몰려오는 걸 느꼈다. 눈도 계속 충혈이 되어서 한동안은 컴퓨터 화면을 멀리하려고 노력했다. 그래서 하루는 완전히 쉬어가면서 재충전하는 시간을 가졌고 오랜만에 푹 쉬고 나니 확실히 컨디션이 많이 좋아진 것 같다.
이제 남은 기간 동안 파이널 프로젝트를 열심히 준비할 계획이다. 이번 주는 재충전을 하면서 스스로 다시 한번 목표를 점검하고, 앞으로의 방향을 설정하는 시간으로 삼았던 것 같다. 파이널 프로젝트 화이팅!!!
'데이터엔지니어 부트캠프' 카테고리의 다른 글
카프카(Kafka) - Kafka Broker 왜 홀수 개의 브로커가 필요할까? (0) | 2024.11.12 |
---|---|
쿠버네티스(Kubernetes) - k3s 로 멀티노드 사용해보기 (1) | 2024.11.05 |
데이터엔지니어 부트캠프 - 네번째 팀프로젝트 (10/24 ~ 10/25) (17주차) (0) | 2024.10.29 |
데이터엔지니어 부트캠프 - 젠킨스(Jenkins) 이해하기&실행해보기 (16주차) (0) | 2024.10.22 |
데이터엔지니어 부트캠프 - 스프링부트(Springboot) 이해하기 (15주차) (3) | 2024.10.20 |