티스토리 뷰

[업데이트 2020.06.01 22:18]

 

Kubernetes(이하 쿠버네티스)에 대해 스터디하면서 간략히 정리하였습니다. 이번 포스팅에서는 Google Cloud Platform(이하 GCP)에 쿠버네티스로 서비스를 구성 및 배포하여 확인하는 것을 목표로 하였습니다.

쿠버네티스로 할 수 있는 것은?

현대의 웹 서비스의 경우 24/7 항상 서비스가 이용 가능해야하며, 하루에 여러번 새로운 버전으로 배포해야 합니다. 컨테이너화는 패키지 소프트웨어를 중단없이 배포 및 업데이트 할 수 있도록 도와줍니다.

 

쿠버네티스는 컨테이너화 된 어플리케이션을 원하는 위치와 시간에 실행할 수 있고 작업에 필요한 리소스와 도구를 찾을 수 있도록 도와줍니다.

 

쿠버네티스는 컨테이너 오케스트레이션에 대한 구글의 축적 된 경험과 커뮤니티의 최고 아이디어와 함께 설계된 production-ready가 된 오픈 소스 플랫폼입니다.


쿠버네티스 사이트에 설명되어 있는 내용에 대해 발췌해보았습니다. 기존 컨테이너화된 소프트웨어의 배포 및 업데이트에 대해 오케스트레이션 할 수 있도록 도와주는 것이 쿠버네티스의 핵심 기능이라 생각됩니다. 

 

이제 GCP를 통해 쿠버네티스를 사용하는 것에 대해 알아보겠습니다. GCP를 사용하기에 앞서 구글 계정 생성 및 GCP console에 로그인합니다. (이번 포스팅에서는 이 과정은 생략하겠습니다) MacOS 기준으로 작성하였습니다. 

 

구글 클라우드 콘솔에 접속 후 다음과 같이 쿠버네티스 엔진으로 이동하여 클러스터를 생성합니다. 존(Zone)의 경우 asia-northeast3-a로 지정하였습니다. asia-northeast3의 경우 최근에 생긴 서울 리전입니다. 나머지는 모두 기본값으로 설정합니다.

 

클러스터 만들기
클러스터 만들기

노드의 경우 머신 유형을 가장 낮은 스펙으로 선택합니다. (g1-small)

 

노드 머신 구성하기

만들기를 클릭하게 되면 아래와 같이 클러스터가 생성됩니다.

 

클러스터 생성 중인 상태

 

생성이 완료될 때까지 기다립니다.

 

클러스터 생성이 완료된 상태

이제 GCP에 쿠버네티스 클러스터가 생성되었습니다. 로컬 셸을 사용하여 이제 서비스를 배포하는 방법에 대해 확인해보겠습니다.


로컬 셸에서 쿠버네티스를 사용하기 위해 gcloud 및 kubectl 도구를 설치합니다. 중간 중간 sub directory 지정 등을 물어보는데 모두 기본값으로 진행합니다.

 

1. 터미널을 실행 후 아래와 같이 입력합니다.

~MyMacBookAir$ curl https://sdk.cloud.google.com | bash

 

2. 셸을 다시 시작합니다.

~MyMacBookAir$ exec -l $SHELL 

 

3. gcloud init를 실행하여 gcloud 환경을 초기화합니다. 

~MyMacBookAir$ gcloud init

 

이제 gcloud init을 수행하면서 구글 이메일로 인증을 수행해야 다음으로 넘어갈 수 있습니다. 로그인 창이 뜨면 구글 계정 로그인을 수행합니다. 기존에 GCP console에서 만들어놓은 프로젝트를 선택하거나 새로 생성합니다.

You are logged in as: [test@gmail.com].

Pick cloud project to use:
[1] synthetic-nova-278803
[2] Create a new projectPlease enter numeric choice or text value (must exactly match list
item): 1

Your current project has been set to: [synthetic-nova-278803].

 

그리고 리전이나 존 등 나머지 나오는 항목들에 대해 default값으로 선택합니다. 이제 설치된 Google Cloud SDK를 통해 kubectl 도구를 아래와 같이 설치합니다.

~MyMacBookAir$ gcloud components install kubectl

이제 kubectl을 통해 쿠버네티스 클러스터 풀에 생성된 pod 정보를 가져와 봅니다. 현재는 pod 정보를 가져오면 접근이 안되는데요.

~MyMacBookAir$ kubectl get pods
The connection to the server localhost:8080 was refused - did you specify the right host or port?

Cloud SDK를 통해 쿠버네티스 클러스터 정보를 fetch합니다. 다음과 같이 fetch 되었음을 확인할 수 있으며, 이제 kubectl을 통해 구글 클라우드에 구축되어 있는 쿠버네티스의 클러스터 정보를 가져올 수 있게 됩니다.

~MyMacBookAir$ gcloud container clusters get-credentials aisland-cluster-1

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

다시 쿠버네티스 클러스터의 pod정보를 가져왔을 때 아래와 같이 “No resources found.”로 보이면 정상적으로 연결된 상태입니다.

~MyMacBookAir$ kubectl get pods 
No resources found.

이제 아래와 같이 샘플앱을 배포합니다.

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

다시 pod정보를 가져와보면 아래와 같이 샘플앱이 배포된 것을 확인할 수 있습니다.

~MyMacBookAir$ kubectl get pods
NAME                            READY   STATUS    RESTARTS   AGE 
hello-server-7f8fd4d44b-zlq2d   1/1     Running   0          5s

아직 웹브라우저로 접속이 되지 않는데 포트 정보를 expose합니다. 외부 노출되는 포트가 80이며, 내부 포트는 8080입니다.

~MyMacBookAir$ kubectl expose deployment hello-server --type LoadBalancer --port 80 --target-port 8080
service/hello-server exposed

이제 서비스가 어떻게 배포 되었는지 아래 명령어로 확인합니다. 아래와 같이 서비스의 IP 정보 등을 알 수 있는데요. 아직 public IP가 pending 상태인데, 조금 더 기다리면 IP가 할당됩니다.

~MyMacBookAir$ kubectl get service hello-server
NAME           TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
hello-server   LoadBalancer   xx.xx.xx.xx   <pending>     80:32030/TCP   43s

할당된 외부 IP로 웹브라우저에서 접속하게 되면 아래와 같이 샘플앱이 정상적으로 GCP 쿠버네티스에 배포되어 실행되고 있는 것을 확인할 수 있습니다.

 

웹브라우저에서 할당 된 public IP로 접속한 화면

* 참고

[1] https://kubernetes.io/docs/tutorials/kubernetes-basics/

[2] https://console.cloud.google.com

[3] https://cloud.google.com/kubernetes-engine/docs/quickstart/

[4] https://cloud.google.com/sdk/docs/downloads-interactive

 

* 팀블로그 : https://medium.com/aisland/kubernetes-basics-9a6373e44f9

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함