728x90
쿠버네티스 소개
쿠버네티스 시작
- 오랜 세월 동안 구글은 보그(Borg)라는 내부 시스템을 개발
- 애플리케이션 개발자와 시스템 관리자가 수천 개의 애플리케이션과 서비스를 관리하는 데 도움
- 조직 규모가 클 때 엄청난 가치를 발휘
- 수십만 대의 시스템을 가동할 때 사용률이 조금만 향상돼도 수백만 달러의 비용 절감 효과
- 구글은 보그와 오메가를 15년 동안 비밀로 유지
- 2014년 구글 시스템을 통해 얻은 경험을 바탕으로 한 오픈소스 시스템인 '쿠버네티스'를 출시
인프라의 추상화
- 컨테이너 시스템에서 컨테이너 애플리케이션을 쉽게 배포, 관리하도록 돕는 소프트웨어 시스템
- 기본 인프라를 추상화해 개발 및 운영 팀의 개발, 배포, 관리를 단순화
- 모든 노드가 하나의 거대한 컴퓨터인 것처럼 수천개의 컴퓨터 노드에서 소프트웨어 애플리케이션을 실행
쿠버네티스의 장점
- 애플리케이션 배포 단순화
- 특정 베어메탈을 필요로 하는 경우(예: SSD/HDD)
- 하드웨어 활용도 극대화
- 클러스터의 주변에 자유롭게 이동하여 실행중인 다양한 애플리케이션 구성 요소를 클러스터 노드의 가용 리소스에 최대한 맞춰 서로섞고 매치
- 노드의 하드웨어 리소스를 최상으로 활용
- 상태 확인 및 자가 치유
- 애플리케이션 구성 요소와 실행되는 노드를 모니터링 하고 노드 장애 발생시 다른 노드로 일정을 자동으로 재조정
- 운영자는 정규 근무 시간에만 장애가 발생한 노드를 처리(일이 편해진다!)
- 오토스케일링
- 개별 애플리케이션의 부하를 지속적으로 모니터링할 필요 없이
- 자동으로 리소스를 모니터링하고 각 애플리케이션에서 실행되는 인스턴스 수를 계속 조정하도록 지시 가능
- 애플리케이션 개발 단순화
- 버그 발견 및 수정 (완전히 개발환경과 같은 환경을 제공하기 때문)
- 새로운 버전 출시 시 자동으로 테스트, 이상 발견 시 롤 아웃
개발자 돕기: 핵심 애플리케이션 기능에 집중
- 애플리케이션 개발자가 특정 인프라 관련 서비스를 애플리케이션에 구현하지 않아도 됨
- 쿠버네티스에 의존해 서비스 제공
- 서비스 검색, 확장, 로드 밸런싱, 자가 치유, 리더 선출 등
- 애플리케이션 개발자는 애플리케이션의 실제 기능을 구현하는 데 주력
- 인프라와 인프라를 통합하는 방법을 파악하는데 시간을 낭비할 필요 없음
운영 팀 돕기: 이 효과적으로 리소스를 활용
- 실행을 유지하고 서로 통신할 수 있도록 컴포넌트에 정보를 제공
- 애플리케이션이 어떤 노드에서 실행되는 상관 없음(신경 쓰지 않아도 됨)
- 언제든지 애플리케이션을 재배치 가능
- 애플리케이션을 혼합하고 매칭시킴으로써 리소스를 매칭
쿠버네티스 클러스터 아키텍처
- 쿠버네티스의 클러스터는 하드웨어 수준에서 많은 노드로 구성되며 두 가지 유형 나뉨
- 마스터 노드: 전체 쿠버네티스 시스템을 관리하고 통제하는 쿠버네티스 컨트롤 플레인을 관장
- 워커 노드: 실제 배포하고자 하는 애플리케이션의 실행을 담당
컨트롤 플레인
- 컨트롤 플레인에서는 클러스터를 관리하는 기능
- 단일 마스터 노드에서 실행하거나 여러 노드로 분할되고 복제돼 고가용성을 보장
- 클러스터의 상태를 유지하고 제어하지만 애플리케이션을 실행하지 않음
컨트롤 플레인의 구성요소
- 쿠버네티스 API 서버: 사용자, 컨트롤 플레인과 통신
- 스케줄러: 애플리케이션 예약(애플리케이션의 배포 가능한 각 구성 요소에 워커 노드를 할당)
- 컨트롤 매니저: 구성 요소 복제, 워커 노드 추적, 노드 장애 처리 등 클러스터 수준 기능을 실행
- 데이터 스토리지: etcd는 클러스터 구성을 지속적으로 저장하는 안정적인 분산
노드
- 워커 노드는 컨테이너화된 애플리케이션을 실행하는 시스템
- 애플리케이션에 서비스를 실행, 모니터링, 제공하는 작업은 다음과 같은 구성요소로 수행
- 컨테이너 런타임: 컨테이너를 실행하는 도커
- Kubelet: API 서버와 통신하고 노드에서 컨테이너를 관리
- 쿠버네티스 서비스(Kubernetes Service), 프록시(kube-proxy): 애플리케이션 간에 네트워크 트래픽을 분산 및 연결
쿠버네티스에서 애플리케이션 실행
- 쿠버네티스에서 애플리케이션을 실행 전
- 하나 이상의 컨테이너 이미지들을 패키지로 레지스트리에 푸시
- 쿠버네티스 API 서버에 애플리케이션의 디스크립션을 게시
- 디스크립션(YAML로 작성)
- 컨테이너 이미지 또는 애플리케이션 컴포넌트가 들어 있는 이미지가 존재
- 컴포넌트 간 관련성 및 노드 배치(동일 노드 또는 다른 노드) 정보 포함
- 각 컴포넌트의 실행 복제본 수를 지정
- 내부 클라이언트나 외부 클라이언트에 서비스를 제공하는 컴포넌트
- 단일 IP 주소로 노출해 다른 컴포넌트에서 검색
728x90
'개발강의정리 > DevOps' 카테고리의 다른 글
[데브옵스를 위한 쿠버네티스 마스터] 4. 쿠버네티스 핵심 개념 (0) | 2020.08.22 |
---|---|
[데브옵스를 위한 쿠버네티스 마스터] 3. 쿠버네티스 들어가기 (0) | 2020.08.22 |
[데브옵스를 위한 쿠버네티스 마스터] 1. Docker 요약 정리 (0) | 2020.08.17 |
[도커(Docker)의 이해] 4. 이미지 빌드 환경 만들기 (0) | 2019.10.07 |
[도커(Docker)의 이해] 3. 이미지 만들고 배포하기 (0) | 2019.10.07 |
댓글