728x90
Containers, Kubernetes, and Kubernetes Engine
- Compute Engine -- App Engine 둘 사이에 있는 Kubernetes Engine
- Iaas 와 PaaS 사이에 위치함 - Container에 대해 공부할것이다.
- IaaS에서 접근 : compute resource 를 하드웨어를 가상화 함으로써 공유할 수 있다.
- flexbilitiy 가 떨어지는 단점이 있다.
- VM 이 제일 작은 단위인데 OS가 몇 기가바이트 크기로 부팅하는데 몇 분이 걸릴 수 도 있다. - 서비스가 커져서 VM 전체를 scale out 하고 싶을 수 있다.
- PaaS 에서 접근 : 빈 VM 대신에 필요한 서비스들의 집합을 부여받는다.
- self-contained workload에 코드를 작성하고 dependent libraries를 포함 시킨다.
- 필요량이 증가할 경우 플랫폼은 무중단, 독립적으로 scale 된다.
- 밑단의 서버 아키텍쳐를 손대지 못하는 대신에 빠르게 scale 할 수 있다.
- 이때 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
- 쿠버네티스 : 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 : 쿠버네티스에서 배포 가능한 가장 작은 단위
- 클러스터 위에서 실행되는 프로세스라고 생각할 수 있다.
- application 의 한 부분일 수 도 있고 전체일 수 도 있다. - 하나의 pod당 하나의 container가 기본적이나 dependency가 강한 container들 끼리는 하나의 pod로 묶을 수 있다.
- 묶인 container들은 자동으로 네트워킹을 공유하며 공통의 스토리지 용량을 가진다
- pod 각각은 container를 위한 unique한 ip주소와 port들을 가지게 된다.
- pod 안의 container들은 localhost 네트워킹을 이용하기 때문에 node가 어디에 배포되던 상관이 없다.
- pod 안에 있는 container를 실행 하려면 "kubectl run"
- 위의 예시는 nginx 이미지를 실행한 것이다.
- deployment : 같은 pod 내에 있는 여러 복제품들을 뜻한다. 이것은 몇몇 node가 fail 해도 pod를 실행 시켜 준다.
- 실행되고 있는 pod를 보려면 "kubectl get pods"
- 기본적으로 클러스터 안에서만 접근할 수 있으나 외부에서 접근 하고 싶다면 load balancer를 연결할 수 있다.
- 연결 커맨드는 "kubectl expose" - 그러면 pod를 위한 고정 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를 수정한 뒤 쿠버네티스에 바뀐 버전을 전달하면 된다.
- 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"
- load 를 share 하고 service를 scale 할 수 있다.
- 이전에 만든 파이썬 application 을 nginx 대신 사용할 수 있다.
- application version을 업데이트하고 싶다면 어떻게 하지??
- 한방에 다 바꾸는건 위험하다. 그래서 update strategy가 필요하다.
- rolling update 를 사용하면 새로운 버전의 pod를 하나씩 만들어서 사용 가능해졌을때 이전 버전의 pod를 없앤다.
Introduction to Hybrid and Multi-Cloud Computing (Anthos)
- 컨테이너를 하이브리드 클라우드와 멀티 클라우드 아키텍쳐에 적용해 보자
- 일단 on-premise 시스템 아키텍쳐부터 한번 보자
- 분산 시스템을 위해 두개 이상의 네트워크 서버가 필요했다.
- 그리고 container 는 이런 workload를 마이크로 서비스로 쪼개는데 유용한 방법이 되었다.
- 여튼 containerized 되었든 아니던 workload는 회사 내의 데이터 센터에 있었다.
- 근데 리소스가 더 필요하면 또 서버를 주문해서 configure해야 했는데 이 작업은 짧게는 몇달 길게는 몇년이 걸린다.
- 바로 computing power가 필요하다면?
- lower cost 와 higher availability 가 필요하다면?
- 클라우드에서만 제공되는 서비스와 제품이 필요하다면?
- 그런데 on-premise network 에서 application을 돌리고 싶다면?
- 답은 하이브리드 클라우드 혹은 멀티 클라우드 아키텍쳐 입니닷
- 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
- 쉬운 마이크레이션과 개발 환경의 일관성을 위해 컨테이너를 사용한다.
- 쿠버네티스는 다양한 클라우드 제공업체의 컨테이너를 관리할 수 있다.
- GCP는 쿠버네티스 엔진에서 사용 가능한 안전하고 빠른 컨테이너 이미지 스토리지 서비스를 제공한다.
- pod는 함께 동작하는 container의 그룹이다.
- GCP는 컨테이너를 만드는 툴이 있는데 사용하지 않아도 된다.
- 쿠버네티스 엔진은 compute engine의 클러스터에서 실행된다.
728x90
'Cloud > Google Cloud Platform' 카테고리의 다른 글
GCP Fundamentals #7 - Developing, Deploying, andMonitoring in the Cloud (0) | 2020.05.21 |
---|---|
GCP Fundamentals #6 - Storage in the Cloud (0) | 2020.05.21 |
GCP Fundamentals #4 - Storage in the Cloud (0) | 2020.05.12 |
GCP Fundamentals #3 - Virtual Machines in the Cloud (0) | 2020.05.01 |
GCP Fundamentals #2 - Getting Started with GCP (0) | 2020.04.29 |
댓글