imhamburger 님의 블로그

쿠버네티스(Kubernetes) - k3s 로 멀티노드 사용해보기 본문

데이터엔지니어 부트캠프

쿠버네티스(Kubernetes) - k3s 로 멀티노드 사용해보기

imhamburger 2024. 11. 5. 12:33

이전글에서는 minikube를 사용하였었는데 이번에는 k3s를 이용하여 부하테스트를 해보고자 한다. 

 

minikube는 로컬 환경에서 Kubernetes를 쉽게 테스트하고 학습할 수 있도록 설계된 싱글 노드 Kubernetes 클러스터 이지만,

k3s는 경량화된 Kubernetes 배포판으로, Kubernetes의 모든 기능을 유지하면서도 리소스가 적은 환경에서도 효율적으로 작동하도록 설계되어있다.

 

중요한건 minikube는 싱글노드이지만

k3s는 멀티 노드 클러스터를 쉽게 구성할 수 있으며, 실제 프로덕션 환경에서도 사용할 수 있다.

 

k3s를 설치하는 방법은 아래 공식문서 참고!!

 

 

Quick-Start Guide | K3s

This guide will help you quickly launch a cluster with default options. The installation section covers in greater detail how K3s can be set up.

docs.k3s.io

 

부하테스트를 하기 전에 다른 서버에 K3s의 워커노드인 Agent를 추가해야 한다. (멀티노드)

워커노드는 마스터 노드로부터 할당받은 Pod와 컨테이너를 실제로 실행하는 역할이다.

 

 

워커노드 설정하기

$ curl -sfL https://get.k3s.io | K3S_URL=https://myserver:6443 K3S_TOKEN=mynodetoken sh -

 

 

TOKEN 확인하기 (마스터노드에서)

$ cat /var/lib/rancher/k3s/server/node-token

 

 

워커노드가 잘 연결된 것을 확인하기

$ sudo kubectl get nodes

 

결과

 

 

나는 부하테스트를 위해 autoscaler yaml도 추가하였다.

autoscaler의 역할은 설정해놓은 cpu를 넘어가면 pods를 하나씩 늘리는 역할이다. 만약, cpu 사용량이 일정 기준 이하일 때는 pods를 줄여간다.

 

httpd-hpa.yaml (autoscaler 추가)

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: http-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: httpd-deployment
  minReplicas: 1
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 90

  behavior:
    scaleDown:
      stabilizationWindowSeconds: 10 #안정화 대기 시간
      policies:
      - type: Pods
        value: 1 #CPU 사용량이 기준 이하일 때 Pod 수를 1개씩 줄임
        periodSeconds: 20 #이 정책의 유효기간

 

 

그리고나서,

 

httpd / nginx 로드밸런서 / 로드밸런서 config / hpa yaml 파일을 모두 클러스터에 추가하였다.

 

 

pods 확인하기

$ sudo kubectl get pods

 

결과

 

httpd와 nginx 모두 Status가 Running 상태여야 정상적으로 실행중인 것이다.

 

 

이제 부하테스트를 진행해보자.

 

 

port 번호를 먼저 확인하기

$ sudo kubectl get svc

 

 

그런 다음 아래와 같이 진행하면 끝!

ab -c 10 -t 60 http://localhost:30836/

 

 

결과

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.2      0       2
Processing:     3  127 104.4    100     895
Waiting:        2  127 104.4    100     894
Total:          3  127 104.4    100     895

Percentage of the requests served within a certain time (ms)
  50%    100
  66%    102
  75%    194
  80%    196
  90%    295
  95%    303
  98%    404
  99%    500
 100%    895 (longest request)

 

 

 

kubectl 명령어 모음

 

kubectl 컨테이너 접속하기

$ kubectl exec -it <pod 이름> -- /bin/bash\n