새소식

ML Development/Docker | k8s - 2024.03.04

[QWIKLABS] GKE 사용해보기

  • -

Kubernetes?


컨테이너 클러스터(대규모)에서의 어플리케이션을 손쉽게 배포, 관리할 수 있도록 도와줌

 

 

GKE(Google Kubernetes Engine)


구글의 인프라를 활용해 추가 기능 제공

  • Load balancing : 인스턴스 그룹에 대한 부하 분산 및 자동 확장 기능 제공하여 다음과 같은 이점 제공
  1. 앱 확장
  2. 높은 트래픽 지원
  3. 비정상적인 VM 인스턴스 자동으로 삭제/추가
  4. 트래픽을 가장 가까운 가장 머신으로 라우팅
  • Node pools : 클러스터 내 구성이 모두 동일한 노드 그룹으로 노드 풀 마다 독립적으로 작업 가능
  • Automatic scaling : 클러스터의 노드 풀 크기를 수요에 따라 자동으로 조절하여 가용성을 높이고 비용을 통제 가능
  • Automatic upgrades : 클러스터가 업그레이드되면 노드를 클러스터 버전에 맞게 업그레이드 진행
  • Node auto-repair : 클러스터의 각 노드 상태를 주기적으로 확인 후 문제가 있을 시 자동 복구 진행

 

GCP 실습


Compute Zone

  • [ic]<region>-<zone>[/ic]으로 구성
  • us-central1-a로 변경
gcloud config set compute/zone us-central1-a
Updated property [compute/zone].

GKE cluster

  • cluster는 하나 이상의 cluster master와 nodes라고 불리는 vm instances로 구성

cluster 구조

  • my-cluster 라는 cluster 생성
gcloud container clusters create my-cluster
NAME: my-cluster
LOCATION: us-central1-a # compute zone
MASTER_VERSION: 1.22.8-gke.202 # kubernetes version
MASTER_IP: 34.67.240.12
MACHINE_TYPE: e2-medium
NODE_VERSION: 1.22.8-gke.202 # master와 동일
NUM_NODES: 3
STATUS: RUNNING

Authentication Credentials

  • 생성한 cluster를 사용하려면 자격 인증이 필요
gcloud container clusters get-credentials my-cluster
Fetching cluster endpoint and auth data.
kubeconfig entry generated for my-cluster.

 

Deploy an application to the cluster

구성한 cluster에 containerized application을 배포할 수 있음

GKE는 kubernetes objects를 통해서 cluster의 리소스를 생성하거나 관리하게 됨

  • kubernetes objects
    • Deployment : statesless application 배포
    • Service : internet에서 application에 접근할 수 있도록 규칙과 load balancing 관리

Create a new Deployment

kubectl create deployment hello-server --image=gcr.io/google-samples/hello-app:1.0
deployment.apps/hello-server created
 

Defining Stateful vs Stateless Web Services | Nordic APIs |

We describe what it means to be a "stateful" or "stateless" web service.

nordicapis.com

 

스테이트풀(Stateful)과 스테이트리스(Stateless) 차이 및 비교

스테이트풀(Stateful)과 스테이트리스(Stateless)의 차이는 상호 작용 상태가 얼마나 오래 기록되는지, 해당 정보가 어떤 방식으로 저장되는지에 따라 구별됩니다.

www.redhat.com

Create a Kubernetes Service

internet에서 application에 접속할 수 있도록 service를 생성

  • -- type=LoadBalancer : service type
  • — port : 외부에 개방할 port 지정
  • expose 명령어
kubectl expose deployment hello-server --type=LoadBalancer --port 8080
service/hello-server exposed

Inspect the hello-server service

  • LoadBalancer type의 service가 실행되고 있음을 확인할 수 있음
  • get 명령어
kubectl get service
NAME           TYPE           CLUSTER-IP     EXTERNAL-IP    PORT(S)          AGE
hello-server   LoadBalancer   10.104.2.117   34.133.46.73   8080:31759/TCP   51s
kubernetes     ClusterIP      10.104.0.1     <none>         443/TCP          22m

Accessing the service

생성한 service를 internet에서 접근 가능

  • External-IP와 PORT를 통해서 접근
http://34.133.46.73:8000

접속하면 이 메시지가 반겨준다.

Deleting the cluster

  • 시간이 꽤 소요 된다.
gcloud container clusters delete my-cluster

https://cloud.google.com/kubernetes-engine/docs/how-to/deleting-a-cluster

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.