GKE (Google Cloud Study Jam) : Google Kubernetes Engine으로 설계하기: Foundation

LEE EUI JOO·2023년 7월 19일
0

GCP

목록 보기
1/7

1. Container

대규모로 쿠버처럼 컨테이너를 오케스트레이션하는 방법은 제공하지 않음. Google Cloud Build 를 사용하여 Docker 형식의 컨테이너 이미지를 만들 수 있음.

하지만, 컨테이너는 Linux의 본질적이고 원시적인 기능이 아닌 대신에 워크로드를 격리하는 기능은 여러 기술의 구성에서 파생된다.

  • Linux Process
    • 각 리눅스 프로세스에는 다른 모든 프로세스와 별개인 고유한 가상 메모리 주소 공간이 있다.
    • 빠르게 생성되고 파괴됨

컨테이너는 Linux namespace를 사용하여 애플리케이션이 볼 수 있는 프로세스 ID 번호, Directory Tree ,IP Addr 등을 제어한다.

하지만, Linux 네임스페이스는 쿠버 네임스페이스와 같지 않다. 컨테이너는 cgroup을 사용하여 애플리케이션이 사용할 수 있는 CPU 시간, 메모리, I/O대역폭 및 기타 리소스의 최대 소비량을 제어할뿐더러 유니온 파일 시스템을 사용하여 애플리케이션을 효율적으로 캡슐화하고 말끔한 최소한의 레이어 집합으로 종속성을 제거한다.

그럼 GCP는 이미지를 어떻게 빌드하는데?


2. Google Cloud Build (IAM 과 통합된 컨테이너 빌드를 위한 관리형 서비스)

Cloud Source Repositories를 비롯한 여러 코드 저장소 또는 GitHub 및 Bitbucket과 같은 git 호환 저장소에서 빌드용 소스 코드를 검색할 수 있음

예를 들어 빌드 단계를 구성하여 종속성을 가져오고, 소스 코드를 컴파일하고, 통합 테스트를 실행하거나 Docker, Gradle 및 Maven과 같은 도구를 사용할 수 있으며, Cloud Build의 각 빌드 단계는 Docker 컨테이너에서 실행된다.

1. API 사용

  • API 활성화
    • Cloud Build
    • Container Registry


2. DockerFile 및 Cloud Build로 컨테이너 빌드

  • Cloud Shell Enabled
student_03_b958245e319e@cloudshell:~ (qwiklabs-gcp-01-312d5af1a4e8)$ nano quickstart.sh
student_03_b958245e319e@cloudshell:~ (qwiklabs-gcp-01-312d5af1a4e8)$ vi quickstart.sh 
student_03_b958245e319e@cloudshell:~ (qwiklabs-gcp-01-312d5af1a4e8)$ cat quickstart.sh 
#!/bin/sh
echo "Hello, world! The time is $(date)."
student_03_b958245e319e@cloudshell:~ (qwiklabs-gcp-01-312d5af1a4e8)$ nano Dockerfile
student_03_b958245e319e@cloudshell:~ (qwiklabs-gcp-01-312d5af1a4e8)$ cat Dockerfile 
FROM alpine
COPY quickstart.sh /
CMD ["/quickstart.sh"]
student_03_b958245e319e@cloudshell:~ (qwiklabs-gcp-01-312d5af1a4e8)$ chmod +x quickstart.sh
  • Build
-> ENV 설정
student_03_b958245e319e@cloudshell:~ (qwiklabs-gcp-01-312d5af1a4e8)$ GOOGLE_CLOUD_PROJECT=qwiklabs-gcp-01-312d5af1a4e8

student_03_b958245e319e@cloudshell:~ (qwiklabs-gcp-01-312d5af1a4e8)$ gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/quickstart-image .
Creating temporary tarball archive of 10 file(s) totalling 8.0 KiB before compression.
Uploading tarball of [.] to [gs://qwiklabs-gcp-01-312d5af1a4e8_cloudbuild/source/1689686320.721249-feffafa16e1d49a683bc755647761ceb.tgz]
Created [https://cloudbuild.googleapis.com/v1/projects/qwiklabs-gcp-01-312d5af1a4e8/locations/global/builds/8fa69874-f18f-4da7-9954-47a459c5874d].
Logs are available at [ https://console.cloud.google.com/cloud-build/builds/8fa69874-f18f-4da7-9954-47a459c5874d?project=584874993966 ].
------------------------------------------------------------------------------- REMOTE BUILD OUTPUT --------------------------------------------------------------------------------
starting build "8fa69874-f18f-4da7-9954-47a459c5874d"

FETCHSOURCE
Fetching storage object: gs://qwiklabs-gcp-01-312d5af1a4e8_cloudbuild/source/1689686320.721249-feffafa16e1d49a683bc755647761ceb.tgz#1689686323455089
Copying gs://qwiklabs-gcp-01-312d5af1a4e8_cloudbuild/source/1689686320.721249-feffafa16e1d49a683bc755647761ceb.tgz#1689686323455089...
/ [1 files][  4.4 KiB/  4.4 KiB]                                                
Operation completed over 1 objects/4.4 KiB.                                      
BUILD
Already have image (with digest): gcr.io/cloud-builders/docker
Sending build context to Docker daemon  19.97kB
Step 1/3 : FROM alpine
latest: Pulling from library/alpine
Digest: sha256:82d1e9d7ed48a7523bdebc18cf6290bdb97b82302a8a9c27d4fe885949ea94d1
Status: Downloaded newer image for alpine:latest
 c1aabb73d233
Step 2/3 : COPY quickstart.sh /
 4b6a38954f9d
Step 3/3 : CMD ["/quickstart.sh"]
 Running in 2821c1d0045a
Removing intermediate container 2821c1d0045a
 19ca00732147
Successfully built 19ca00732147
Successfully tagged gcr.io/qwiklabs-gcp-01-312d5af1a4e8/quickstart-image:latest
PUSH
Pushing gcr.io/qwiklabs-gcp-01-312d5af1a4e8/quickstart-image
The push refers to repository [gcr.io/qwiklabs-gcp-01-312d5af1a4e8/quickstart-image]
938f3a044c12: Preparing
78a822fe2a2d: Preparing
78a822fe2a2d: Layer already exists
938f3a044c12: Pushed
latest: digest: sha256:b501d1fb4d184b5ca3c9ade6a95e1c2f4aa800fdec230dc94608d9b880bf4333 size: 735
DONE
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
ID: 8fa69874-f18f-4da7-9954-47a459c5874d
CREATE_TIME: 2023-07-18T13:18:43+00:00
DURATION: 17S
SOURCE: gs://qwiklabs-gcp-01-312d5af1a4e8_cloudbuild/source/1689686320.721249-feffafa16e1d49a683bc755647761ceb.tgz
IMAGES: gcr.io/qwiklabs-gcp-01-312d5af1a4e8/quickstart-image (+1 more)
STATUS: SUCCESS
  • 빌드된 이미지를 Container Registry 에서 확인


3. 빌드 구성 파일 및 Cloud Build로 컨테이너 빌드

Cloud Build는 커스텀 빌드 구성 파일도 지원하며, 이 작업에서는 커스텀 YAML 형식의 빌드 파일을 Cloud Build와 함께 사용하여 기존 Docker 컨테이너를 통합한다.

student_03_b958245e319e@cloudshell:~ (qwiklabs-gcp-01-312d5af1a4e8)$ git clone https://github.com/GoogleCloudPlatform/training-data-analyst
Cloning into 'training-data-analyst'...
remote: Enumerating objects: 63186, done.
remote: Counting objects: 100% (38/38), done.
remote: Compressing objects: 100% (27/27), done.
remote: Total 63186 (delta 21), reused 22 (delta 10), pack-reused 63148
Receiving objects: 100% (63186/63186), 694.19 MiB | 19.05 MiB/s, done.
Resolving deltas: 100% (40287/40287), done.
Updating files: 100% (12842/12842), done.
student_03_b958245e319e@cloudshell:~ (qwiklabs-gcp-01-312d5af1a4e8)$ ln -s ~/training-data-analyst/courses/ak8s/v1.1 ~/ak8s
student_03_b958245e319e@cloudshell:~ (qwiklabs-gcp-01-312d5af1a4e8)$ ls
ak8s  Dockerfile  quickstart.sh  README-cloudshell.txt  training-data-analyst
student_03_b958245e319e@cloudshell:~ (qwiklabs-gcp-01-312d5af1a4e8)$ cd ~/ak8s/Cloud_Build/a
student_03_b958245e319e@cloudshell:~/ak8s/Cloud_Build/a (qwiklabs-gcp-01-312d5af1a4e8)$ cat cloudbuild.yaml
steps:
- name: 'gcr.io/cloud-builders/docker'
  args: [ 'build', '-t', 'gcr.io/$PROJECT_ID/quickstart-image', '.' ]
images:
- 'gcr.io/$PROJECT_ID/quickstart-image'
  • 이 파일은 Cloud Build가 Docker를 사용하여 현재 로컬 디렉터리의 Dockerfile 사양을 사용하여 이미지를 빌드하고 태그 gcr.io/$PROJECT_ID/quickstart-image( $PROJECT_ID연결된 프로젝트의 프로젝트 ID로 Cloud Build가 자동으로 채우는 대체 변수임)
student_03_b958245e319e@cloudshell:~/ak8s/Cloud_Build/a (qwiklabs-gcp-01-312d5af1a4e8)$ gcloud builds submit --config cloudbuild.yaml .
Creating temporary tarball archive of 3 file(s) totalling 273 bytes before compression.
Uploading tarball of [.] to [gs://qwiklabs-gcp-01-312d5af1a4e8_cloudbuild/source/1689686989.792298-a2100019d60f4db4bde20902f331ae4a.tgz]
Created [https://cloudbuild.googleapis.com/v1/projects/qwiklabs-gcp-01-312d5af1a4e8/locations/global/builds/6ce8aefa-8706-4c83-bafb-69321eb00af7].
Logs are available at [ https://console.cloud.google.com/cloud-build/builds/6ce8aefa-8706-4c83-bafb-69321eb00af7?project=584874993966 ].
------------------------------------------------------------------------------- REMOTE BUILD OUTPUT --------------------------------------------------------------------------------
starting build "6ce8aefa-8706-4c83-bafb-69321eb00af7"

FETCHSOURCE
Fetching storage object: gs://qwiklabs-gcp-01-312d5af1a4e8_cloudbuild/source/1689686989.792298-a2100019d60f4db4bde20902f331ae4a.tgz#1689686990520074
Copying gs://qwiklabs-gcp-01-312d5af1a4e8_cloudbuild/source/1689686989.792298-a2100019d60f4db4bde20902f331ae4a.tgz#1689686990520074...
/ [1 files][  416.0 B/  416.0 B]                                                
Operation completed over 1 objects/416.0 B.
BUILD
Already have image (with digest): gcr.io/cloud-builders/docker
Sending build context to Docker daemon  4.096kB
Step 1/3 : FROM alpine
latest: Pulling from library/alpine
Digest: sha256:82d1e9d7ed48a7523bdebc18cf6290bdb97b82302a8a9c27d4fe885949ea94d1
Status: Downloaded newer image for alpine:latest
 c1aabb73d233
Step 2/3 : COPY quickstart.sh /
 aa9cea69fd82
Step 3/3 : CMD ["/quickstart.sh"]
 Running in df9957bbddac
Removing intermediate container df9957bbddac
 332ddfa5ab87
Successfully built 332ddfa5ab87
Successfully tagged gcr.io/qwiklabs-gcp-01-312d5af1a4e8/quickstart-image:latest
PUSH
Pushing gcr.io/qwiklabs-gcp-01-312d5af1a4e8/quickstart-image
The push refers to repository [gcr.io/qwiklabs-gcp-01-312d5af1a4e8/quickstart-image]
5cd2071a26a7: Preparing
78a822fe2a2d: Preparing
78a822fe2a2d: Layer already exists
5cd2071a26a7: Pushed
latest: digest: sha256:ff8868a630cadad497b742739c46226c731c152904ea2329730ab63f697dd30d size: 735
DONE
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
ID: 6ce8aefa-8706-4c83-bafb-69321eb00af7
CREATE_TIME: 2023-07-18T13:29:50+00:00
DURATION: 17S
SOURCE: gs://qwiklabs-gcp-01-312d5af1a4e8_cloudbuild/source/1689686989.792298-a2100019d60f4db4bde20902f331ae4a.tgz
IMAGES: gcr.io/qwiklabs-gcp-01-312d5af1a4e8/quickstart-image (+1 more)
STATUS: SUCCESS

  • 두가지 Version 의 컨테이너 Image를 볼 수 있음

4. 빌드 구성 파일 및 Cloud Build로 컨테이너 빌드 및 테스트

빌드한 컨테이너를 테스트하고 그 결과를 호출 환경에 보고하는 빌드 구성 파일과 같은 간단한 예

  • 인수가 전달될 quickstart.sh 때 테스트 실패를 시뮬레이트하도록 스크립트가 수정되었음.
student_03_b958245e319e@cloudshell:~/ak8s/Cloud_Build/a (qwiklabs-gcp-01-312d5af1a4e8)$ cd ~/ak8s/Cloud_Build/b
student_03_b958245e319e@cloudshell:~/ak8s/Cloud_Build/b (qwiklabs-gcp-01-312d5af1a4e8)$ cat cloudbuild.yaml
steps:
- name: 'gcr.io/cloud-builders/docker'
  args: [ 'build', '-t', 'gcr.io/$PROJECT_ID/quickstart-image', '.' ]
- name: 'gcr.io/$PROJECT_ID/quickstart-image'
  args: ['fail']
images:
- 'gcr.io/$PROJECT_ID/quickstart-image'

student_03_b958245e319e@cloudshell:~/ak8s/Cloud_Build/b (qwiklabs-gcp-01-312d5af1a4e8)$ cat quickstart.sh 
#!/bin/sh
if [ -z "$1" ]
then
        echo "Hello, world! The time is $(date)."
        exit 0
else 
        exit 1
fi

student_03_b958245e319e@cloudshell:~/ak8s/Cloud_Build/b (qwiklabs-gcp-01-312d5af1a4e8)$ gcloud builds submit --config cloudbuild.yaml .
Creating temporary tarball archive of 3 file(s) totalling 382 bytes before compression.
Uploading tarball of [.] to [gs://qwiklabs-gcp-01-312d5af1a4e8_cloudbuild/source/1689687259.5554-3ab55000a32840ceb897c42c6c95a096.tgz]
Created [https://cloudbuild.googleapis.com/v1/projects/qwiklabs-gcp-01-312d5af1a4e8/locations/global/builds/1e9de81a-16c5-4fca-bc29-e08f96ca30a8].
Logs are available at [ https://console.cloud.google.com/cloud-build/builds/1e9de81a-16c5-4fca-bc29-e08f96ca30a8?project=584874993966 ].
------------------------------------------------------------------------------- REMOTE BUILD OUTPUT --------------------------------------------------------------------------------
starting build "1e9de81a-16c5-4fca-bc29-e08f96ca30a8"

FETCHSOURCE
Fetching storage object: gs://qwiklabs-gcp-01-312d5af1a4e8_cloudbuild/source/1689687259.5554-3ab55000a32840ceb897c42c6c95a096.tgz#1689687260250777
Copying gs://qwiklabs-gcp-01-312d5af1a4e8_cloudbuild/source/1689687259.5554-3ab55000a32840ceb897c42c6c95a096.tgz#1689687260250777...
/ [1 files][  467.0 B/  467.0 B]                                                
Operation completed over 1 objects/467.0 B.
BUILD
Starting Step #0
Step #0: Already have image (with digest): gcr.io/cloud-builders/docker
Step #0: Sending build context to Docker daemon  4.096kB
Step #0: Step 1/3 : FROM alpine
Step #0: latest: Pulling from library/alpine
Step #0: Digest: sha256:82d1e9d7ed48a7523bdebc18cf6290bdb97b82302a8a9c27d4fe885949ea94d1
Step #0: Status: Downloaded newer image for alpine:latest
Step #0:  c1aabb73d233
Step #0: Step 2/3 : COPY quickstart.sh /
Step #0:  e3176f0a5e39
Step #0: Step 3/3 : CMD ["/quickstart.sh"]
Step #0:  Running in aacfc8c0087b
Step #0: Removing intermediate container aacfc8c0087b
Step #0:  9ebadd289ff4
Step #0: Successfully built 9ebadd289ff4
Step #0: Successfully tagged gcr.io/qwiklabs-gcp-01-312d5af1a4e8/quickstart-image:latest
Finished Step #0
Starting Step #1
Step #1: Already have image: gcr.io/qwiklabs-gcp-01-312d5af1a4e8/quickstart-image
Finished Step #1
ERROR
ERROR: build step 1 "gcr.io/qwiklabs-gcp-01-312d5af1a4e8/quickstart-image" failed: starting step container failed: Error response from daemon: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "fail": executable file not found in $PATH: unknown
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

BUILD FAILURE: Build step failure: build step 1 "gcr.io/qwiklabs-gcp-01-312d5af1a4e8/quickstart-image" failed: starting step container failed: Error response from daemon: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "fail": executable file not found in $PATH: unknown
ERROR: (gcloud.builds.submit) build 1e9de81a-16c5-4fca-bc29-e08f96ca30a8 completed with status "FAILURE"
student_03_b958245e319e@cloudshell:~/ak8s/Cloud_Build/b (qwiklabs-gcp-01-312d5af1a4e8)$ echo $?
1

3. GKE (Google Kubernetes Engine)

GKE는 Google Cloud에서 컨테이너화된 애플리케이션을 위한 Kubernetes 환경을 배포, 관리, 확장하는 데 도움이된다.

  • Kubernetes 워크로드를 클라우드로 쉽게 가져올 수 있음

  • GKE는 완전 관리형이므로 기본 리소스를 프로비저닝할 필요가 없음

  • GKE는 컨테이너 최적화 운영체제를 사용하여 워크로드를 실행


3-1. GKE Autopilot

Google이 노드, 확장, 보안, 기타 사전 구성된 설정을 비롯한 클러스터 구성을 관리하는 GKE의 작업 모드이다.

  1. GKE의 자동 복구 기능을 사용 설정하면 서비스가 비정상 노드를 복구할 수 있다.

  2. 클러스터의 각 노드에서 주기적으로 상태를 확인하며 노드가 비정상으로 판단되어 수리가 필요한 경우 GKE는 노드를 비우고(즉, 워크로드가 정상적으로 종료되도록 함) 노드를 다시 만든다.

  3. GKE의 자동 업그레이드 기능을 사용 설정하면 클러스터가 항상 안정적인 최신 Kubernetes 버전으로 자동 업그레이드된다.

  4. GKE는 클러스터 자체의 확장을 지원

  5. GKE는 또한 계정 및 역할 권한을 사용하여 액세스를 제어할 수 있는 Google의 ID 및 액세스 관리와 통합됩니다.

  6. GKE는 Cloud Monitoring과 통합되어 애플리케이션의 성능을 모니터링

  7. GKE는 Google Virtual Private Cloud와 통합되며 Google Cloud의 네트워킹 기능을 활용

  8. GKE는 Google의Cloud BuildArtifact Registry와 원활하게 통합하며, 이를 통해 Artifact Registry에 안전하게 저장한 비공개 컨테이너 이미지를 사용하여 배포를 자동화할 수 있다.

  9. 오픈 소스 Kubernetes에 대시보드가 포함되어 있지만, 안전하게 설정하려면 많은 작업이 필요하다. 하지만, Google Cloud Console은 관리할 필요가 없는 GKE 클러스터 및 워크로드용 대시보드이며 Kubernetes 대시보드보다 강력


3-2. Computing Options

Compute Engine

GCP에서 실행되는 가상 머신을 제공하고, 미리 정의된 VM 구성을 선택할 수 있으며, 성능 및 비용 요구 사항에 정확하게 일치하는 맞춤형 구성을 생성할 수도 있다.

가상 머신에는 블록 스토리지가 필요한데,Compute Engine은 영구 디스크로컬 SSD라는 두 가지 기본 옵션을 제공한다.

  • 영구 디스크 : 최대 64테라바이트까지 확장할 수 있는 네트워크 스토리지를 제공하며 백업 및 이동을 위해 이러한 디스크의 스냅샷을 쉽게 만들 수 있다.

  • 로컬 SSD : 초당 매우 높은 입출력 작업을 가능할 수 있으며, 자동 확장을 지원하는 글로벌 부하 분산기 뒤에 Compute Engine 워크로드를 배치할 수 있다.

Compute Engine은 관리형 인스턴스 그룹이라는 기능을 제공한다. 이를 통해 수요를 충족하기 위해 자동으로 배포되는 리소스를 정의할 수 있다.

GCP를 사용하면 Compute Engine 비용을 세밀하게 제어할 수 있으며, 초당 청구를 제공하여 이러한 세분성은 일괄 처리 작업과 같이 짧은 기간 동안 컴퓨팅 리소스를 배포할 때 비용을 줄이는 데 도움이 된다.

Compute Engine은 다른 컴퓨팅 옵션이 애플리케이션이나 요구사항을 지원하지 않을 때 가장 적합한 옵션이다.


App Engine

App Engine은 Compute Engine과 방향이 완전히 다르다. App Engine은 완전 관리형 애플리케이션 플랫폼이라는 점이고, AWS 의 Serverless 아키텍처와 비슷한 개념인거 같다.

App Engine을 사용하면 서버 관리 및 구성 배포가 필요하지 않아 개발자라면 배포 부분에 대해 걱정하지 않고 애플리케이션 구축에 집중할 수 있음. 따라서 코드를 사용하기만 하면 App Engine이 필요한 인프라를 배포한다.

App Engine은 Java 및 Node.js, Python, PHP, C#, .NET, Ruby, Go와 같은 널리 사용되는 다양한 언어를 지원하고, 컨테이너 워크로드를 실행할 수 있으며 Stackdriver 모니터링, 오류 보고와 같은 로깅 및 진단도 App Engine과 긴밀하게 통합된다.

Stackdriver는 Cloud SDK, Cloud Source 리포지토리, IntelliJ, Visual Studio 및 PowerShow 와 연동이 된다.

App Engine은 버전 제어 및 트래픽 분할도 지원합니다. 단순히 코드 작성에 집중하고 싶다면 App Engine이 좋은 선택.

App Engine의 사용 사례에는 웹사이트, 모바일 앱, 게임 백엔드 및 RESTful API를 인터넷에 제공하는 방법이 포함됩니다.

RESTful API ➡️ 응용 프로그램 인터페이스
웹 브라우저가 웹 서버와 상호 작용하는 방식과 유사하며, RESTful API는 개발자가 쉽게 작업하고 확장할 수 있으며 App Engine을 통해 쉽게 작동할 수 있다.


Cloud Run

GKE의 워크플로우를 실행시킬 수 있는 관리형 컴퓨팅 플랫폼. Cloud Run은 서버리스이며 모든 인프라 관리를 추상화하므로 애플리케이션 개발에 집중할 수 있으며, 오픈 소스 Kubernetes 기반 플랫폼인 Knative를 기반으로 한다.

Cloud Run을 사용하면 완전 관리형 또는 자체 GKE 클러스터에서 컨테이너를 실행할 수 있습니다. Cloud Run을 사용하면 요청을 실행하거나서버에 대해 걱정할 필요 없이 이벤트 기반 상태 비저장 워크로드 서버 프로비저닝, 구성, 관리와 같은 모든 인프라 관리를 추상화하므로 코드 작성에만 집중할 수 있다.

Cloud Run은 가장 가까운 100밀리초까지 계산하여 사용한 리소스에 대해서만 비용을 청구한다는 장점이 있다. 따라서, 과도하게 프로비저닝된 리소스에 대해 비용을 지불할 필요가 없음

Cloud Run을 사용하면 일관된 개발자 환경으로 자신의 GKE 클러스터에 상태 비저장 컨테이너를 완전 관리형 환경에 배포한다. 이것은 Kubernetes 위에 구축된 개방형 API 및 런타임 환경인 Knative를 통해 가능하다.

Cloud Run을 사용하면 원하는 프레임워크와 도구를 사용하여 모든 언어로 애플리케이션을 빌드하고 해당 서버 인프라를 관리 및 유지 관리할 필요 없이 몇 초 만에 배포할 수 있다.


Cloud Functions

이벤트에 연결된 단순한 단일 목적 기능을 위한 이벤트 기반 서버리스 컴퓨팅 서비스 ➡️ AWS 의 Lambda 와 같은 기능

JavaScript, Python 또는 Go로 작성된 코드를 업로드하기만 하면 GCP가 자동으로 해당 코드를 실행하기 위해 적절한 컴퓨팅 용량을 배포한다. 이러한 서버는 자동으로 확장되며 내결함성 설계의 고가용성에서 배포된다는 장점이 있다.또한, 코드가 실행되는 시간에 대해서만 비용이 청구된다.

각 함수에 대해 호출, 메모리 및 CPU 사용은 100밀리초 단위로 측정되 Cloud Functions는 또한 영구 무료 티어를 제공한다는 점!

Cloud Functions를 사용하면 이벤트를 기반으로 몇 밀리초 내에 코드가 트리거됩니다. 예를 들어 파일이 Google Cloud Storage에 업로드되거나 Cloud Pub/Sub에서 메시지가 수신되면, Cloud Functions는 정의한 HTTP 엔드포인트와 Firebase 모바일 애플리케이션 백엔드의 이벤트를 기반으로 트리거될 수도 있다.

Cloud Functions의 사용 사례는 일반적으로 마이크로 서비스 애플리케이션아키텍처의 일부로 사용이 많이 된다. 간단한 서버리스 모바일 IoT 백엔드를 구축하거나 타사 서비스 및 API와 통합할 수도 있으며, GCS 버킷에 업로드된 파일을 실시간으로 처리할 수 있다는 장점이 있다.

마찬가지로 쿼리 및 분석을 위해 데이터를 추출, 변환 및 로드할 수 있고 이것을 통해 GCP 고객은 종종 가상 지원, 동영상 또는 이미지 분석, 감정 분석과 같은 지능형 애플리케이션의 일부로 Cloud Functions를 사용하는 예제들이 존재한다.


4. Deploy GKE

1. GKE Cluster 배포

콘솔 ➡️ Kubernetes Engine ➡️ Cluster ➡️ CREATE ➡️ 스탠다드 클러스터로 전환

클러스터는 지역 전체 또는 단일 영역에서 만들 수 있으며 디폴트는 단일 영역이 기본값이다.

클러스터 이름 standard-cluster-1 로 변경 ➡️ 영역 us-central1-a 로 변경 ➡️ 모든 값을 기본값으로 두고 ➡️ 만들기

2. GKE 클러스터 수정

  • Node 수 Edit

3. 샘플 워크로드 배포

Kubernetes Engine ➡️ 워크로드 ➡️ 배치

기본 컨테이너 이미지인 nginx:latest, 이 이미지는 최신 버전의 nginx를 실행하는 단일 컨테이너로 각각 3개의 포드를 배포한다.

창 하단으로 스크롤하고 구성 세부 정보를 기본값으로 두고 배포 버튼을 클릭
배포가 완료되면 화면이 새로 고쳐지고 새 nginx 배포의 세부 정보가 표시된다.

4. Google Cloud Console에서 워크로드 세부정보 보기

Google Cloud Console에서 nginx-1 워크로드 의 세부정보 탭을 클릭하면, 세부 정보 탭에는 포드 사양, 포드 복제본의 수 및 상태, 수평형 포드 자동 확장 처리에 대한 세부 정보를 포함하여 워크로드에 대한 세부 정보가 표시된다.

  • 개정 내역 탭 ➡️ 이 워크로드에 적용된 개정 목록이 표시

  • 이벤트 탭 ➡️ 워크로드와 관련된 이벤트가 나열

  • YAML 탭 ➡️ 구성 요소를 정의하는 전체 YAML 파일과 이 샘플 워크로드의 전체 구성을 제공

  • Pod 세부 정보 페이지 ➡️ Pod 구성 및 리소스 사용률과 Pod가 실행 중인 노드에 대한 정보를 제공

  • 포드 세부 정보 페이지 에서 이벤트 및 로그 탭을 ➡️ Cloud Operations의 컨테이너 로그에 대한 이벤트 세부 정보 및 링크를 볼 수 있음.


3-2. Anthos

컨테이너가 없거나 클라우드에도 없는 레거시 애플리케이션을 K8S환경으로 이동할 수 있게 도와주는 도구

프로세스가 자동화된다는 장점이 있으며, 10분 이내에 완료될 정도로 매우 빠르다

Migration For Anthos Architecture

STEPS

  • Migrate for Compute Engine 이 on-pre 혹은 다른 클라우드 공급업체에서 Google Cloud로 데이터를 스트리밍하거나 마이그레이션 하기 위한 파이프라인을 생성하도록 허용하는 것
    ➡️ Migrate for Compute Engine : 레거시(기존)애플리케이션을 Google Cloud 의 VM으로 가져올 수 있는 도구
  • Migrate For Anthos 는 GKE 처리 클러스터에 설치되며 많은 K8S 리소스로 구성된다.
    ➡️ Migrate For Anthos : 배포 아티팩트를 생성하는데 사용, Dockerfile 과 같은 아티팩트중 일부는 VM 래핑 컨테이너를 만드는 데 사용되고 이 컨테이너는 Cloud Storage에 들어가며, 컨테이너 이미지 자체는 Container Registry에 저장된다.

Migration Path

먼저 처리 클러스터를 생성하고 해당 클러스터에 Migration For Anthos 구성요소를 설치한다. 다음으로 마이그레이션 리소스를 추가한다.
VMware, AWS, Azure 와 같은 외부 공급자 혹은 GCP에서 마이그레이션 할 수 있다.

수행 중인 마이그레이션의 세부 정보를 사용하여 마이그레이션 개체를 만들어야 하는데 여기까지 수행했다면 YAML 파일에 계획 템플릿이 생성되고 이 YAML파일은 변경이 가능하다.

계획이 준비되면 마이그레이션을 위한 아티팩트를 생성해야 하고, 이는 배포에 필여한 YAML 파일에 애플리케이션의 컨테이너 이미지를 생성하는 것을 의미한다.

아티팩트가 생성된 후 TEST해야 하며 이 단계에서는 컨테이너 이미지와 배포가 모두 이 단계에서 테스트 된다.

마지막으로 테스트가 성공하면 생성 아티팩트를 사용하여 프로덕션 클러스터에 애플리케이션을 배포할 수 있다.


Badge

profile
무럭무럭 자라볼까

2개의 댓글

comment-user-thumbnail
2023년 7월 19일

아주 유용한 정보네요!

1개의 답글