GKE Fundamental

leesj·2022년 3월 8일
0

kubernetes

목록 보기
7/8
  • GCP 의 Qwiklabs 과정을 진행하면서 GKE 를 이해
  • GKE(Google Kubernetes Engine)?
    Google Cloud 에서 사용하는 Kubernetes 로 아래와같이 Google Cloud 의 고급 클러스터 관리 역량을 활용할 수 있다는 장점이 있음

    Compute Engine 인스턴스를 위한 부하 분산
    노드 풀로 클러스터 안에 하위 노드 집합을 지정하여 유연성 강화
    클러스터에서 노드 인스턴스 개수 자동 확장
    클러스터에서 노드 소프트웨어 자동 업그레이드
    노드 자동 복구로 노드 상태 및 가용성을 유지 관리
    Cloud Monitoring을 통한 로깅 및 모니터링으로 클러스터 현황에 대한 가시성 확보

1️⃣ Kubernetes Engine: Qwik Start 실습

🔗 Qwiklabs - https://www.qwiklabs.com/catalog_lab/911

GKE 클러스터 생성

아래와 같이 생성 명령어를 console 입력하면 수분 정도 후에 클러스터가 생성된다

$ gcloud container clusters create my-cluster

Default change: VPC-native is the default mode during cluster creation for versions greater than 1.21.0-gke.1500. To create advanced routes based clusters, please pass the `--no-enable-ip-alias` flag
Note: Your Pod address range (`--cluster-ipv4-cidr`) can accommodate at most 1008 node(s).
Creating cluster my-cluster in us-central1-a... Cluster is being health-checked (master is healthy)...done.     
Created [https://container.googleapis.com/v1/projects/qwiklabs-gcp-03-eae6343d7ead/zones/us-central1-a/clusters/my-cluster].
To inspect the contents of your cluster, go to: https://console.cloud.google.com/kubernetes/workload_/gcloud/us-central1-a/my-cluster?project=qwiklabs-gcp-03-eae6343d7ead
kubeconfig entry generated for my-cluster.
NAME: my-cluster
LOCATION: us-central1-a
MASTER_VERSION: 1.21.6-gke.1503
MASTER_IP: 34.71.241.139
MACHINE_TYPE: e2-medium
NODE_VERSION: 1.21.6-gke.1503
NUM_NODES: 3
STATUS: RUNNING

클러스터의 사용자 인증정보 얻기

클러스터 생성 후 클러스터와 상호작용하기 위한 사용자 인증 정보 얻기

$ gcloud container clusters get-credentials my-cluster
Fetching cluster endpoint and auth data.

Fetching cluster endpoint and auth data.
kubeconfig entry generated for my-cluster.

클러스터에 애플리케이션 배포

hello-app 이라는 컨테이너 이미지를 가져와 hello-server 라는 배포객체를 생성함

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

deployment.apps/hello-server created

Kubernetes Service 생성

애플리케이션을 외부 트래픽에 노출하기 위한 Service 를 생성

$ kubectl expose deployment hello-server --type=LoadBalancer --port 8080
service/hello-server exposed

서비스 목록 확인

$ kubectl get service
NAME           TYPE           CLUSTER-IP     EXTERNAL-IP    PORT(S)          AGE
hello-server   LoadBalancer   10.104.7.180   35.232.5.250   8080:30091/TCP   96s
kubernetes     ClusterIP      10.104.0.1     <none>         443/TCP          5m32s

Kubernetes cluster 삭제

$ gcloud container clusters delete my-cluster
The following clusters will be deleted.
 - [my-cluster] in [us-central1-a]

Do you want to continue (Y/n)?   Y

Deleting cluster my-cluster...done.     
Deleted [https://container.googleapis.com/v1/projects/qwiklabs-gcp-03-86a23e913ca4/zones/us-central1-a/clusters/my-cluster].

Hello Node Kubernetes

🔗 https://www.cloudskillsboost.google/focuses/564?parent=catalog

Kubernetes Engine 으로 배포관리

🔗 https://www.qwiklabs.com/focuses/639?parent=catalog

2️⃣ GKE Autopilot: Qwik Start

Autopilot?
Google Kubernetes Engine(GKE)의 새로운 작업 모드로, 클러스터 관리 작업 비용을 줄이고 클러스터를 프로덕션에 최적화하고 가용성이 더 높은 워크로드를 얻도록 설계되었습니다
🔗 세부 설명 - https://cloud.google.com/kubernetes-engine/docs/concepts/autopilot-overview

Autopilot mode 의 특징
✔️Automatic management
✔️Monitoring and liveness probes for application containers
✔️Automatic scaling
✔️Rolling updates

해당 실습은 Cloud code 라는 IDE 를 통해 원격 형태로 진행이 됨
이 Cloud code 에 실습을 위한 GKE 클러스터가 이미 배포되어 있음

Repository clone 하기

사전에 제작된 application 을 github 에서 clone 함

kubeConfig 에 클러스터 추가

GKE Autopilot 클러스터는 실습 랩에서 사전에 프로비저닝 되어 있기 때문에 kubeconfig 수정을 통해 해당 클러스터를 가리킨다

Cloud code 의 Kubernetes 로 진입

Google kubernetes Engine 을 선택

실습을 위해 생성된 dev-cluster 를 선택

IDE 에 추가된 dev-cluster GKE 클러스터

v2/scaffold.yaml 을 선택

dev-cluster 에 kubeconfig 가 성공적으로 추가됨

App 을 build 및 Deploy

clone 한 voting-demo app 을 Google Container Registry 에서 build 하고 이 컨테이너 이미지를 사용하는 애플리케이션의 Kubernetes 매니페스트를 배포하는 스캐폴드 매니페스트를 활용한다.

skaffold run --default-repo=gcr.io/$PROJECT_ID/voting-app --tail

위 명령어를 사용하거나 아래와 같이 진행하여 App 을 배포

Workloads 가 Deployment type 으로 생성된 부분을 확인 가능

console 에서 생성된 Service 를 확인 가능

배포된 APP 을 테스트

Service의 External IPs 를 확인하여 접속

배포된 앱을 확인 가능

리소스 정리

콘솔의 중지버튼 사용 후 Yes 선택
중지 후에는 콘솔에서도 해당 리소스가 모두 정지된 것을 확인 가능

3️⃣ GKE 으로 배포 관리

4️⃣ GKE Container 로의 Migration

Container 애플리케이션 배포시의 장점

✔️ 독립성 - 다른 응용 프로그램의 다른 라이브러리에서 충돌이 발생하지 않음
✔️ 자원 제약 - 다른 응용 프로그램의 자원을 침해하지 앟음
✔️ 이식성 - 컨테이너 내에는 모든것이 포함되며 OS 나 클라우드 벤더사에 종속되지 않음
✔️ 경량 - 커널이 공유되어 전체 OS 이미지보다 훨씬 작고 빠르다

0개의 댓글