컨테이너 인프라 환경(3) 쿠버네티스 4. 서비스

InSeok·2023년 3월 4일
0

서비스

서비스

  • 외부에서 쿠버네티스 클러스터에 접속하는 방법

노드포트

  • 외부에서 쿠버네티스 클러스터 내부에 접속하는 가장 쉬운 방법
  • 모든 워커 노드의 특정포트를 열고 여기로 오는 모든 요청을 노드포트 서비스로 전달한다.
  • 노드포트 서비스는 해당업무를 처리할 수 있는 파드로 요청을 전달한다.
  • kubectl get services 를 실행해 서비스를 조회

부하 분산 테스트

  • 디플로이먼트로 생성된 파드 1개에 접속하고 있는 중에 파드가 3개로 증가하면 부하가 분산이 된다(로드밸런서 기능)
    • 노드 오브젝트 스펙에 적힌 것과 디플로이먼트의 이름을 확인해 동일하면 같은 파드라고 간주한다.

expose로 노드포트 서비스 생성

  • expose 명령얼ㄹ 사용해 서비스로 내보낼 디플로이먼트를 지정한다.
  • kubectl expose deployment np-pods --type=NodePort --name=np-svc-v2 --port=80
  • expose를 사용하면 노드포트의 포트번호를 지정할 수 없다.
    • 30000~32767에서 임의로 지정된다.

사용 목적별로 연결하는 인그레스

  • 노드 포트 서비스는 포트를 중복사용할 수 없어서 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개의 상태로 돌아가기 위해 파드가 종료된다.
profile
백엔드 개발자

0개의 댓글