Kubernetes Django Tutorial (GKE) - 2
Devops/Kubernetes

Kubernetes Django Tutorial (GKE) - 2

뉴비뉴 2020. 5. 12.

안녕하세요.

 

어제에 이어 Kubernetes 실습환경을 위해 GKE를 생성해보겠습니다.

GKE란 AWS의 EKS와 비슷한 서비스입니다. 정확히는 관리형 Kubernetes 서비스입니다.

Kubernetes의 모든 부분이 관리형으로 제공되는 것은 아니고 마스터 노드만 관리형으로 제공됩니다.

 

그 외에 로깅, 빌드, 권한 관리를 지원하며, 클러스터 노드들은 GCE(Google Compute Engine, EC2) 를 사용합니다.

 

1. Set up GKE

1-1. Create a GKE cluster

gcloud container clusters create polls \
  --scopes "https://www.googleapis.com/auth/userinfo.email","cloud-platform" \
  --num-nodes 2 --zone "asia-northeast3-a"  # 서울 리전으로 변경

서울리전으로 변경하였고, num-nodes는 2개로 설정해주었습니다.

1-2. gcloud와 kubernetes 상호작용

gcloud와 kubernetes master와 상호 연결하여 kubernetes 명령어를 사용할 수 있게 해주는 것 같습니다.

gcloud container clusters get-credentials polls --zone "asia-northeast3-a"

 

2. GKE - Cloud SQL 설정

GKE 앱이 Cloud SQL 인스턴스에 연결하려면 몇 가지 인증이 필요합니다.

인스턴스 레벨 엑세스와 데이터베이스 엑세스

 

2-1. 인스턴스 레벨 엑세스

kubectl create secret generic cloudsql-oauth-credentials --from-file=credentials.json=[PATH_TO_CREDENTIAL_FILE]

성공

2-2. 데이터베이스 엑세스

kubectl create secret generic cloudsql --from-literal=username=test --from-literal=password=test1234

성공

2-3. Cloud SQL Public Docker Image Pull

docker pull b.gcr.io/cloudsql-docker/gce-proxy

# 작업 디렉터리로 이동 후
docker build -t gcr.io/<your-project-id>/polls .

# configure 설정
gcloud auth configure-docker

# Push
docker push asia.gcr.io/<your-project-id>/polls

# polls.yaml의 명세를 바탕으로 Kubenetes 생성
kubectl create -f polls.yaml

i. 작업 디렉터리에 Dockerfile이 생성되어있고, Build를 하게되면 컨테이너가 생성됩니다.

  • gcr.io는 이미지를 미국의 데이터 센터에서 호스팅하지만 나중에 위치가 변경될 수 있습니다.
  • us.gcr.io는 이미지를 미국의 데이터 센터에서, gcr.io에서 호스팅하는 이미지와 별도의 스토리지 버킷에 호스팅합니다.
  • eu.gcr.io는 유럽 연합 내 이미지를 호스팅합니다.
  • asia.gcr.io는 이미지를 아시아의 데이터 센터에서 호스팅합니다.

★ 수정사항

docker pull b.gcr.io/cloudsql-docker/gce-proxy을 하게되면 python2.7버전의 이미지가 받아집니다.

Dockerfile을 보면 RUN virtualenv -p python3 /env 하는 부분이 있는데 python 이미지 자체가 2.7버전이라

오류가 발생합니다. Dockerfile을 아래와 같이 수정하였습니다.

FROM python:3.7.3

RUN pip install virtualenv
RUN virtualenv env

ENV PATH /env/bin:$PATH
ADD requirements.txt /app/requirements.txt                                                                           RUN /env/bin/pip install --upgrade pip && /env/bin/pip install -r /app/requirements.txt
ADD . /app

CMD gunicorn -b :$PORT mysite.wsgi

 

ii. configure 설정은 Kubernetes의 ConfigMap과 같은 설정으로 보입니다. Key: Value형식으로 데이터를 저장하여 polls.yaml 에서 호출되어 사용됩니다.

 

iii. GCR에 image를 Push하여 kubernetes를 생성할 때 GCR에서 가져와 사용할 수 있도록 합니다.

 

iiii. polls.yaml의 명세를 바탕으로 kubernetes를 생성합니다.

 

kubectl get pod

kubectl get service 로 polls.yaml 명세에 적힌 대로 생성된 것을 확인할 수 있다.

 

감사합니다.

 

 

댓글

💲 추천 글