- GCP 의 Qwiklabs 과정을 진행하면서 GKE 를 이해
- GKE(Google Kubernetes Engine)?
Google Cloud 에서 사용하는 Kubernetes 로 아래와같이 Google Cloud 의 고급 클러스터 관리 역량을 활용할 수 있다는 장점이 있음Compute Engine 인스턴스를 위한 부하 분산
노드 풀로 클러스터 안에 하위 노드 집합을 지정하여 유연성 강화
클러스터에서 노드 인스턴스 개수 자동 확장
클러스터에서 노드 소프트웨어 자동 업그레이드
노드 자동 복구로 노드 상태 및 가용성을 유지 관리
Cloud Monitoring을 통한 로깅 및 모니터링으로 클러스터 현황에 대한 가시성 확보
🔗 Qwiklabs - https://www.qwiklabs.com/catalog_lab/911
아래와 같이 생성 명령어를 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
애플리케이션을 외부 트래픽에 노출하기 위한 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
$ 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].
🔗 https://www.cloudskillsboost.google/focuses/564?parent=catalog
🔗 https://www.qwiklabs.com/focuses/639?parent=catalog
Autopilot?
Google Kubernetes Engine(GKE)의 새로운 작업 모드로, 클러스터 관리 작업 비용을 줄이고 클러스터를 프로덕션에 최적화하고 가용성이 더 높은 워크로드를 얻도록 설계되었습니다
🔗 세부 설명 - https://cloud.google.com/kubernetes-engine/docs/concepts/autopilot-overviewAutopilot mode 의 특징
✔️Automatic management
✔️Monitoring and liveness probes for application containers
✔️Automatic scaling
✔️Rolling updates
해당 실습은 Cloud code 라는 IDE 를 통해 원격 형태로 진행이 됨
이 Cloud code 에 실습을 위한 GKE 클러스터가 이미 배포되어 있음
사전에 제작된 application 을 github 에서 clone 함
GKE Autopilot 클러스터는 실습 랩에서 사전에 프로비저닝 되어 있기 때문에 kubeconfig 수정을 통해 해당 클러스터를 가리킨다
Cloud code 의 Kubernetes 로 진입
Google kubernetes Engine 을 선택
실습을 위해 생성된 dev-cluster 를 선택
IDE 에 추가된 dev-cluster GKE 클러스터
v2/scaffold.yaml 을 선택
dev-cluster 에 kubeconfig 가 성공적으로 추가됨
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 를 확인 가능
Service의 External IPs 를 확인하여 접속
배포된 앱을 확인 가능
콘솔의 중지버튼 사용 후 Yes 선택
중지 후에는 콘솔에서도 해당 리소스가 모두 정지된 것을 확인 가능
Container 애플리케이션 배포시의 장점
✔️ 독립성 - 다른 응용 프로그램의 다른 라이브러리에서 충돌이 발생하지 않음
✔️ 자원 제약 - 다른 응용 프로그램의 자원을 침해하지 앟음
✔️ 이식성 - 컨테이너 내에는 모든것이 포함되며 OS 나 클라우드 벤더사에 종속되지 않음
✔️ 경량 - 커널이 공유되어 전체 OS 이미지보다 훨씬 작고 빠르다