본문 바로가기

쿠버네티스

쿠버네티스의 이해

쿠버네티스(Kubernates)

 - 컨테이너 기반의 애플리케이션을 개발하고 배포할 수 있도록 설계된 오픈 소스 플랫폼

 - 기본적으로 1대의 마스터 노드와 워커 노드로 구성됨

 - 서비스 중단 없이 애플리케이션을 업그레이드할 수 있어서 안정적으로 서비스를 제공할 수 있음

 - 오픈 소스로 특정 클라우드 벤더에 종속되어 있지 않고 다른 제품과의 호환성이 뛰어남

 - 파드가 사용할 수 있는 컴퓨팅 리소스(CPU, 메모리 등)을 사전에 지정할 수 있어서 노드의 전체 자원을 관리할 수 있음

 - 자원 사용률에 따라 파드의 개수를 늘리거나 줄이는게 가능

 - 개발자가 인프라에 대한 정보 없이도 컨테이너화된 애플리케이션을 쉽게 배포하는 것이 가능

 

  ● 파드 : 쿠버네티스의 가장 기본적인 배포 단위, 휘발성으로 삭제 시 파드 안의 데이터도 삭제됨

    (파드는 하나 이상의 컨테이너를 포함. 쿠버네티스는 유사한 역할을 하는 컨테이너를 파드라는 단위로 묶어서 배포)

 

  ● 서비스 : 배포한 파드를 외부에서 접근할 수 있게 함

 

  ● 네임스페이스 : 쿠버네티스 클러스터의 논리적인 분리 단위

 

  ● 볼륨 : 컨테이너의 파일을 저장하고 컨테이너 간 파일을 공유할 수 있는 저장소

 

  ● 오브젝트 : 파드, 서비스, 볼륨, 네임스페이스를 묶은 것

 

  ● 마스터 노드(컨트롤 플레인) : 전체 쿠버네티스 환경을 관리하는 노드

 

  ● 워커 노드 : 컨테이너 또는 도커를 실행, 유지 및 관리하는 노드

 

  ● 클러스터 : 마스터 노드와 하나 이상의 워커 노드로 구성된 쿠버네티스

 

  ● 영구 스토리지 : 중요한 데이터를 파드 외부에 저장 후 CSI로 외부 스토리지를 파드와 연결

 

 

 

쿠버네티스 컴포넌트

 - 마스터 노드와 워커 노드에는 각각 클러스터의 유지, 제어와 애플리케이션의 실행을 위한 컴포넌트가 존재

 

쿠버네티스 컴포넌트

  ●  API 서버 : 클러스터의 API를 사용할 수 있게 해주는 프로세스, 요청이 들어왔을 때 유효성을 검증

 

  ● etcd : 클러스터에 필요한 정보, 파드와 같은 리소스들의 상태 정보가 키-값으로 저장된 곳

 

  ● 스케줄러  : 파드를 위치시킬 워커 노드를 확인하고 API 서버에 정보를 전달

 

  ● kubelet : 클러스터의 각 노드에서 실행되는 에이전트, 파드에서 컨테이너의 생성 및 운영을 관리

 

  ● 컨트롤 매니저

    1) kube-controller-manager

      - 다양한 컴포넌트의 상태를 지속적으로 모니터링하는 동시에 실행 상태를 유지

 

    2) cloud-controller-manager

      - EKS, AKS 같은 퍼블릭 클라우드에서 제공하는 쿠버네티스와 연동되는 서비스들을 관리

 

  ● 프록시 : 노드에 대한 네트워크 규칙 관리, 클러스터 내부와 외부에 대한 통신을 담당

 

 

쿠버네티스 컨트롤러

 1. 디플로이먼트

   - stateless 애플리케이션을 배포할 때 사용하는 가장 기본적인 컨트롤러

   - 레플리카셋의 상위 개념

 

 2. 레플리카셋

   - 몇 개의 파드를 유지할지 결정정하는 컨트롤러

 

 3. 잡

   - 하나 이상의 파드를 지정 후 실행

 

 4. 크론잡

   - 지정한 일정에 따라서 잡을 실행

   - 중요한 데이터를 백업하는 데 사용

 

 5. 데몬셋

   - 특정 노드 또는 모든 노드에 파드를 배포하고 관리

   - 성능 수집 및 로그 수집 작업에 사용

 

 

쿠버네티스 서비스

 - 파드는 기본적으로 외부에서 접근할 수 있는 IP를 할당받지 않음

 - 파드는 워커 노드가 바뀌거나 IP가 바뀌는 등 동적인 변경이 이루어짐

 - 서비스를 이용하면 파드가 클러스터 내의 어디에 있든지 고정된 주소를 이용해 접근 가능함

 

쿠버네티스 서비스

 

 1. 클러스터 IP (ClusterIP)

   - 내부에서 파드끼리 통신할 수 있는 고정 IP

 

 2. 노드포트 (NodePort)

   -  서비스를 외부로 노출할 때 사용

 

 3. 로드밸런서(LoadBalance)

   - 퍼블릭 클라우드에 존재하는 로드밸런서에 연결할 때 사용

   - 사용자는 로드밸런서의 외부 IP를 통해 접근

 

 

쿠버네티스 통신

 - 파드가 사용하는 네트워크(가상 네트워크, veth0)와 노드가 사용하는 네트워크(eth0)는 다름

 - 같은 노드에 떠 있는 파드끼리만 통신이 가능

 - 다른 노드의 파드와 통신하기 위해서는 CNI(Container Network Interface) 플러그인이 필요함

 

  1. 동일 파드의 컨테이너 간 통신

   - 하나의 파드 내에 존재하는 컨테이너들은 동일한 IP를 사용하며 포트로 구분됨

 

  2. 단일 노드에서 파드 간 통신

   - 단일 노드에 있는 파드들은 같은 대역을 사용함

 

  3. 다수의 노드에서 파드 간 통신

   - 오버레이 네트워크(노드에서 사용하는 물리적인 네트워크 위의 가상의 네트워크)를 구성하여

     클러스터로 묶인 노드의 파드 간의 통신 가능

   - 오버레이 네트워크를 구성하려면 클러슽를 구성할 때 CNI 규약을 따르는 플로그인을 함께 설치해야함

 

     * CNI 플러그인

        1) 플라넬(Flannel)

          - 쿠버네티스와 함께 대표적으로 사용하는 CNI 플러그인

 

        2) 칼리코(Calico)

          - 캡슐화 또는 오버레이 없이 파드 간에 통신이 가능한 네트워크를 제공하는 플러그인

 

        3) 실리움(Cilium)

          - 리눅스 커널 기술을 이용해 데이터 경로의 필터링, 트래픽 모니터링 및 리디렉션을 수행

 

        4) 멀터스(Multus)

          - 다중 네트워크 지원을 위한 멀티 플러그인

          - 2개 이상의 플러그인을 사용할 때 유용함

 

  4. 파드와 서비스 간의 통신

   - 서비스도 파드처럼 IP를 가짐

   - 파드와 서비스에서 사용하는 IP 대역은 다름

   - 서비스에서 사용하는 가상 네트워크는 ifconfig나 라우팅 테이블에서 확인할 수 없다

   - netfilter와 iptables가 서비스 IP를 노드 IP로 변환함으로써 다른 대역인 서비스와 파드간의 통신이 가능

 

  5. 외부와 서비스 간 통신

   - 외부와 통신할 수 있게 해주는 서비스를 사용(노드포트, 로드밸런서, 인그레스)

   - 인그레스는 클러스터 외부에서 내부로 접근하는 요청들을 어떻게 처리할 것인지에 대한 규칙 모음

   - 인그레스 자체는 규칙의 모음일 뿐 실제로 규칙을 동작시키는 것은 인그레스 컨트롤러임

 

'쿠버네티스' 카테고리의 다른 글

Deployment & Service  (0) 2023.05.01
파드 생성하고 관리하기  (0) 2023.05.01
쿠버네티스 설치  (0) 2023.04.30
쿠버네티스 시작 전 기본 개념  (0) 2023.04.29