ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 쿠버네티스란?
    프로그래밍 기초 공부 2023. 4. 2. 02:33

     

    쿠버네티스

    • 컨테이너화된 어플리케이션을 배포, 관리, 확장할 때 수반되는 다수의 수동 프로세스를 자동화하는 오픈소스 컨테이너 오케스트레이션 플랫폼
    • 단순한 컨테이너 플랫폼이 아닌 마이크로서비스, 클라우드 플랫폼을 지향
    • 컨테이너로 이루어진 것들을 손쉽게 담고 관리할 수 있는 그릇 역할
    • Serverless, CI/CD, 머신러닝 등 다양한 기능이 쿠버네티스 플랫폼 위에서 동작함

     

     

     

    쿠버네티스 역사

    전통적인 배포 시대: 

     초기 조직은 어플리케이션을 물리 서버에서 실행했음. 한 물리 서버에서 여러 애플리케이션의 리소스 한계를 정의할 방법이 없었기에, 리소스 할당의 문제가 발생함. 이러한 문제를 해결하기 위해서 여러 물리 서버에서 각 어플리케이션을 실행해야 하지만 물리 서버를 많이 유지하기 위해서 조직에게 많은 비용이 들었다

     

    가상화된 배포 시대:

     전통적인 배포 시대의 해결방안으로 가상화가 도입 되었음. 단일 물리 서버의 CPU에서 여러 개의 가상 시스템을 실행할 수 있게 하였고, 일정 수준의 보안성까지도 제공을 할 수 있었음. 가상화를 사용하면 물리 서버에서 리소스를 보다 효율적으로 활용할 수 있으며, 쉽게 어플리케이션을 추가하거나 업데이트 할 수있고 하드웨어 비용을 절감할 수 있어 더 나은 확장성을 제공함.

     

    컨테이너 개발 시대:

    컨테이너는 VM과 유사하지만 격리 속성을 완하하여 어플리케이션 간에 운영체제를 공유함 기본 인프라와의 종속성을 끊었기 때문에, 클라우드나 OS 배포본에 모두 이식이 가능 함

     

     

     

    쿠버네티스 사용 이유

    • 쿠버네티스를 사용하면 컨테이너화된 어플리케이션 환경을 탄력적으로 실행할 수 있게 하기 위한 프레임 워크를 제공함
    • 어플리케이션의 확장과 장애 조치를 처리하고, 배포 패턴 등을 제공함
    • 쿠버네티스 패턴을 사용하면 쿠버네티스를 런타임 플랫폼으로 사용해 클라우드 네이티브 어플리케이션을 제작할 수 있음

     

     

     

    쿠버네티스 사용법

    • 컨트롤 플레인: 
    • 쿠버네티스 노드를 제어하는 프로세스의 컬렉션
    • 여기에서 모든 태스크 할당이 시작

     

    • 노드: 
    • 컨트롤 플레인에서 할당된 요청 태스크를 수행하는 머신

     

    • 포드: 
    • 단일 노드에 배포된 하나 이상의 컨테이너 그룹
    • 포드에 있는 모든 컨테이너는 IP 주소, IPC, 호스트 이름, 기타 리소스를 공유함
    • 포드는 기본 컨테이너에서 네트워크와 스토리지를 추상화함
    • 이렇게 하면 클러스터에서 컨테이너를 더 쉽게 이동할 수 있음

     

    • 복제 컨트롤러: 
    • 이 컨트롤러는 클러스터에서 실행되어야 하는 동일한 포드 복사본의 개수를 제어함

     

    • 서비스: 
    • 포드에서 작업 정의를 분리함
    • 쿠버네티스 서비스 프록시는 클러스터에서 다른 위치로 이동된 경우나 교체된 경우에 상관없이 서비스 요청을 적절한 포드로 자동 수신함

     

    • Kubelet: 
    • 이 서비스는 노드에서 실행되며 컨테이너 매니페스트를 읽고, 정의된 컨테이너가 시작되어 실행 중인지 확인함

     

    • kubectl: 
    • 쿠버네티스의 커맨드 라인 구성 툴

     

     

     

    쿠버네티스 제공 기능

    • 서비스 디스커버리와 로드 밸런싱
    • 쿠버네티스는 DNS 이름을 사용하거나 자체 IP 주소를 사용하여 컨테이너를 노출할 수 있음
    • 컨테이너에 대한 트래픽이 많으면, 쿠버네티스는 네트워크 트래픽을 로드밸런싱하고 배포하여 배포가 안정적으로 이루어질 수 있음

     

    • 스토리지 오케스트레이션
    • 쿠버네티스를 사용하면 로컬 저장소, 공용 클라우드 공급자 등과 같이 원하는 저장소 시스템을 자동으로 탑재 가능함

     

    • 자동화된 롤아웃과 롤백 
    • 쿠버네티스를 사용하여 배포된 컨테이너의 원하는 상태를 서술할 수 있으며 현재 상태를 원하는 상태로 설정한 속도에 따라 변경할 수 있음
      • ex) 쿠버네티스를 자동화해서 배포용 새 컨테이너를 만들고, 기존 컨테이너를 제거하고, 모든 리소스를 새 컨테이너에 적용할 수 있음

     

    • 자동화된 빈 패킹(bin packing) 
    • 컨테이너화된 작업을 실행하는데 사용할 수 있는 쿠버네티스 클러스터 노드를 제공함
    • 각 컨테이너가 필요로 하는 CPU와 메모리를 쿠버네티스에게 지시
      • -> 쿠버네티스는 컨테이너를 노드에 맞추어서 리소스를 가장 잘 사용할 수 있도록 해줌

     

    • 자동화된 복구(self-healing)
    • 쿠버네티스는 실패한 컨테이너를 다시 시작하고, 컨테이너를 교체하며, '사용자 정의 상태 검사'에 응답하지 않는 컨테이너를 죽이고, 서비스 준비가 끝날 때까지 그러한 과정을 클라이언트에 보여주지 않음

     

    • 시크릿과 구성 관리 
    • 쿠버네티스를 사용하면 암호, OAuth 토큰 및 SSH 키와 같은 중요한 정보를 저장하고 관리 할 수 있음
    • 컨테이너 이미지를 재구성하지 않고 스택 구성에 시크릿을 노출하지 않고도 시크릿 및 애플리케이션 구성을 배포 및 업데이트 할 수 있음

     

     

     

    쿠버네티스의 작동 방식

    • 작동 중인 쿠버네티스 배포를 클러스터라고 함
    • 쿠버네티스 클러스터는 두 부분인 컨트롤 플레인과 컴퓨팅 머신(또는 노드)으로 시각화할 수 있음
    • 각 노드는 자체 Linux 환경이며 물리 또는 가상 머신일 수 있음
      • 각 노드는 컨테이너로 이루어진 포드(Pod)를 실행
    • 컨트롤 플레인은 어느 애플리케이션을 실행하고 애플리케이션이 어느 컨테이너 이미지를 사용할지와 같이 클러스터를 원하는 상태로 유지 관리함
    • 컴퓨팅 머신은 애플리케이션과 워크로드를 실제로 실행
    • 쿠버네티스는 운영 체제를 기반으로 실행되며, 노드에서 실행되는 컨테이너의 포드와 상호 작용
    • 쿠버네티스 컨트롤 플레인은 관리자 또는 DevOps팀 으로부터 명령을 전달받고 해당 지침을 컴퓨팅 머신에 전달함
      • 이 전달은 여러 서비스와 연계하여 태스크에 가장 적합한 노드를 자동으로 결정
      • 그런 다음 요청된 작업을 수행하기 위해 해당 노드에 리소스를 할당하고 포드를 할당함
    • 쿠버네티스 클러스터의 원하는 상태는 실행해야 할 애플리케이션이나 워크로드, 함께 사용하는 이미지, 사용 가능하도록 설정할 리소스, 기타 구성 세부 사항을 정의함
    • 인프라 측면에서 보면 컨테이너를 관리하는 방식에는 거의 변화가 없음
    • 컨테이너를 더 높은 수준에서 제어하므로 각각의 개별 컨테이너 또는 노드를 세분화하여 관리하지 않고도 더 효과적으로 제어할 수 있음
    • 작업에는 쿠버네티스 구성, 노드, 포드, 그 안의 컨테이너에 대한 정의가 포함됨
    • 쿠버네티스는 컨테이너 오케스트레이션을 처리함
    • 쿠버네티스를 원하는 곳에서 실행할 수 있음
      • 즉, 베어 메탈 서버, 가상 머신, 퍼블릭 클라우드 제공업체, 프라이빗 클라우드, 하이브리드 클라우드 환경 등에서 실행할 수 있음
      • 쿠버네티스의 주요 장점 중 하나는 다양한 종류의 인프라에서 작동한다는 것

     

     

    쿠버네티스 네이티브 인프라

    • 오늘날 대부분의 온프레미스 쿠버네티스 배포는 기존 가상 인프라에서 실행됨
    • 베어 메탈 서버에서 배포되는 사례가 증가하고 있음
      • 이는 데이터센터가 진화하면서 자연스러운 현상임
    • 쿠버네티스는 컨테이너화된 애플리케이션을 위한 배포 및 라이프사이클 관리 툴 역할을 하며, 인프라 리소스를 관리하는 데는 별도의 툴이 사용됨

     

    • 인프라 계층 등 컨테이너를 지원하기 위해 처음부터 데이터센터를 설계함
    • 먼저 베어 메탈 서버와 소프트웨어 정의 스토리지로 직접 시작하여 컨테이너에서와 같은 자가 설치, 자가 확장, 자가 치유의 장점을 인프라에 제공할 수 있음

     

     

    쿠버네티스 네티브 인프라의 장점

    개발자와 IT 운영팀 간의 마찰을 줄이기 위한 퍼블릭 클라우드 민첩성과 온프레미스 간편성

    VM 실행을 위한 별도의 하이퍼바이저 계층이 필요하지 않으므로 비용 효율성 개선

    쿠버네티스에서 컨테이너, 서버리스 애플리케이션, VM을 배포하여 애플리케이션과 인프라를 모두 확장할 수 있는 할 수 있는 개발자 유연성

    쿠버네티스를 온프레미스 및 퍼블릭 클라우드 전반에 공통 계층으로 사용하는 하이브리드 클라우드 확장성

     

     

     

    쿠버네티스 도커 차이

    Docker는 쿠버네티스가 오케스트레이션하는 컨테이너 런타임으로 사용할 수 있음쿠버네티스가 노드에 대해 포드를 예약하면 해당 노드의 kubelet이 지정된 컨테이너를 실행하도록 Docker에 명령함그런 다음 kubelet은 Docker에서 해당 컨테이너의 상태를 지속적으로 수집하고 해당 정보를 컨트롤 플레인에 집계함
    Docker는 컨테이너를 해당 노드로 가져와서 해당 컨테이너를 시작하고 중지Docker와 함께 쿠버네티스를 사용할 때 차이가 있다면 관리자가 모든 컨테이너의 모든 노드에서 작업을 직접 수행하는 것이 아니라 자동화된 시스템이 이러한 작업을 Docker에 요청한다는 것

     

     

    '프로그래밍 기초 공부' 카테고리의 다른 글

    직렬화와 역직렬화  (0) 2023.04.04
    Docker 란?  (0) 2023.04.01
    Kafka란?  (0) 2023.03.31
    JPQL 이란?  (0) 2023.03.30
    DAO, DTO, VO란?  (0) 2023.03.23
Designed by Tistory.