반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 모던 자바 인 액션
- 다리를 지나는 트럭
- 스프링 스케쥴러
- 크론 표현식
- H-index
- @Data
- 전화번호 목록
- kubenetes
- @Setter
- 롬복 어노테이션
- @configuration
- 프로그래머스
- 가장 큰 수
- 커링
- K번째수
- Java
- 알고리즘
- @Getter
- 코딩 테스트
- 기능개발
- @EnableScheduling
- 스택/큐
- 고차원 함수
- 해시
- 쿠버네티스
- 영속 자료구조
- 루씬 인 액션
- 정렬
- 검색 기능 확장
- 완주하지 못한 선수
Archives
- Today
- Total
Today I Learned
[쿠버네티스 인 액션] 1. 쿠버네티스 소개 (1) 본문
728x90
1장에서 다루는 내용
- 최근 소프트웨어의 개발과 배포의 변화 이해
- 애플리케이션을 격리하고 컨테이너를 사용해 실행 환경 차이 줄이기
- 쿠버네티스에서 사용되는 컨테이너와 도커의 이해
- 쿠버네티스로 개발자와 시스템 관리자의 작업 간소화하기
쿠버네티스 : 조종사, 조타수(선박의 핸들을 잡고 있는 사람)를 뜻하는 그리스어
쿠버네티스의 장점
- 개발자가 모든 유형의 애플리케이션을 배포하고 실행할 수 있는 간단한 플랫폼을 제공한다.
- 개별 애플리케이션은 쿠버네티스가 관리하고 시스템 관리자는 쿠버네티스와 나머지 인프라를 감독하도록 한다.
- 하드웨어 장애 발생 시 애플리케이션을 모니터링하고 스케줄링을 조절할 수 있게 도와준다.
- 하드웨어 인프라를 추상화하고 데이터 센터 전체를 하나의 거대한 컴퓨팅 리소스로 제공한다.
1.1 쿠버네티스와 같은 시스템이 필요한 이유
1.1.1 모놀리스 애플리케이션에서 마이크로서비스로 전환
모놀리스 애플리케이션의 단점
- 전체가 하나의 운영체제 프로세스로 실행되기 때문에 하나의 개체로 개발, 배포 관리되어야 한다.
- 시간이 지남에 따라 구성 요소 간의 경계가 불분명해지고 상호 의존성이 커지면서 전체 시스템의 복잡성이 증가한다.
- 수평적으로 확장하기 어렵거나 불가능하다.
마이크로서비스로 애플리케이션 분할
- 모놀리스 애플리케이션을 마이크로서비스라는 독립적으로 배포할 수 있는 구성요소로 분할해야 한다.
- 각 마이크로서비스는 독립적으로 실행되며 단순한 인터페이스(API)로 다른 마이크로서비스와 통신한다.
마이크로서비스 확장
- 마이크로서비스는 리소스가 더 필요한 서버만 별도로 확장할 수 있다.
마이크로서비스 배포
- 구성 요소가 많아지면 배포 조합 수 뿐만 아니라 구성 요소 간의 상호 종속성 수도 많아져서 배포 관련 결정이 점점 어려워진다.
- 마이크로서비스는 여러 프로세스와 시스템에 분산되어 있기 때문에 실행 호출을 디버그하고 추적하기 어렵다.
환경 요구 사항의 다양성
- 독립적으로 개발, 배포되기 때문에 구성 요소 간 종속성의 차이가 발생할 수 있다.
- 동일 호스트에 배포해야하는 구성 요소가 많을 수룩 모든 요구사항을 충족시키기 위한 종속성 관리가 더 어려워진다.
1.1.2 애플리케이션에 일관된 환경 제공
- 애플리케이션을 실행하는 환경은 각각 다르며, 개발과 프로덕션 환경 사이의 차이 뿐만 아니라 각 프로덕션 머신 간의 차이도 있다.
- 개발과 프로덕션이 정확히 동일한 환경에서 실행되어 운영체제, 라이브러리, 시스템 구성, 네트워킹 환경, 기타 모든 것이 동일한 환경을 만들 수 있다면 이상적일 것이다.
- 가능하다면 기존 애플리케이션에 영향을 주지 않고 동일한 서버에 애플리케이션을 추가할 수 있는 기능을 원할 것이다.
1.1.3 지속적인 배포로 전환: 데브옵스와 노옵스
데브옵스의 장점
- 개발자, QA, 운영 팀이 전체 프로세스에서 협업하는 작업 방식을 데브옵스(DevOps)라고 부른다.
- 개발자가 프로덕션 환경에서 애플리케이션 실행에 관여하게 되면, 운영팀이 애플리케이션을 유지하면서 직면하는 문제가 무엇인지 더 잘 이해할 수 있으며 사용자의 피드백을 빠르게 반영할 수 있다.
- 개발자가 운영 담당자를 기다리지 않고 직접 배포하여 더 자주 릴리스할 수 있다.
개발자와 시스템 관리자 각자가 최고로 잘하는 것을 하게 하는 것
- 하드웨어 인프라를 전혀 알지 못하더라도 운영 팀을 거치지 않고 개발자가 애플리케이션을 직접 배포하는 방식을 노옵스(NoOps)라고 한다.
- 쿠버네티스를 통해 하드웨어를 추상화하고 이를 애플리케이션 배포, 실행을 위한 플랫폼으로 제공할 수 있다.
- 개발자는 시스템 관리자의 도움없이 애플리케이션을 구성, 배포할 수 있게 된다.
- 시스템 관리자는 애플리케이션을 알 필요 없이 인프라를 유지하고 운영하는데 집중할 수 있다.
1.2 컨테이너 기술 소개
1.2.1 컨테이너 이해
- 애플리케이션의 각 구성요소에 전용 가상머신을 제공하고 고유한 운영체제 인스턴스를 제공해 환경을 격리할 수 있다.
- 하지만 구성 요소가 점점 작아지고 많아지면 각 구성 요소마다 가상머신을 제공하기위한 하드웨어 리소스가 부족해진다.
- 점점 더 많아지는 가상머진은 인적 자원도 낭비된다.
리눅스 컨테이너 기술로 구성 요소 격리
- 리눅스 컨테이너는 동일한 호스트 시스템에서 여러 개의 서비스를 실행할 수 있으며 동시에 서로 다른 환경을 만들어줄 뿐만 아니라 가상머신에 비해 오버헤드도 훨씬 적다.
- 프로세스가 별도의 운영체제에서 실행되는 가상 머신과 달리 호스트 운영체제 내에서 실행된다.
컨테이너와 가상머신 비교
- 컨테이너는 동일한 하드웨어에서 더 많은 수의 소프트웨어 구성 요소를 실행할 수 있다.
- 가상머신은 시스템 프로세스를 위한 추가 컴퓨팅 리소스가 필요한 반면, 컨테이너는 호스트 OS 내에서 실행되므로 애플리케이션이 소비하는 리소스만 필요하다.
- 가상머신은 각 애플리케이션 별로 구성하기에 리소스가 부족하기 때문에 그룹으로 묶어 배포하는 경우가 있는 반면, 컨테이너는 애플리케이션 마다 하나의 컨테이너를 가질 수 있다.
- 가상머신은 각 가상머신이 자체 리눅스 커널을 실행해 완전한 격리를 제공하는 반면, 컨테이너는 동일한 커널을 호출함으로 보안 위험이 발생할 수 있다.
컨테이너 격리를 가능하게하는 메커니즘 소개
- 리눅스 네임 스페이스 : 각 프로세스가 시스템(파일, 프로세스, 네트워크 인터페이스, 호스트명 등)에 대한 독립된 뷰만 볼 수 있도록 한다.
- 리눅스 컨트롤 그룹 : 프로세스가 사용할 수 있는 리소스(CPU, 메모리, 네트워크 대역폭 등) 의 양을 제한한다.
리눅스 네임 스페이스로 프로세스 격리
- 프로세스를 실행할 때 해당 네임 스페이스 중 하나에서 실행되며, 프로세스는 동일한 네임스페이스 내에 있는 리소스만 볼 수 있다.
- 여러 종류의 네임 스페이스가 있기 때문에 프로세스는 여러 네임 스페이스에 속할 수 있다.
- 각 네임스페이스는 특정 리소스 그룹을 격리하는 데 사용된다.
- 네임스페이스의 종류
- 마운트(mnt)
- 프로세스 ID(pid)
- 네트워크(net)
- 프로세스 간 통신(ipc)
- 호스트 도메인 이름(uts)
- 사용자 ID(user)
프로세스 가용 리소스 제한
- 프로세스의 리소스 사용을 제한하는 리눅스 커널 기능인 cgroups로 이뤄진다.
- 프로세스는 설정된 양 이상의 CPU, 메모리, 네트워크 대역폭 등을 사용할 수 없다.
1.2.2 도커 컨테이너 플랫폼 소개
- 도커는 애플리케이션 뿐만 아니라 라이브러리, 여러 종속성, 전체 운영체제 파일시스템까지도 프로비저닝하는 데 사용할 수있는 패키지로 만들어준다.
- 도커로 패키징된 애플리케이션을 실행하면 함께 제공된 파일 시스템 내용을 정확하게 볼 수 있으며, 실행중인 서버 환경에 관계없이 동일한 파일을 볼 수 있다.
- 리눅스 컨테이너 기술로 가상머신과 거의 동일한 수준의 격리를 제공하며, 가상머신 이미지에 비해 훨씬 작은 컨테이너 이미지를 사용한다.
- 도커 기반 컨테이너 이미지는 여러 이미지에서 공유되고 재사용될 수 있는 레이어로 구성되어 있다. 따라서 동일한 레이어를 포함하는 다른 컨테이너 이미지를 실행할 때는 특정 이미지만 추가로 다운로드하면 된다.
도커 개념 이해
- 이미지 : 애플리케이션과 해당 환경을 패키지한 것. 애플리케이션에서 사용할 수 있는 파일시스템과 이미지가 실행될 때 실행되어야 하는 실행파일 경로 같은 메타데이터가 포함되어 있다.
- 레지스트리 : 도커 이미지를 저장하고 공유할 수 있는 저장소이다. 빌드하는 컴퓨터에서 이미지를 실행하거나 이미지를 레지스트리로 push한 다음 다른 컴퓨터로 pull 할 수 있다. 공개 레지스트리와 비공개 레지스트리가 있다.
- 컨테이너 : 도커 기반 컨테이너 이미지에서 생성된 일반적인 리눅스 컨테이너. 호스트에서 실행 중인 다른 프로세스와 완전히 격리되어 있으며, 프로세스에 할당된 리소스 양만 액세스하고 사용할 수 있다.
도커 이미지의 빌드, 배포, 실행
- 개발자는 이미지를 만들어 레지스트로 푸시한다.
- 이미지는 레지스트리에 접근할 수 있는 모든 사람이 사용할 수 있으며 도커가 실행되는 다른 컴퓨터로 이미지를 가져와 실행할 수 있다.
- 도커는 이미지를 기반으로 격리된 컨테이너를 만들고 이미지의 일부로 지정된 바이너리 실행파일을 실행한다.
가상머신과 도커 컨테이너 비교
- 가상머신에서 실행될 때와 컨테이너로 실행될 때 모두 애플리케이션 A, B는 동일한 바이너리, 라이브러리에 접근할 수 있다.
- 가상머신에서는 두 애플리케이션 모두 동일한 파일 시스템에서 실행되므로 의심할 여지가 없다.
- 그러나 각 컨테이너는 격리된 자체 파일시스템이 있다고 했는데 어떻게 같은 파일을 공유할 수 있을까?
이미지 레이어의 이해
- 도커 이미지는 레이어로 구성되어 있다. 모든 도커 이미지는 다른 이미지 위에 빌드되며 두 개의 다른 이미지는 동일한 부모 이미지를 사용할 수 있으므로 각 이미지에는 동일한 레이어가 포함될 수 있다.
- 각 레이어는 동일 호스트에서 한번만 저장된다. 즉, 배포를 효율적으로 할 뿐만 아니라 이미지의 스토리지 공간을 줄이는 데도 도움을 준다.
- 컨테이너 이미지 레이어는 읽기 전용이며 컨테이너가 실해될 때 이미지 레이어 위에 새로운 쓰기 가능한 레이어가 만들어진다.
- 컨테이너의 프로세스가 기본 레이어 중 하나에 있는 파일에 쓰면 전체 파일의 복사본의 최상위 레이어에 만들어지고 프로세스는 복사본에 쓴다.
- 따라서 동일한 기본 레이어를 기반으로 한 두 개의 컨테이너는 동일한 파일을 읽을 수 있지만 변경 사항은 각각 저장된다.
컨테이너 이미지의 제한적인 이식성 이해
- 호스트에서 실행되는 모든 컨테이너가 호스트의 리눅스 커널을 사용한다는 사실과 관련해 주의할 것이 하나 있다.
- 가상머신은 자체 커널을 사용하기 때문에 이런 제약이 없지만 컨테이너화된 애플리케이션은 특정 커널 버전이 필요하다면 모든 시스템에서 작동하지 않을 수 있다.
- 커널 뿐만 아니라 특정 하드웨어 아키텍처용으로 만들어진 컨테이너화된 애플리케이션은 해당 아키텍처 시스템에서만 실행될 수 있다.
- x86 아키텍처용으로 만들어진 애플리케이션은 ARM 기반 컴퓨터에서 컨테이너화 할 수 없으며, 여전히 가상머신이 필요하다.
1.2.3 도커 대안으로 rkt 소개
- 도커가 성공한 뒤 컨테이너 형식과 런타임에 관한 개발된 업계 표준을 만들기 위해 OCI(Open Container Initiative)가 탄생헀다.
- rkt도 컨테이너를 실행하기 위한 플랫폼이며 보안, 결합성, 공개 표준 준수에 중점을 준다. OCI 컨테이너 이미지 형식을 사용하며 일반 도커 컨테이너 이미지를 실행할 수도 있다.
- 쿠버네티스는 도커 기반 컨테이너만을 위해 특별이 만들어진 컨테이너 오케스트레이션 시스템이 아니며, rkt도 지원한다.
- 이 책을 통해 쿠버네티스의 본질이 컨테이너 오케스트레이션이 아님을 알게 될 것이다.
728x90
'쿠버네티스' 카테고리의 다른 글
[쿠버네티스 인 액션] 3. 파드: 쿠버네티스에서 컨테이너 실행 (1) (0) | 2022.08.05 |
---|---|
[쿠버네티스 인 액션] 2. 도커와 쿠버네티스 첫걸음 (3) (0) | 2022.08.01 |
WARNING: the gcp auth plugin is deprecated in v1.22+, unavailable in v1.25+; use gcloud instead. 해결 (1) | 2022.08.01 |
[쿠버네티스 인 액션] 2. 도커와 쿠버네티스 첫걸음 (1) (0) | 2022.07.15 |
[쿠버네티스 인 액션] 1. 쿠버네티스 소개 (2) (0) | 2022.07.15 |
Comments