이론 정리/인프라

쿠버네티스 기본 개념 간략정리

철매존 2025. 1. 25. 22:34
728x90
반응형

쿠버네티스 기본 개념

노드의 개념

  • 마스터 노드
    • 클러스터를 관리한다.
  • 워커 노드
    • 파드가 실행된다.
  • 인그레스 노드
    • 클러스터 외부에서 클러스터 내부의 파드에 접근할 때 로드밸런서의 역할을 해준다.
    • 여기서 받아서 어떤 endpoint 로 가야할지를 판단해서 보내준다.

쿠버네티스 리소스

크게 오브젝트와 컨트롤러로 구성되어 있다.

  • 오브젝트
    • 네임스페이스, 파드, 서비스 등이 있다.
      • 네임스페이스
        • 클러스터 내부를 논리적 단위로 구분하여 사용할 수 있도록 해준다.
        • 네임스페이스를 사용하면 pod, controller, service, ingress 등 용도에 따라 실행해야 하는 애플리케이션을 하나의 클러스터 내에서 구분해서 사용할 수 있게 된다.
        • 클러스터를 실행하면 기본적으로 kube-system(시스템에서 관리하는 네임스페이스), default(사용자용 네임스페이스로 쿠버네티스 명령 실행 시 별도의 네임스페이스를 명시하지 않으면 항상 default 네임스페이스에 적용된다.) 등의 네임스페이스가 생상된다.
      • 파드
        • 쿠버네티스 컨테이너가 실행되는 최소 단위
        • 하나의 파드 안에 여러 개의 컨테이너를 묶어서 관리할 수 있으며 해당 파드에 속한 컨테이너들은 모두 같은 노드(VM) 에서 실행된다.
    • 템플릿, 헬름 차트 등을 통해 리소스의 바라는 상태를 정의하면 이를 바탕으로 오브젝트가 생성된다.
      • 헬름 차트 : k8s 애플리케이션을 패키징하고 배포하기 위한 전체 패키지
      • 템플릿 : 헬름 차트 내에서 k8s 리소스 매니페스트를 생성하는 파일들
  • 컨트롤러(쿠버네티스의 빌트인 워크로드)
    • 파드를 관리하는 역할을 하며 쿠버네티스 빌트인 워크로드 리소스에 해당한다.
    • 목적에 맞게 다양한 컨트롤러를 사용할 수 있으며 컨트롤러의 종류에는 레플리카세트, 레플리에키션 컨트롤러, 디플로이먼트, 스테이트풀세트, 데몬세트, 잡, 크론잡 등이 있다.
      • 레플리카세트
        • 파드 자체에는 셀프힐링 기능이 없다.
          • 레플리카세트가 선언된 갯수만큼 파드가 항상 클러스터 내에서 실행되도록 하는 가용성을 보장하는 역할을 한다.
        • 실제 개발 환경에서는 레플리카세트를 직접적으로 사용하지 않고 주로 디플로이먼트를 통해 관리한다.
      • 디플로이먼트
        • 쿠버네티스에 상태가 없는(stateless) 애플리케이션을 배포할 때 주로 사용
        • 얘가 내부적으로 레플리카세트를 생성하고 이를 이용해 파드를 관리한다.
      • 데몬세트
        • 클러스터 내의 모든 노드에 동일한 파드를 실행할 떄 사용
      • 스테이트풀세트
        • 상태가 있는 파드를 관리하는 컨트롤러
        • 여러 개의 파드 간 순서를 지정해서 실행시켜야 하거나, 특정 데이터를 저장한 후 파드를 재시작할 때 해당 데이터를 유지해야 하는 경우 등에 사용 가능
        • 한번 실행하고 종료하는 성격의 작업을 실행할 때 사용
      • 크론잡
        • 지정된 시간에 주기적으로 실행해야 하는 작업에 사용
        • 주의할 점은 동일 시간대에 너무 많은 크론잡을 실행하면 일부가 누락될 수 있다는것

서비스

파드는 클러스터 내에서 계속 생성되고 노드를 옮겨 다닐 수도 있다. -> 즉 발급받은 IP가 달라질 수 있다.

  • 서비스는여러 개의 파드에 접근할 수 있는 하나의 IP를 제공한다.
    • 즉 파드가 변동된다고 해도 서비스 주소를 통해 연결된 파드로 접근 가능
      • 클러스터 내의 로드밸런서 역할을 한다.
        • +) 참고로 인그레스를 통해서도 클러스터 외부에서 클러스터 내 파드에 접근할 수 있다. -> 서비스는 주로 L4, 인그레스는 주로 L7 영역에서 통신
  • 크게 4가지 타입이 있다.
    • ClusterIP
      • 기본 타입. 클러스터 내부에서만 접근가능한 IP 제공
      • 클러스터 내 파드들이 서로 통신할 수 있게 한다.
      • 외부에서 접근할 수 없기 때문에 보안이 강화된다.
      • 주로 DB, cache 같은 내부 서비스 등에 사용된다.
    • NodePort
      • 클러스터 내의 모든 노드에 지정된 특정 포트 할당
      • 서비스에 지정된 포트 번호만 사용하면 파드에 접근할 수 있다.
      • 클러스터 내부, 외부에서 모두 다 접근 가능하다.
        • <노드IP>:<NodePort> 를 통해 서비스 접근 가능
      • 모든 노드가 동일한 NodePort 를 사용하기 때문에 어떤 노드로 접근해도 동일 서비스에 접근이 가능하다.
    • LoadBalancer
      • 외부의 로드밸런서를 파드에 연결한다.
        • AWS, GCP, Azure 등의 LB를 프로비저닝해서 외부 노출
      • 접근 가능한 외부 IP를 부여하기 때문에 해당 IP를 통해 클러스터 외부에서 파드에 접근 가능
    • ExternalName
      • 클러스터 안에서 클러스터 외부에 접근할 때 사용한다.
      • DNS를 지정하면 이를 CNAME으로 반환하며 이를 이용해 클러스터 외부에 접근 가능
      • 얘는 주로 외부의 DB나 API 서비스와 같은 리소스 참조에 사용된다.

Ingress

  • 외부에서 클러스터 내부로 접근하는 요청을 어떻게 처리할지를 정의해 놓은 규칙의 모음.
  • 쿠버네티스 내부에 인그레스라는 리소스를 정의해 두면 인그레스 컨트롤러가 그 정의대로 외부 접근가능 설정을 해준다.
  • 인그레스는 클러스터 외부에서 클러스터 내부의 파드로 접근할 때 주로 쓰는 방법이다.
    • 위의 NodePort를 통해서도 가능하기는 한데 서비스는 L4라 URL을 사용할 수 없으므로 인그레스를 쓴다.
반응형