5. 클라우드의 컨테이너: Kubernetes 및 GKE

이대현·2024년 5월 20일
0

Cloud Computing

목록 보기
11/14

1. 컨테이너란?

컨테이너는 개발 및 배포 환경에서 유연성, 이식성, 확장성을 제공하며, 애플리케이션의 효율적인 관리를 가능하게 한다.

1.1. 정의

코드 및 소프트웨어를 실행하는 데 필요한 모든 것을 패키지로 묶은 가상화 기술.

  • 애플리케이션 코드와 함께 필요한 라이브러리, 종속성, 설정 파일 등을 포함하여 일관된 실행 환경을 제공하는 것이 특징이다.
  • 컨테이너는 가상 머신과 달리 OS 전체를 포함하지 않으며, 대신 동일한 OS 커널을 공유하는 독립적인 사용자 공간을 활용한다. 즉 컨테이너는 애플리케이션 수준에서 독립적인 유연성을 가진다.

1.2. 필요성

IaaS 등을 사용하면서 시스템을 개발자가 원하는대로 구성하고 빌드할 수 있게 됐지만, 동시에 바로 이 지점에서 컨테이너의 필요성이 등장한다. 애플리케이션의 수요가 증가하고 VM의 크기와 부팅 시간이 커질수록 확장성과 비용 문제 발생한다.

📌 즉, 유연성에는 비용이 따르며 컨테이너는 이를 해결해준다.

1.3. 장점

  • 빠른 생성 및 시작: 몇 번의 시스템 호출만으로 생성, 프로세스만큼 빠르게 시작.
  • 유연성: PaaS처럼 확장되면서도 IaaS와 거의 동일한 유연성 제공.
    • 호스트 시스템의 파일 시스템과는 독립적으로 존재하며 다른 컨테이너나 호스트 시스템과 서로 간섭 X
  • 이식성: 개발에서 프로덕션, 로컬에서 클라우드로 이동이 용이.
  • 효율성: 단일 호스트에서 수십 또는 수백 개의 워크로드 배포 가능.

1.4. 사용 사례

  • 웹 서버 확장: 컨테이너를 사용해 몇 초 만에 확장 가능.
  • 마이크로서비스: 각각의 기능을 담당하는 다수의 컨테이너로 애플리케이션을 모듈식으로 빌드 및 배포.
  • 자동 확장: 애플리케이션 수요 변화나 호스트 실패 시 컨테이너를 자동으로 확장하거나 축소, 시작하거나 중지.

2. Kubernetes

컨테이너는 애플리케이션과 그 종속성을 하나로 묶어, 어떤 환경에서도 일관되게 동작하게 한다. 파일 시스템과 하드웨어에 제한적으로 접근하고, OS를 가상화해서 가상 머신보다 가볍고 빠르게 실행된다.

클라우드에서는 컨테이너가 유연성과 효율성을 극대화한다.

Kubernetes를 사용하면 컨테이너화된 애플리케이션을 쉽게 관리하고 확장할 수 있다. Kubernetes는 컨테이너를 여러 호스트에 배포하고, 마이크로서비스로 확장하고, 쉽게 배포, 출시, 롤백할 수 있는 오픈소스 플랫폼이다.

2.1. 클러스터 (Node)

Kubernetes는 클러스터라는 노드 집합에 컨테이너를 배포하는 데 필요한 API 집합을 제공한다. 쿠버네티스 클러스터 시스템은 Control Plane(제어 영역)과 컨테이너를 실행하는 Node 집합으로 나뉘어. 노드는 머신과 같은 컴퓨팅 인스턴스를 나타내고, Kubernetes는 이를 통해 애플리케이션을 관리해.

2.2. 포드 (Pod)

포드는 Kubernetes에서 생성하고 배포할 수 있는 최소 단위로, 하나 이상의 컨테이너를 둘러싸는 wrapper(그룹)이다. 포드는 컨테이너에 고유한 네트워크 IP포트 집합을 제공하고, 컨테이너 실행 방법을 제어하는 옵션도 제공한다.

2.3. 배포

  • Kubernetes의 포드에서 컨테이너를 실행하는 방법은 포드 내부에서 실행되는 컨테이너로 배포를 시작하는 kubectl run 명령어를 사용하는 것이다.

  • 배포를 통해 포드의 복제본 그룹을 관리하고, 클러스터 외부에서 접근할 수 있도록 서비스를 설정할 수 있다. service는 포드 집합에 endpoint를 주어 외부에서 IP 주소를 통해 접근할 수 있게 만든다.

  • Kubernetes의 진정한 강점은 선언적 방식에서 나타난다. 원하는 상태를 구성 파일로 제공하면, Kubernetes가 이를 실현하는 것이다. 배포 구성 파일을 업데이트하고 적용하면, Kubernetes가 알아서 적절한 수의 복제본을 실행하기 때문에, 특정 노드에 문제가 생기더라도 포드가 계속 실행된다.

2.4. Google Kubernetes Engine (GKE)

GKE는 Google에서 호스팅하는 관리형 Kubernetes 서비스로, 여러 Compute Engine 인스턴스를 그룹화하여 클러스터를 형성한다. (환경을 제공)

  • 클러스터 생성 방법

    Google Cloud 콘솔 또는 Cloud SDK에서 제공하는 gcloud 명령어를 사용하여 GKE 클러스터를 만들 수 있다.

    gcloud container clusters create k1

3. Cloud Runs

지금까지는 Google Cloud를 소개하고 Cloud에서 가상 머신, 네트워크, 스토리지, e컨테이너`를 사용하는 것에 관한 옵션과 이점을 살펴보았고, 마지막으로 Cloud에서의 애플리케이션 개발에 대해 정리해볼 예정이다.

Cloud Run은 웹 요청 또는 Pub/Sub 이벤트를 통해 스테이트리스(Stateless) 컨테이너를 실행하는 관리형 컴퓨팅 플랫폼이다. 즉, 서버리스 환경에서 인프라 관리 작업이 필요 없어서 개발자가 애플리케이션 개발에 집중할 수 있음.

  • 기반 기술: Kubernetes 기반 개방형 API 및 런타임 환경인 Knative를 사용.

  • 호환성: Google Cloud, GKE, 또는 Knative가 실행되는 곳에서 관리 가능.

  • 고유한 HTTPS URL 제공: 컨테이너 이미지 배포 시 자동으로 HTTPS URL 반환.

3.1. 개발자의 Workflow

Cloud Run 개발자 워크플로는 직관적인 3단계 프로세스로 이루어진다.

  1. 애플리케이션 작성: 선호하는 프로그래밍 언어로 애플리케이션 작성, 웹 요청 수신 대기.

  2. 컨테이너 빌드 및 패키징: 애플리케이션을 컨테이너 이미지로 빌드 및 패키징.

    • Cloud Run에서는 컨테이너 이미지를 다음 두 곳에서 가져올 수 있다:

      1. Docker Hub

      2. Artifact Registry: Artifact Registry는 Google Cloud의 프라이빗 Docker 저장소

  3. 배포: Artifact Registry로 푸시된 컨테이너 이미지를 Cloud Run이 배포.

3.2. Cloud Run의 사용 사례

  • 서버리스 애플리케이션: 인프라 관리 대신 애플리케이션 빌드에 집중.
  • 유연성 제공: 컨테이너 기반 및 소스 기반 워크플로 모두 지원.
  • 소스 기반 워크플로: 소스 코드를 배포하면 Cloud Run이 알아서 빌드 및 패키징.

3.3. 언어 지원

  • 다양한 언어 지원: Java, Python, Node.js, PHP, Go, C++, Cobol, Haskell, Perl 등.
  • Linux 64비트 바이너리 실행: 웹 요청을 처리하는 애플리케이션 실행 가능.
profile
삽질의 기록들 👨‍💻

0개의 댓글