보람찬 코기의 개발자 블로그
article thumbnail
반응형

해당 글은 Markdown으로 작성된 글 입니다.


쿠버네티스 소개 및 학습에 앞서 Docker(도커)에 대한 학습은 필수이다.

도커에 대한 기본지식이 필요하다면 여기 를 클릭하여 학습 하기를 매우 추천한다.

쿠버네티스(Kubernetes/K8s)란?

다음은 쿠버네티스의 공식 원서 에서의 정의이다.

쿠버네티스는 컨테이너화된 워크로드와 서비스를 관리하기 위한 이식성이 있고, 확장가능한 오픈소스 플랫폼이다. 쿠버네티스는 선언적 구성과 자동화를 모두 용이하게 해준다. 쿠버네티스는 크고, 빠르게 성장하는 생태계를 가지고 있다. 쿠버네티스 서비스, 기술 지원 및 도구는 어디서나 쉽게 이용할 수 있다.

쿠버네티스란 명칭은 키잡이(helmsman)나 파일럿을 뜻하는 그리스어에서 유래했다. K8s라는 표기는 "K"와 "s"와 그 사이에 있는 8글자를 나타내는 약식 표기이다. 구글이 2014년에 쿠버네티스 프로젝트를 오픈소스화했다.

쿠버네티스는 하드웨어 인프라를 추상화 하고 데이터 센터 전체를 하나의 거대한 컴퓨팅 리소스로 제공한다

분산 애플리케이션을 실행하는 표준이 되고 있다.

쿠버네티스가 등장한 이유

  • 배포 가능한 구성요소가 많아지고 데이터 센터 규모가 커지면서 발생하는 구성,관리,유지 하는 일의 난이도 상승
  • 리소스 활용률을 높이고 하드웨어 비용을 낮춰야하는 필요성
  • 구성요소의 서버 배포 및 구성,관리, 장애처리를 자동으로 스케줄링해주는 자동화의 필요성

쿠버네티스가 필요한 이유

모놀리스 애플리케이션에서 마이크로 서비스로 전환

  • 모놀리스의 경우 구성요소들이 서로 강하게 결합되어있다.
  • 모놀리스는 한부분을 변경하더라도 전체를 재 배포해야한다.
  • 모놀리스는 상호의존성 제약이 커지고 시스템의 복잡성이 증가되고 품질 저하 된다

마이크로서비스로 애플리케이션 분할

  • Restful API를 제공하는 동기프로토콜과 AMQP 같은 비동기프로토콜로 통신
  • 특정 개발 언어에 종속적이지 않음
  • 외부 API를 제공하는 독립형 프로세스 이로 개별적으로 개발, 배포 가능

마이크로서비스 확장

  • 자원(resource)이 더 필요한 경우 별도로 확장 가능 (수평, 수직으로 가능)
  • 확장 할때도 기존 서비스는 중단없이 유지되고 단지 확장을 할 수 있다.

데브옵스의 필요성

  • 개발팀이 애플리케이션을 배포하고 관리하는게 효율이 높다.
    • 클라이언트의 피드백을 신속하게 반영할 수 있다.
    • 최신 애플리케이션을 더 자주 릴리즈 하려면 배포 프로세스가 간소화 해야한다
  • 개발자 및 QA(품질보증)팀, 운영 팀이 전체 프로세스에서 협업해야 한다

애플리케이션 개발 단순화

  • 애플리케이션 개발과 프로덕션 환경이 모두 동일한 환경에서 실행된다 했을 때, 버그를 더 쉽게 발견하고 수정할수 있다.
  • 개발자가 구현해야하는 기능이 줄어든다. 예시 : [클러스터된 애플리케이션에서의 서비스나, 피어를 검색하는 기능]
  • 새로운 버전의 애플리케이션 출시 시, 버전에서 오류 탐지시 즉시 롤아웃을 중지하여 신속하게 알려준다. 지속적인 전달[CD/ Continuous Delivery] 가능

하지만 단점도 존재한다

  • 마이크로서비스에서 구성요소가 많아지고 배포 조합의 수, 구성요소간의 상호 종속성수가 많아지면 배포 결정이 어려워진다
  • 서로 작업을 수행함에 있어 서로를 찾고 통신해야하는데 서버 장애 상황시 규모가 큰 작업이 요구된다.
  • 독립적으로 배포될 뿐만 아니라 독립적인 방식으로 개발 된다. 각각의 애플리케이션이 서로 다른 버전의 라이브러리를 원하는 경우 종속성의 차이 발생하거나 충돌이 일어난다.
  • 요구에 따른 규모가 커질수록 종속성 관리가 더 어려워진다.
반응형
profile

보람찬 코기의 개발자 블로그

@BoChan

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!