Kubernetes?
컨테이너 클러스터(대규모)에서의 어플리케이션을 손쉽게 배포, 관리할 수 있도록 도와줌
GKE(Google Kubernetes Engine)
구글의 인프라를 활용해 추가 기능 제공
- Load balancing : 인스턴스 그룹에 대한 부하 분산 및 자동 확장 기능 제공하여 다음과 같은 이점 제공
- 앱 확장
- 높은 트래픽 지원
- 비정상적인 VM 인스턴스 자동으로 삭제/추가
- 트래픽을 가장 가까운 가장 머신으로 라우팅
- Node pools : 클러스터 내 구성이 모두 동일한 노드 그룹으로 노드 풀 마다 독립적으로 작업 가능
- Automatic scaling : 클러스터의 노드 풀 크기를 수요에 따라 자동으로 조절하여 가용성을 높이고 비용을 통제 가능
- Automatic upgrades : 클러스터가 업그레이드되면 노드를 클러스터 버전에 맞게 업그레이드 진행
- Node auto-repair : 클러스터의 각 노드 상태를 주기적으로 확인 후 문제가 있을 시 자동 복구 진행
- Logging and Monitoring : 대시보드를 통해 클러스터 정보 제공
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로 구성
- 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
- hello-server : 배포 이름
- --image : 배포할 container image를 Container Registry에서 선택
- gcr.io/google-samples/hello-app:1.0 : 배포할 image
- :1.0과 같은 구체적 버전 정보가 없으면 최신 버전이 활용
kubectl create deployment hello-server --image=gcr.io/google-samples/hello-app:1.0
deployment.apps/hello-server created
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