본문 바로가기
Cloud/Google Cloud Platform

GCP Fundamentals #5 - Containers in the Cloud

by HaningYa 2020. 5. 21.
728x90

 

[코스정보]

 

 

Cloud Engineering with Google Cloud 전문 자격증 | Coursera

Learn Cloud Engineering with Google Cloud 전문 자격증 from Google 클라우드. This program provides the skills you need to advance your career as a cloud engineer and recommends training to support your preparation for the industry-recognized Google Cloud ...

www.coursera.org


Containers, Kubernetes, and Kubernetes Engine

Introduction

  • Compute Engine -- App Engine 둘 사이에 있는 Kubernetes Engine 
    - Iaas 와 PaaS 사이에 위치함
  • Container에 대해 공부할것이다.

Iaas

  • IaaS에서 접근 : compute resource 를 하드웨어를 가상화 함으로써 공유할 수 있다.
    - flexbilitiy 가 떨어지는 단점이 있다.
    - VM 이 제일 작은 단위인데 OS가 몇 기가바이트 크기로 부팅하는데 몇 분이 걸릴 수 도 있다.
  • 서비스가 커져서 VM 전체를 scale out 하고 싶을 수 있다.

example

  • PaaS 에서 접근 : 빈 VM 대신에 필요한 서비스들의 집합을 부여받는다.
  • self-contained workload에 코드를 작성하고 dependent libraries를 포함 시킨다.
  • 필요량이 증가할 경우 플랫폼은 무중단, 독립적으로 scale 된다.
  • 밑단의 서버 아키텍쳐를 손대지 못하는 대신에 빠르게 scale 할 수 있다.
  • 이때 Container가 필요한 시점이다.

Container 두둥등장

  • PaaS 환경의 독립적인 워크로드의 Scalability와
  • IaaS 환경의 OS의 추상화 계층과 하드웨어를 Scalability를 위해 사용된다.
  • OS에서 프로세스는 실행중인 프로그램을 의미한다. 
  • Container는 새로운 프로세스를 시작하는것 만큼 빠르게 실행된다.
  • 이 속도는 완전히 새로운 OS의 인스턴스를 부팅하는것 보다 훨씬 빠르다.
  • Container와 Container run-time을 지원하는 OS만 있으면 된다.
  • 결국엔 container는 PaaS의 scale 환경을 제공하고, IaaS와 비슷한 flexibility를 제공하는 것이다.
  • 장점으론 코드를 portable 하게 해준다.
  • OS와 하드웨어를 black box로 생각해 staging production 등등 이리저리 옮겨다닐 수 있다.

예시

  • 여러개의 컨테이너를 가진 마이크로 서비스들을 구현하려 한다.
  • 컨테이너 안에서 코드들은 실행되고 network fabric을 통해 서로 통신한다.
  • 이런 방식으로 만들면 application을 더욱 modular 하게 구성할 수 있다.
  • application은 배포하기 쉽고, group of host와 독립적으로 scale 할 수 있다.

 

쿠버네티스 등장

  • 이런걸 가능하게 만들어 주는게 Kubernetes이다.
  • 제일 기본적인 container 이미지 포멧은 Docker에 의해 정의된 image 들이다.
  • Cloud Build 같은 다른 툴을 써도 된다.

예시 파이썬 앱

  • 이 파이썬 앱을 배포하려면 무엇이 필요할까
  • 파이썬 버전과 Flask의 버전 - Python's requirements.txt 파일로 control 한다.
    - Flask==0.12
    - uwsgi==2.0.15
  • 앱을 감싸주는 도커 파일을 정의한다.

파이썬 앱용 도커파일

  • requirement.txt 를 통해 dependency를 설치한다.

도커 빌드

  • 빌드하여 runnable image로 로컬 저장소에 저장한다.
  • docker run 을 통해 이미지를 실행한다.
  • container registry 에 업로드 하여 공유하거나 다운받는다.

  • 각각의 컨테이너는 OS를 따로 가지고 있지 않다.
  • 컨테이너는 결합도가 약하다. 왜냐하면 portable 하고 중요하지 않은 detail 을 추상화 한다.

Introduction to Kubernetes and GKE

Kubernetes Engine

  • 쿠버네티스 : opensource orchestrator for containers
    *오케스트레이션은 컴퓨터 시스템 및 소프트웨어의 자동화 된 구성, 조정 및 관리입니다.
  • manage and scale
  • 몇개의 유틸을 통해 허가받은 인원이 application 을 관리하고 scale 하도록 API를 제공한다.
    - kubctl
  • 클러스터라는 노드의 집합을 통해 container를 배포한다.
  • 클러스터는 마스터 컴포넌트로써 시스템을 통으로 관리하고 컨테이너에서 실행되는 노드의 집합을 관리한다.
  • 쿠버네티스에서 노드란 컴퓨팅 인스턴스를 뜻한다.
  • GCP 에서 노드는 compute engine에서 실행중인 vm을 뜻한다.
  • application set를 설명하고 어떻게 상호작용 할지 알려주면 쿠버네티스는 어떻게 해낼 것인지 알아낸다.
  • 쿠버네티스는 컨테이너화된 application을 만들기 쉽게 해준다.
  • 쿠버네티스 클러스터는 가지고 있는 하드웨어에 만들거나 아무 vm위에 만들 수 있는데 만드는 것과 관리하는게 귀찮을 것이다. 
  • 그래서 구글이 Kubernetes Engine을 제공한다!
  • GCP console 에서 "gcloud container clusters create k1" 하면 클러스터가 만들어 진다.
  • GCP에서 상태를 확인할 수 있다.

pod

  • pod : 쿠버네티스에서 배포 가능한 가장 작은 단위
    - 클러스터 위에서 실행되는 프로세스라고 생각할 수 있다.
    - application 의 한 부분일 수 도 있고 전체일 수 도 있다.
  • 하나의 pod당 하나의 container가 기본적이나 dependency가 강한 container들 끼리는 하나의 pod로 묶을 수 있다.
  • 묶인 container들은 자동으로 네트워킹을 공유하며 공통의 스토리지 용량을 가진다
  • pod 각각은 container를 위한 unique한 ip주소와 port들을 가지게 된다.
  • pod 안의 container들은 localhost 네트워킹을 이용하기 때문에 node가 어디에 배포되던 상관이 없다.

container 실행

  • pod 안에 있는 container를 실행 하려면 "kubectl run"
  • 위의 예시는 nginx 이미지를 실행한 것이다.
  • deployment : 같은 pod 내에 있는 여러 복제품들을 뜻한다. 이것은 몇몇 node가 fail 해도 pod를 실행 시켜 준다.
  • 실행되고 있는 pod를 보려면 "kubectl get pods"
  • 기본적으로 클러스터 안에서만 접근할 수 있으나 외부에서 접근 하고 싶다면 load balancer를 연결할 수 있다.
    - 연결 커맨드는 "kubectl expose" 
  • 그러면 pod를 위한 고정 IP를 할당해 줄 것이다.

고정 ip할당

  • service : 로드 밸런싱 하는데 쓰는 기본 단위
  • 네트워크 로드 밸런서로써 만들어 진다.
  • pod ip 주소를 쓰면되지 왜 service를 쓸까?
  • application이 프론트와 백엔드로 나눠져 있다고 생각해 봐라
  • pod들이 생성되고 삭제될때 그것들의 ip 주소들도 생성되고 삭제된다.
  • 그럴때 마다 프론트에서 바꿔주기 귀찮지
  • service가 안정된 엔드포인트를 제공해 준다.
  • scale deployment 명렁어 "kubectl scale", 전부 같은 고정된 하나의 주소로 제공된다.
  • 유용한 파라미터들로 오토스케일링을 구성할 수 있다.
    - CPU usage : 미니멈 10pod, 맥시멈 15 pod
    - 80퍼센트 capacity 일경우 스케일 업
  • scale 이나 expose 명령어보다 쿠버네틱스는 declarative하게 설정할 수 있다.
  • configuration file를 제공하여 쿠버네티스가 어떤 state가 되어야 하는지 제공할 수 있다.
  • 이 configuration file들이 관리 도구가 되는 것이다.
  • 수정하려면 configuration file를 수정한 뒤 쿠버네티스에 바뀐 버전을 전달하면 된다.

configuration file 예시

  • 3개의 nginx 복제본
  • selector field 에서 복제본을 어떻게 그룹화 할건지 나타낸다.
  • 이 그룹화는 공유되는 label을 통해 이루어 진다.
  • 만약 복제본을 3개가 아닌 5개를 만들고 싶다면 replicas :3 을 5로 바꿔주고 "kubectl apply" 명령어를 사용하면 된다.
  • 복제본의 상태를 보려면 "kubectl get replicasets" 
  • pod가 온라인인지 보려면 "kubectl get pods"
  • deployment 를 체크 하려면 "kubectl get deployments"
  • 외부 IP 와 서비스들이 정상 작동 중인건 "kubectl get services"

만들어진 GKE

  • load 를 share 하고 service를 scale 할 수 있다.
  • 이전에 만든 파이썬 application 을 nginx 대신 사용할 수 있다.
  • application version을 업데이트하고 싶다면 어떻게 하지??
  • 한방에 다 바꾸는건 위험하다. 그래서 update strategy가 필요하다.

rolling update

  • rolling update 를 사용하면 새로운 버전의 pod를 하나씩 만들어서 사용 가능해졌을때 이전 버전의 pod를 없앤다.

Introduction to Hybrid and Multi-Cloud Computing (Anthos)

on-premise system archetecture

  • 컨테이너를 하이브리드 클라우드와 멀티 클라우드 아키텍쳐에 적용해 보자
  • 일단 on-premise 시스템 아키텍쳐부터 한번 보자
  • 분산 시스템을 위해 두개 이상의 네트워크 서버가 필요했다.
  • 그리고 container 는 이런 workload를 마이크로 서비스로 쪼개는데 유용한 방법이 되었다.
  • 여튼 containerized 되었든 아니던 workload는 회사 내의 데이터 센터에 있었다.
  • 근데 리소스가 더 필요하면 또 서버를 주문해서 configure해야 했는데 이 작업은 짧게는 몇달 길게는 몇년이 걸린다.
  • 바로 computing power가 필요하다면? 
  • lower cost 와 higher availability 가 필요하다면?
  • 클라우드에서만 제공되는 서비스와 제품이 필요하다면?
  • 그런데 on-premise network 에서 application을 돌리고 싶다면?
  • 답은 하이브리드 클라우드 혹은 멀티 클라우드 아키텍쳐 입니닷

advantage of hybrid cloud
Authos

  • Anthos : hybrid and multi-cloud solution by google
    - 쿠버네티스에 있는 프레임 워크

하이브리드 클라우드 아키텍쳐 예시


  • 쿠버네티스 pod는 컨테이너들의 집합니다
  • 쿠버네티스 cluster는 쿠버네티스들이 workload를 조정할 수 있는 machine 그룹이다.
  • 쿠버네티스 엔진 클러스터는 compute engine의 리소스를 사용한다.
  • 구글은 쿠버네티스 엔진의 version을 주기적으로 업데이트 해준다.

실습

  • running containerized application
  • orchestrating from cluster
  • scaling from cluster
  • deploying using rollouts

https://www.coursera.org/learn/gcp-fundamentals/gradedLti/ObAyp/qwiklabs-getting-started-with-kubernetes-engine

 

Coursera | Online Courses & Credentials From Top Educators. Join for Free | Coursera

Learn online and earn valuable credentials from top universities like Yale, Michigan, Stanford, and leading companies like Google and IBM. Join Coursera for free and transform your career with degrees, certificates, Specializations, & MOOCs in data science

www.coursera.org


  • 쉬운 마이크레이션과 개발 환경의 일관성을 위해 컨테이너를 사용한다.
  • 쿠버네티스는 다양한 클라우드 제공업체의 컨테이너를 관리할 수 있다.
  • GCP는 쿠버네티스 엔진에서 사용 가능한 안전하고 빠른 컨테이너 이미지 스토리지 서비스를 제공한다.
  • pod는 함께 동작하는 container의 그룹이다.
  • GCP는 컨테이너를 만드는 툴이 있는데 사용하지 않아도 된다.
  • 쿠버네티스 엔진은 compute engine의 클러스터에서 실행된다. 
728x90

댓글