jaden.dev
로그인
jaden.dev
로그인
22/03/08 TIL
Jaden.dev
·
2022년 3월 8일
팔로우
0
0
📌 Load Balancer
서버에 요청을 보내는 이용자가 적으면 관계없지만, 수백 수천만의 이용자가 동시에 서버를 이용하고 있다면 서버가 멈출 수도 있다.
Scale-up과 Scale-out 두 방법이 있는데, Scale-out을 통해 위 문제를 해결할 수 있다. Scale-up은 하드웨어의 성능을 높이는거라 한계가 존재.
Scale-out의 장점
Scale-up은 비용적인 측면에서 부담
여러 대의 server를 운영하여 무중단 서비스를 제공할 수 있음
Load Balancing
트래픽을 여러 대의 서버가 분산처리
서버의 로드율, 부하량, 속도저하 등을 고려하여 적절히 분산처리하여 해결
Static
Round Robin : 순서대로
Ratio(가중치) : 가중치가 높은 서버
Priority Group Active : Active 장치
Dynamic
Least Connection : 연결 수가 적은 서버
Fastest : 가장 빠르게 응답하는 서버
Least Loaded : 가장 부하가 적은 서버
Load Balancer
OSI 7계층을 기준으로 layer 별 기준으로 load balancing을 수행
상위 계층을 기준으로 부하를 분산할수록 섬세한 부하 분산이 가능하지만 비용이 올라감
L2 : Mac 주소를 바탕으로 수행
L3 : IP 주소를 바탕으로 수행
L4 : Transport Layer level에서 수행 (port)
1.2.3.4:8080 -> 5.6.7.8
1.2.3.4:8081 -> 5.6.7.10
L7 : application Layer level에서 수행 (domain)
1.2.3.4/hello -> 5.6.7.8
1.2.3.4/hi -> 5.6.7.10
📌 Nginx
Master Process와 Worker Process로 구성
Master는 설정파일을 읽고, worker 관리
요청에 대한 실제 처리는 worker가 담당
Event Driven
높은 성능, 동시성, 낮은 리소스 사용
웹서버: 정적 컨텐츠 제공을 위해 설계
리버스 프록시: 클라와 서버 사이에 존재하고 요청을 가로채 처리
📌 Kubernetes
컨테이너 오케스트레이션 도구
선언적, 자동화 관리 기능
클러스터는 전체를 관리하는 컨트롤러로 마스터가 존재하고, 커네이너가 배포되는 머신인 노드가 존재
오브젝트-컨트롤러의 구조
pod
리눅스 컨테이너를 하나 이상 모아 놓은 것
쿠버네티스 애플리케이션의 최소 단위
하드웨어 유닛
노드: 최소 단위의 컴퓨팅 하드웨어, 개별 머신
클러스터: 지능적인 리소스 공유와 균형 배분을 위해 여러 노드를 묶은 그룹
소프트웨어 유닛
Linux 컨테이너: 하나 이상의 프로세스 모음, 실행에 필요한 파일도 모두 들어있어 머신간 이식이 가능
pod: 하나 이상의 linux 컨테이너 몽므, 클러스터 관리를 통한 리소스 공유의 장점을 극대화하기위해 패키지로 관리
deployment
말 그대로 배포. 배포를 추상화한 Pod의 묶음
기본적으로 Replication Controller를 생성하고, 이를 관리하는 역할
service
pod와 연결되는 논리적인 Endpoint
필요한 이유?
고객들의 서비스 접근을 위한 고정된 IP가 필요
Pod가 죽어버리면, 해당 Pod를 다시 띄우는데 띄워질 때마다 동적 IP 할당
여러개의 Pod을 하나의 서비스 객체로 선언할 수 있음
서비스 객체는 트래픽을 전달하는 역할
자신의 서비스와 연관된 Pod까지의 경로를 찾아 트래픽을 전달
label이라는 key-value를 이용해 endpoint Pod을 찾는다
ClusterIP, NodePort, LoadBalancer 등의 종류가 있음
ingress
클러스터 외부에서 내부로 접근하는 요청을 어떻게 처리할지 정리해둔 규칙들의 모음
외부에서, k8s에서 실행 중인 deployment와 service에 접근하기 위한 일종의 관문(Gateway)같은 역할
위에서 공부했던 LB의 역할도 담당할 수 있는데, L7 layer 수준에서도 가능
ingress-gce, ingress-nginx 두 가지 ingress controller가 있음
규칙의 예시
(1) xxx.com 이라는 호스트 명으로 접근하는 요청에 대해
(2) http 프로토콜을 통해
(3) /api/hostname-service 라는 경로로 접근하는 요청을
(4) hostname-service 라는 이름의 service의 xx포트로 전달하라
ingress는 ingress controller 라는 특수한 서버 컨테이너에 적용되어야 함
직접 운영할지, 클라우드 플랫폼에 위임할지 정할 수 있음
직접 controller를 구동하려면 nginx ingress controller를 사용
위임하려면 Google Kubernetes Engine 기능을 사용할 수 있음
Jaden.dev
https://github.com/JadenHeo
팔로우
이전 포스트
22/03/07 TIL
다음 포스트
22/03/10 TIL
0개의 댓글
댓글 작성