'GKE'에 해당하는 글 3건

Google Cloud Platform 에서 쿠버네티스를 운영하기 위한 방법으로 Kubernetes Engine 과 Kubernetes API 를 사용하여 어플리케이션을 배포 및 관리 할 수 있다. 간단하게 쿠버네티스를 이용하여 어플리케이션을 테스트 해보자.


GKE(Google Kubernetes Engine) 를 사용하여 쿠버네티스 클러스터 생성

kubectl 를 사용하여 Docker 컨테이너를 배포 및 관리

쿠버네티스의 Deployment 와 Service 를 사용하여 마이크로 서비스로 어플리케이션 분리



1. 구성 연결


GCP 콘솔의 APIs & services 에서 Kubernetes Engine API 와 Container Registry API 이 활성화 되어 있는지 체크하고, Cloud Shell 이나 Cloud SDK 를 사용하여 GCP 계정, 프로젝트, zone 설정 등을 확인한다.


> gcloud config list



2. 클러스터-노드 생성


> gcloud container clusters create bootcamp --num-nodes 5 --scopes "https://www.googleapis.com/auth/projecthosting,storage-rw"


NAME      LOCATION       MASTER_VERSION  MASTER_IP     MACHINE_TYPE   NODE_VERSION   NUM_NODES  STATUS

bootcamp  us-central1-a  1.11.7-gke.12   35.202.79.78  n1-standard-1  1.11.7-gke.12  5          RUNNING


위의 명령으로 클러스터(bootcamp) 와 node 가 5개 생성된다. --scopes 인수는 나중에 사용할 프로젝트 호스팅과 Google Cloud Storage API 에 대한 액세스를 제공한다.


> kubectl get nodes

NAME                                      STATUS    ROLES     AGE       VERSION

gke-bootcamp-default-pool-654208f7-2pc5   Ready     <none>    8m        v1.11.7-gke.12

gke-bootcamp-default-pool-654208f7-4hbc   Ready     <none>    8m        v1.11.7-gke.12

gke-bootcamp-default-pool-654208f7-9wxw   Ready     <none>    8m        v1.11.7-gke.12

gke-bootcamp-default-pool-654208f7-qf9k   Ready     <none>    8m        v1.11.7-gke.12

gke-bootcamp-default-pool-654208f7-x9vz   Ready     <none>    8m        v1.11.7-gke.12


GCP 콘솔에서 확인하고 싶다면 클러스터는 [Kubernetes Engine > Cluster], 노드는 [Compute Engine > VM Instances] 에서 확인할 수 있다. 아래 예제처럼 GCP 콘솔에서 직접 클러스터를 생성할 수도 있다.






3. 어플리케이션 배포


> kubectl create deployment nginx --image=nginx:1.10.0

deployment.apps/nginx created


> kubectl get pods -o wide

NAME                     READY   STATUS    RESTARTS  IP          NODE

nginx-7d79bd4478-86289   1/1     Running   0         10.48.1.5   gke-bootcamp-default-pool-654208f7-4hbc


위 명령으로 nginx 컨테이너를 담은 파드가 생성되고 노드에 배치됐다.



4. 서비스 생성 (외부IP 노출)


> kubectl expose deployment nginx --port 80 --type LoadBalancer

service/nginx exposed


> kubectl get services

NAME         TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)        AGE

kubernetes   ClusterIP      10.51.240.1     <none>          443/TCP        18m

nginx        LoadBalancer   10.51.250.242   34.66.113.107   80:32693/TCP   1m


위 명령으로 LoadBalancer 타입의 서비스를 생성하여 nginx 컨테이너를 외부에서 접근할 수 있게 한다. 생성된 External-IP 와 port 는 서비스가 유지되는 동안만 유효하다. (External-IP 생성에 일정 시간이 소요될 수 있음)



5. pod 수 확장


> kubectl scale deployment nginx --replicas 3

deployment.extensions/nginx scaled


> kubectl get pods -o wide

NAME                     READY   STATUS    RESTARTS  IP          NODE                                      NOMINATED NODE

nginx-7d79bd4478-86289   1/1     Running   0         10.48.1.5   gke-bootcamp-default-pool-654208f7-4hbc

nginx-7d79bd4478-j6wql   1/1     Running   0         10.48.2.4   gke-bootcamp-default-pool-654208f7-9wxw

nginx-7d79bd4478-zznhd   1/1     Running   0         10.48.3.5   gke-bootcamp-default-pool-654208f7-2pc5


위 명령은 생성해 놓은 nginx 배포(deployment) 의 pod 수를 3 개로 늘린다. 마스터는 요청에 따라 적절한 노드를 찾아 2개의 파드를 각각 추가로 배치한다. 트래픽이 많거나 적을 경우 위와 같이 파드 수를 늘리거나 줄일 수 있다.



6. 어플리케이션 테스트


> curl http://<External IP>:80





7. 삭제


파드나 서비스를 더 이상 사용하지 않을 경우 아래와 같이 삭제한다.


> kubectl delete deployment nginx

deployment.extensions "nginx" deleted


> kubectl get pods

No resources found.


> kubectl delete service nginx




WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,

쿠버네티스는 어디부터 시작해야 할까? 쿠버네티스 이론과 플러스로 특정 클라우드 서비스의 이론, 오픈 소스인데 무료로는 쉽게 접할 수 없을 것 같은 무시무시함, 그 시작점도 여러가지, 솔루션도 여러가지라 시작하는 것부터가 고민이다. 일단 쿠버네티스를 접할 수 있는 방법은 다음과 같이 무궁무진하다.


1. 로컬 장치 솔루션 : PC 나 노트북 등에 쿠버네티스 경량 버전을 설치하고 스피드하게 쿠버네티스 접해보기.(무료!)

2. 호스티드 솔루션 : 쿠버네티스를 설치 없이 즉시 사용할 수 있는 클라우드 솔루션.(gke, eks)

3. 턴키 클라우드 솔루션 : gce 나 ec2 같은 클라우드 컴퓨터에서 클러스터 관리 등 편리한 쿠버네티스 운영을 위한 솔루션.

4. 그 외 클라우드 공급자와 베어메탈 환경, 많은 운영체제에서의 특수조합 솔루션과 사용자 정의 솔루션.


일일이 나열하지는 않았지만 보자마자 꺼버리고 싶을 정도로 다양한 솔루션들. 난 단지 쿠버네티스를 설치하고 테스트 해보고 싶을 뿐인데, 뭐라뭐라~~~ 간단하지는 않겠지만 하고자 한다면 원하는 플랫폼에서 원하는 수준으로 쿠버네티스 솔루션 사용이 가능하다. 특정 클라우드나/서버/OS 에 따라 설치방법이과 설정이 조금씩 다르나, 클러스터 생성 - 앱 배포 - 스케일링 - 업데이트 등의 쿠버네티스의 흐름은 모두 동일하다. 부담없는 무료버전을 빠르게 설치해서 쿠버네티스 명령과 동작 좀 익히고, 중간에 시간 좀 남으면 서버에 직접 설치도 해보고, 그러다가 호스티드 솔루션으로 자연스럽게 넘어가서 운영을 할 수 있을 정도가 되어보려 한다.


시작부터 난관에 빠지긴 했지만... 설치전에 쿠버네티스가 어떻게 생겼는지를 먼저 보는게 좋겠다.



요롷게 생겼다. 어떤 솔루션이든 쿠버네티스가 설치되어 있다면, 가장 먼저 클러스터라는 공간을 생성해 주어야 하며, 그 안에는 마스터 노드(Master) 와 워커 노드(Node) 를 생성할 수 있다. 마스터는 클러스터 내에 발생하는 모든 요청들을 담당하는 중추적인 역할을 하며 하나의 클러스터에 한 개만 있으면 된다. 노드는 클러스터에 따라 물리적인 컴퓨터나 가상머신(VM) 등의 장치가 된다. 앱이 구동될 공간이며, 하나의 클러스터에 여러 개를 생성할 수 있다. 모든 준비를 마친 후 앱을 배포하도록 Master 에 지시하면 적당한 Node 에서 앱을 구동하게 될 것이다. 겉보기는 저게 다다. 이렇게 보니까 되게 쉬워 보인다. 자신감+1.


다음은 로컬 장치 솔루션 사용해 보기!




WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,

Kubernetes 란

Tool/Kubernetes 2019. 3. 12. 00:10


쿠버네티스는 운영 수준에서 컨테이너 오케스트레이션(컨테이너화된 애플리케이션을 자동으로 배포, 스케일링 및 관리) 기능을 하는 오픈소스 시스템이다. GO 언어로 구현이되었으며, 구글에서 설계를 했지만 오픈소스로서 특정 벤더나 플랫폼에 종속되지 않기 때문에, 대부분의 클라우드/온프레미스 등에 사용이 가능하다. 비슷한 기능을 하는 솔루션으로 Docker Swarm, Mesosphere, OpenStack, CloudFoundry 등이 있지만 Kubernetes 로 표준화되어 가고 있다. 쿠버네티스(Kubernetes) 는 K8s 라고도 하는데 K"ubernete"s 가운데 8글자를 "8"로 대체한 약어이다. 우선 쿠버네티스가 실전에서 어떻게 사용되는지를 먼저 보는 것이 쿠버네티스의 용도를 파악하기 쉬울 것 같다.


쿠버네티스를 사용한 어플리케이션 여러 배포 방법 중 하나의 과정을 적어봤다.


  1. 뚝딱뚝딱 서비스할 어플리케이션(A) 만들기.
  2. 쿠버네티스를 제공하는 클라우드 서비스에서 어플리케이션(A)가 운영될 클러스터 생성 및 리소스 설정
  3. 어플리케이션(A)을 컨테이너화하고 쿠버네티스에 배포 <- 운영 시작
  4. 스케일링 설정으로부터 파드(Pod) 수를 조절하며 업데이트 및 롤백 가능


큰 그림 위주의 단계만 적어놓아 이해에 부족함이 있을지도 모르겠다. 위 단계처럼 쿠버네티스는 배포 시스템이며, 안정적으로 운영을 하기 위한 여러 기능을 제공하고 있다. 기존 웹서버에 ELB 와 오토스케일링을 붙이는 방식보다 컨테이너 배포 시스템이 더 나은 점은 빠르고 안정적인 배포와 확장이다. 규모가 커질수록 컨테이너 방식이 월등하다. 다운될 일이 전혀 없는 작은 서비스를 운영하고 있고, 앞으로도 큰 서비스를 개발할 계획이 절대 없다면 이러한 컨테이너 서비스를 사용할 필요가 없다. 제대로 사용하기까지 드는 시간과 노력의 비용이 훨씬 많이 들기 때문이다. 쿠버네티스에 일찍 올라타진 못했지만 많은 사람들이 컨테이너 오케스트레이션 중에는 쿠버네티스를 가장 선호하고 있으며, GitKube 나 Jenkins X 등 Kubernetes 를 더 편리하게 사용할 수 있도록 많은 툴들이 확장되고 있다. 컨테이너 서비스에 관심이 많거나, 최소 트래픽 분산 환경의 웹서버를 운영하는 종사자, 또는 앞날이 창창한 신입 개발자들에게 반드시 도움이 되는 시스템이라고 생각한다.



* 더 도움이 되는 사이트

쿠버네티스 공식 문서(부분 한글) - https://kubernetes.io/docs/home/

조대협(조병욱) 님의 블로그 - https://bcho.tistory.com/1255




WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,