서비스
서비스
노드포트
- 외부에서 쿠버네티스 클러스터 내부에 접속하는 가장 쉬운 방법
- 모든 워커 노드의 특정포트를 열고 여기로 오는 모든 요청을 노드포트 서비스로 전달한다.
- 노드포트 서비스는 해당업무를 처리할 수 있는 파드로 요청을 전달한다.
kubectl get services
를 실행해 서비스를 조회
부하 분산 테스트
- 디플로이먼트로 생성된 파드 1개에 접속하고 있는 중에 파드가 3개로 증가하면 부하가 분산이 된다(로드밸런서 기능)
- 노드 오브젝트 스펙에 적힌 것과 디플로이먼트의 이름을 확인해 동일하면 같은 파드라고 간주한다.
expose로 노드포트 서비스 생성
- expose 명령얼ㄹ 사용해 서비스로 내보낼 디플로이먼트를 지정한다.
kubectl expose deployment np-pods --type=NodePort --name=np-svc-v2 --port=80
- expose를 사용하면 노드포트의 포트번호를 지정할 수 없다.
사용 목적별로 연결하는 인그레스
- 노드 포트 서비스는 포트를 중복사용할 수 없어서 1개의 노드포트에 1개의 디플로이먼트만 적용가능
- 여러 개의 디플로이먼트가 있을때 인그레스를 사용한다.
- 인그레스는 고유한 주소를 제공해 사용목적에 따라 다른 응답을 제공할 수 있고, 트래픽에 대한 L4/L7 로드밸런서와 보안 인증서를 처리하는 기능을 제공한다.
- 인그레스를 사용하려면 인그레스 컨트롤러가 필요하다.
- Nginx 인그레스 컨트롤러 작동 단계
- 사용자는 노드마다 설정된 노드포트를 통해 노드포트 서비스로 접속한다. 이때, 노드포트 서비스를 Nginx 인그레스 컨트롤러로 구성한다.
- Nginx 인그레스 컨트롤러는 사용자의 접속경로에 따라 적합한 클러스터 IP 서비스로 경로를 제공한다.
- 클러스터 IP 서비스는 사용자를 해당 파드로 연결해 준다.
인그레스 컨트롤러는 파드와 직접 통신할 수 없어서 노드포트 또는 로드밸런서 서비스와 연동되어야 한다.
- 인그레스를 사용자 요구 사항에 맞게 설정하려면 경로와 작동을 정의해야 한다.
- 들어오는 주소 값과 포트에 따라 노출된 서비스를 연결하는 역할을 설정
get ~ -o yaml 내용을 야믈 형식으로 출력
expose deployment 파드이름 —name=서비스이름 파드를 클러스 외부에 노출할 수있는 구역인 서비스로 노출
로드밸런서 서비스
- 로드밸런서를 사용하려면 로드밸런서를 이미 구현해 둔 서비스업체의 도움을 받아 쿠버네티스 클러스터 외부에 구현해야 한다.
- 온프레미스에서 로드밸런서 제공하는 MetalLB
- 온프레미스에서 로드밸런서를 사용하려면 내부에 로드밸런서 서비스를 받아주는 구성이 필요하다.
- MetalLB
- 베어메탈(bare metal)
- 기존의 L2 네트워크(ARP/NDP)와 L3 네트워크(BGP)로 로드밸런서를 구현
- MetalLB 컨트롤러는 작동방식(Protocl,프로토콜)을 정의하고 EXTERNAL-IP를 부여해 관리한다.
- MetalLB 스피커는 정해진 작동방식에 따라 경로를 만들수 있도록 네트워크 정보를 광고하고 수집해 각 파드의 경로를 제공한다.
- L2는 스피커중에서 리더를 선출해 경로 제공을 총괄하게 한다.
부하에 따라 자동으로 파드 수를 조절하는 HPA
- 사용자가 갑자기 늘어날경우를 대비해 부하량에 따라 디플로이먼트의 파드 수를 유동적으로 관리하는 기능을 제공한다.
- HPA(Horiznotal Pod Autoscaler)
top pods
부하를 확인하는 명령어
- HPA가 자원을 요청할 때 메트릭 서버(Metrics-Server, 모니터링 도구)를 통해 계측갑을 전달받는다.
- 오브젝트 스펙파일을 통해 메트릭 서버 생성가능
- 파드에 부하가 걸리기 전에 scale이 실행되게 디플로이먼트에 기준값을 기록해야한다.
edit
명령어를 통해 디플로이먼트 내용 수정가능
cpu의 meksdnlsms milliunits 로서 1000m은 1개의 cpu가 된다. 10m은 파드의 CPU 0.01 사용을 기준으로 파드를 증설하게 설정한 것이다.
kubectl autoscale deployment hpa-hname-pods --min=1 --max=30 --cpu-percent=50
- 특정조건이 만족되는 경우 autoscale 설정
- 최소 파드수 1
- 최대 파드수 30
- cpu 사용량 50%넘으면
kubectl get hpa
를통해 HPA의 현상태를 확인가능
watch
명령어를 통해 2초에 한번씩 자동으로 확인 상태가능
- 부하량이 늘어남에 따라 파드가 새로 생성되고, 일정시간이 지난후 더이상 부하가 없으면 autoscale 최소 조건인 파드 1개의 상태로 돌아가기 위해 파드가 종료된다.