[GCP-4] Compute Engine

2022. 1. 12. 14:13카테고리 없음

0. 지난글

[GCP-1]구글 클라우드 기본 개념

https://ejtag.tistory.com/23

[GCP-2]구글 클라우드 실습 준비

https://ejtag.tistory.com/24

[GCP-3]구글 클라우드 IAM

https://ejtag.tistory.com/25

 

5. Compute Engine

5-1. compute engine이란?

GCP에서 제공하는 가상머신 서비스이다.

AWS의 EC2에 해당하는 서비스이다.

google clout platform에서 가장 기본적이면서 많이 쓰이는 인프라로, 네트워크에 연결된 가상 서버를 제공해준다.

다양한 OS, 메모리, 디스크 형태를 제공한다.

소프트웨어 업데이트같은 호스트 시스템 이벤트가 발생하더라도, VM 인스턴스가 계속 실행될 수 있게 해주는 실시간 이전 기능 제공한다.

compute engine은 google kubernetes Engine을 통해서 compute engine VM에서 도커 컨테이너를 실행 및 관리, 조정할 수 있다.

5-2. VM 인스턴스

VM 인스턴스는 공개 이미지뿐만아니라, 사용자 커스텀 이미지도 실행가능하다.

각각의 인스턴스는 GCP 프로젝트에 속하며, 하나의 프로젝트는 여러개의 인스턴스를 가질 수 있다.

프로젝트에는 최대 5개의 VPC 네트워크를 가질 수 있고, compute engine 인스턴스는 하나의 VPC 네트워크에 속하게 된다. 동일한 네트워크 안에 위치한 인스턴스들은 로컬 영역 네트워크 프로토콜로 서로 통신할 수 있다.

===========================================================================

* VPC 란?

    - GCP 리소스를 위한 관리형 네트워킹 기능을 제공
    - 실제 네트워크와 동일한 방식으로 작동
    - 데이터 센터의 지역 가상 서브넷으로 구성
    - 글로벌 광역 네트워크로 연결된 글로벌 리소스

* VPC 특징

1. 연결된 라우터와 방화벽 규칙을 포함한 전역 리소스이다.
2. 방화벽 규칙은 인스턴스에서 송수신 되는 트래픽을 제어할 수 있다.
3. 서브넷은 지역(Region) 리소스로, 각 서프벳은 CIDR을 이용해 IP주소 범위 정의
4. 내부 IP 주소가 있는 instances는 Google API 및 서비스와 통신 가능
5. 네트워크 관리는 IAM을 사용해 관리가 가능
6. VPC 공유를 이용하면 VPC 네트워크를 공용 Host project에 유지할 수 있음
7. VPC 피어링으로 VPC 네트워크를 다른 project or organization의 다른 VPC 네트워크에 연결 가능
8. Cloud VPN이나 Interconnect 이용하면 온프레미스 환경이나 타 벤더의 클라우드 서비스를 연결 할 수 있는 하이브리드 환경 지원
9. VPC 네트워크는 IPv4 유니 캐스트 트래픽만 지원
10. 각 프로젝트는 사전 정의된 default 네트워크로 시작하며 원하면 커스텀을 통한 네트워크도 가능

* VPC와 서브넷

- 각 VPC 네트워크는  반드시 하나 이상의 서브넷을 가진다. 따라서, VPC 네트워크 IP 주소 범위가 서브넷에 의해 결정된다. 

- 서브넷은 크게 2가지 모드로 생성이 되는데,

     1. 자동모드 - 네트워크가 생성될 때마다 서브넷이 자동 생성 -> 서브넷의 IP범위가 겹치지 않음

     2. 커스텀모드 - 사용자가 직접 서브넷과 IP범위 설정 -> 서브넷의 IP범위가 겹칠 수도 있음

- 서브넷은 Region(지역) 객체이므로 리소스에 의해 선택한 Region에 따라 결정된다. Default는 자동모드 네트워크로 시작

참고 : https://techblog-history-younghunjo1.tistory.com/21

===========================================================================

인스턴스만들때, 컨테이너를 사용해 만들 수 있는 옵션 지원하여, 인스턴스를 만들때 도커 이미지로 시작할 수 있다.

 

5-3. 머신 유형

머신유형이란 메모리, vCPU, 디스크 등을 포함하여 인스턴스에 제공할 수 있는 가상화된 하드웨어 리소스 모음을 지칭한다.

 

5-4. 실시간 이전(Live Migration)

소프트웨어 업데이트같은 호스트 시스템 이벤트가 발생하더라도, VM 인스턴스가 계속 실행될 수 있게 해주는 실시간 이전 기능 제공한다. 동일 영역에서 실행 중인 또 다른 호스트로 실시간 이전하는 개념이다. 이때, VM의 내부 및 외부 IP주소, 인스턴스 메타 데이터, 블록 Repository 데이터 및 볼륨, OS 및 애플리케이션 상태, 네트워크 설정, 네트워크 연결 등을 포함하여 모든 VM 속성 및 특성이 유지된다.

 

5-5. 선점형 인스턴스(Preemptible VM Instances)

GCP 내에서 아무도 사용하고 있지 않은 리소스를 사용함으로써 일반 인스턴스보다 훨씬 저렴한 가격으로 실행할 수 있는 인스턴스이다.

선점형 인스턴스의 제약사항

- 시스템 이벤트 발생시 인스턴스 언제든 종료 가능

- 언제나 24시간 인스턴스 실행 후 종료

- 사용하지 못할때도 있음

- 실시간 이전 지원 안함

- google compute engine SLA에서 제외됨

 

5-6. 인스턴스 템플릿

VM 인스턴스를 만드는데 사용하는 리소스이다.

인스턴스 템플릿은 머신 유형, 부팅 디스크 이미지 또는 컨테이너 이미지, 영역, 라벨, 그외의 속성 등을 이용하여 템플릿을 만들고, 이를 통해서 관리형 인스터스 그룹이나 개별 VM 인스턴스를 만들 수 있다.

추후 인스턴스 템플릿 변경은 불가능 하다.

인스턴스 템플릿 옵션 중 "영역 리소스"를 지정하여 해당 템플릿 사용 영역을 제한할 수 있다.

인스턴스 템플릿을 만들어 동일한 구성의 인스턴스를 여러개 만들 수 있다.

 

5-7. 인스턴스 그룹

인스턴스들의 모임

5-7-1. 관리형 인스턴스 그룹

인스턴스 템플릿을 사용하여 동일한 인스턴스 그룹을 만들 수 있다.

- 관리형 인스턴스 그룹은 오토 스케일링을 지원한다.

===========================================================================

* 오토 스케일링이란

 오토스케일링(Auto Scaling)은 클라우드의 유연성을 돋보이게 하는 핵심기술로 CPU, 메모리, 디스크, 네트워크 트래픽과 같은 시스템 자원들의 메트릭(Metric) 값을 모니터링하여 서버 사이즈를 자동으로 조절합니다. 

참고 : https://www.samsungsds.com/kr/insights/auto_scaling.html

===========================================================================

- 관리형 인스턴스 그룹은 자동 복구 정책 설정을 지원한다. 그래서 애플리케이션이 관리형 인스턴스 그룹에 제대로 응답하는지 주기적으로 확인하고, 정상적으로 응답하지 않으면 인스턴스가 자동으로 다시 생성된다.

- 관리형 인스턴스 그룹은 부하 분산 서비스를 지원한다. 로드 밸런서를 붙여 그룹의 모든 인스턴스에 트래픽을 분산할 수 있다.

- 관리형 인스턴스 그룹의 종류 

1) 영역 관리형 인스턴스 그룹 : 단일 영역(zone)에 인스턴스 배포

2) 리전 관리형 인스턴스 그룹 : 동일 리전 내 여러 영역(zone)에 배포하여 서비스 부하를 여러 영역에 분산시켜 보다 높은 가용성 제공

5-7-2. 비관리형 인스턴스 그룹

임으로 다른 구성을 가진 인스턴스를 그룹에 추가하거나 제거할 수 있다.

대신 오토 스케일링, 자동 복구, 롤링 업데이트 지원, 인스턴스 템플릿 사용 서비스를 제공하지 않는다.

 

5-8. 전역(Global), 영역(Region), 지역(zone)

5-8-1. 전역 리소스 (Global resources)

전역 리소스는 동일한 프로젝트 내의 모든 영역에 있는 모든 리소스가 액세스 할 수 있다.

전역 리소스 종류

- 주소 (address) : 전역 정적 외부 IP 주소

- 이미지 (images)

- 스냅샷 (snapshots)

- 인스턴스 템플릿 (instance templates)

- VPC 네트워크 (VPC network)

- 방화벽 (firewalls)

- 경로 (routes)

- 전역 작업 (global operations)

5-8-2. 지역 리소스(Region resources)

지역 리소스는 동일한 지역 내의 모든 리소스가 액세스할 수 있다.

지역 리소스 종류

- 주소 : 지역 고정 외부 IP 주소

- 서브넷

- 지역 관리형 인스턴스 그룹 : 여러 영역에 걸쳐 있는 동종 인스턴스의 모음

- 지역 영구 디스크 : 동일한 지역 내의 두 영역 간에 데이터를 영구 저장하고 복제할 수 있다.

- 지역 작업 : 지역 내에 있는 리소스에서 작업을 이행하는 경우 해당 작업이 지역별 작업으로 간주된다.

5-8-3. 영역 리소스(Zone resources)

영역 리소스는 영역에서 호스팅 되는 리소스이다.

영역 리소스 종류

- 인스턴스

- 영구 디스크 : 동일한 영역에 있는 인스턴스에만 디스크를 연결할 수 있다.

- 머신 유형 

- 영역 관리형 인스턴스 그룹

- 영역별 작업

 

[실습5.1 - compute engine 인스턴스 생성]

메뉴 > Compute Engine > VM 인스턴스
인스턴스 만들기 클릭
머신유형 n1-standar-1로 선택
부팅디스크 ubuntu 18.04 LTS / 표준 영구디스크 / 10GB 선택
권한과 네트워크 제한을 풀기 위해 위와 같이 설정

위와 같이 설정 후 만들기를 누르면 아래와 같이 인스턴스가 생성됨

연결 > 브라우저 창에서 열기 클릭한다.

일반 터미널과 동일하게 명령을 내릴 수 있다.

 

[실습5.2 - SSH로 VM에 접속하기]

로컬 터미널에서 ssh 명령어로 compute engine의 VM에 접속하는 방법을 알아보자.

1. 로컬 터미널을 열어서 RSA키 만들기

명령어 : ssh-keygen -t rsa -C "구글계정"

2. 키가 저장된 위치(~/.ssh)로 이동해서 방금 만들어진 키의 공개키를 cat 명령어로 읽어 복사한다.

3. 메뉴 - compute engine - 메타데이터 로 접근한다.

3. 상단에 수정 클릭해 하단 +항목추가를 클릭해 아까 복사해놨던 키를 입력한다.

4. 메뉴 - compute engine - vm 인스턴스 메뉴에 접근해 외부 IP 주소를 복사한다.

(trobble shooting) 키 다시 만들기

접속 성공

 

[실습5.3 - 선점형 인스턴스 만들기(Preemptible Instance)]

Compute Engine > VM 인스턴스 메뉴 접근 > 인스턴스 만들기
필요한 설정들을 한 후 제일 아래 네트워킹, 디스크, 보안, 관리, 단독 테넌시 클릭

선점형 인스턴스는 유후ㅠ한 리소스를 사용하기 때문에 저렴한 대신에 '24시간'이 지나면 강제 종류 될 수 있다.

그 종료될 때를 대비해 "종료 스크립트"를 위와 같이 작성해 둔것이다. 종료스크립트는 아래와 같은 과정을 통해 실행된다.

- 스크립트 파일을 인스턴스로 복사한다.

- 스크립트 파일에 실행 권한을 부여한다.

- 인스턴스가 종료되면 스크립트 파일을 실행한다.

가용성 정책 부분에 선점 기능을 사용으로 변경한다.
선점형 인스턴스가 일반 인스턴스와 똑같이 생성된다.

[실습5.4 - 인스턴스 스냅샷 만들기]

compute engine > 스냅샷 > 스냅샷 만들기 메뉴에 접근한다.
소스 디스크를 선택하고 스냅샷을 만든다.
스냅샷이 만들어 졌다.

[실습5.5 - 스냅샷으로 인스턴스 만들기]

compute engine > VM 인스턴스 > 인스턴스 만들기 메뉴에 접근한다.
부팅디스크쪽에 변경 버튼을 눌러 스냅샷 메뉴로 접근한다.
아까 만든 스냅샷으로 선택
instance-2의 스냅샷으로 만들었던 instance-3이 만들어졌다.

[실습5.6 - Marketplace에서 인스턴스 만들기]

GCP marketplace : 바로 사용할 수 있게 설정까지 마친 이미지를 바로 이용할 수 있는 곳이다.

메뉴 > marketpalce 접근한다.
nginx를 검색한다.
배포 버튼 클릭한다.

[실습5.7 - 맞춤 이미지 만들기(스냅샷)]

실습5.4에서 만들었던 스냅샷으로 맞춤 이미지를 만들예정이다.

compute engine > 이미지 > 이미지 만들기에 접근해서 소스를 스냅샷으로 바꾸고 소스스냅샷에서 5.4에서 만든 snashot-1을 클릭한다.
이미지가 만들어짐

이렇게 스냅샷을 통해 이미지를 만들어 놓으면, 해당 이미지로 "인스턴스"나 "인스턴스 템플릿"을 만들 수 있다.

 

[실습5.8 - 인스턴스 템플릿 만들기]

compute engine > 인스턴스 템플릿 > 인스턴스 템플릿 만들기 > 부팅디스크 변경 메뉴에 접근해 커서텀 이미지쪽에서 프로젝트 선택 후에 5.7에서 만든 이미지를 선택하고 만들기를 클릭한다.
인스턴스 템플릿이 만들어졌다. 이를 이용해 인스턴스와 인스턴스 그룹을 선택할 수 있다.

[실습5.7 - 인스턴스 그룹 만들기 (오토 스케일링 적용하기)]

인스턴스 그룹을 만들면 자동으로 오토 스케일링이 지원되어 별도 설정을 하지 않아도 된다.

메뉴 > compute engine > 인스턴스 그룹 > 인스턴스 그룹 만들기 메뉴에 접근한다.

인스턴스 그룹을 만들때 체크사항

- 위치 : 단일영역 - 인스턴스들이 한 영역(zone)에서 생성이 되기 때문에 지연시간이 조금이라도 늘어나는것 방지한다.

- 인스턴스 템플릿 : 이전 실습에서 생성한 인스턴스 템플릿 지정(instance-template-1)

- 관리형 인스턴스 그룹(좌측메뉴) : 관리형 인스턴스 그룹은 오토 스케일링 지원

오토스케일링 범위

오토 스케일링 할 인스턴스 수는 1~10개 로 지정되어있다.

만들기를 하면 인스턴스 그룹이 생긴다.
현재 해당 인스턴스 그룹에 해당하는 인스턴스는 1개이지만 부하가 늘어나면 여러개로 된다.