지난번에 했던 tweeter api + pub/sub + bigquery를 local말고 gke로 클라우드에 배포해보자
1. google cloud sdk 설치하기
2. 배포를 위한 docker 이미지 만들기
3. google kubernetes engine에 이미지를 올려 빌드하기
1. google cloud sdk 설치하기
cloud.google.com/sdk/docs/install
Google Cloud SDK 설치 | Cloud SDK 문서
이 페이지에는 Cloud SDK 설치를 선택하고 유지하기 위한 안내가 포함되어 있습니다. 설치 안내 참고: 프록시/방화벽을 사용하는 경우 자세한 설치 방법은 프록시 설정 페이지를 참조하세요. Linux C
cloud.google.com
자세한 설치방법은 위의 링크와 같다.
(New-Object Net.WebClient).DownloadFile("https://dl.google.com/dl/cloudsdk/channels/rapid/GoogleCloudSDKInstaller.exe", "$env:Temp\GoogleCloudSDKInstaller.exe") & $env:Temp\GoogleCloudSDKInstaller.exe
powershell을 열고 위의 명령어를 실행하면 알아서 installer가 실행된다. 순차적으로 설치해주자. 쭈르륵 따라가다 보면 초기 설정하도록 gcloud init이 알아서 실행된다.

로그인 하라고하면 구글에 연결된당.

이제 지난번에 만들어준 cloud project를 선택해주자. (region 선택하라고 나오는데 지금은 잘 모르겠고 이전에 전부 us region으로 해서 이번에도 us region으로 일단 했다. 나중에 집에 센서데이터를 구축해놓으면 asia region으로 바꿔야겠다.)
2. 배포를 위한 docker 이미지 만들기


tweet.py에 사용한 패키지를 알 수 있도록 requirements.txt 파일을 만들어서 사용한 패키지를 작성하자. 이제 자동 배포를 위한 dockerfile을 생성해주자

지난번 작업 폴더에 dockerfile을 만들어주자.
# Use an official Python runtime as a parent image FROM python:3.7-slim # Set the working directory to /app WORKDIR /app # Copy the current directory contents into the container at /app ADD . /app # Install any needed packages specified in requirements.txt RUN pip install --trusted-host pypi.python.org -r requirements.txt # Define environment variable ENV GOOGLE_APPLICATION_CREDENTIALS="/app/<google-api-key-json-path>" # Run app.py when the container launches CMD ["python", "tweet.py"]
다음과 같이 dockerfile을 작성해준다. 이때 작업 폴더에 저장햇던 google-api-key.json 파일 이름을 꼭 넣어야한다. 그리고 빌드해주면 된다.
방법 1. 로컬 빌드
그냥 컴퓨터에 도커 설치 후,
docekr build --tag tweet .
다음과같이 이미지 이름을 설정해주고 빌드해주자.

docker images로 다음과 같이 이미지가 생성된 것을 확인할 수 있다.
gcloud auth configure-docker

이제 google cloud shell을 작동시켜 docker를 설정하자. 그러면 docker image를 저장할 위치를 지정하는 호스트 이름이 나온다.
docker tag tweet <hostname>/<project-id>/<image>
이제 방금 빌드한 tweet 이미지를 <호스트이름>/<프로젝트명>/<이미지명> 으로 바꿔준다.
docker push <hostname>/<project-id>/<image>:<tag>
이제 gcloud를 통해 태그가 지정된 이미지를 클라우드로 전송하자.
gcloud container images list-tags [HOSTNAME]/[PROJECT-ID]/[IMAGE]
전송이 완료 되면, 위의 명령어로 이미지의 태그와 자동 생성된 다이제스트를 확인할 수 있다.


이제 google console의 container registry에서 빌드한 이미지를 확인할 수 있다.
방법 2. googe cloud build를 이용한 빌드
google cloud sdk로 로컬 말고 cloud 에서도 빌드할 수 있다. 우선 작업 폴더에서 터미널을 켜주자.
gcloud builds submit --tag <hostname>/<project_name>/<name>
<project_name>에는 google cloud project 이름, <name>은 도커 이미지의 이름을 넣어주고 실행해주면,

요롷게 도커를 설치하지 않아도 빌드 된다!! 이제 cloud에 잘 생성되어있는지 확인해보자.

console의 container registry에 가보면,

이렇게 빌드한 이미지를 확인할 수 있다.
3. google kubernetes engine에 이미지를 올려 빌드하기

console의 kubernetes engine으로 가자

이 화면이 나오는데, 우리는 컨테이너 배포를 하자(어자피 알아서 클러스터도 만들어 준다.)

컨테이너 수정 부분에서 선택을 눌러주게 되면, container registry에 있는 이미지를 선택할 수 있다.

해당 이미지의 컨테이너를 선택해주고, 바로 배포해주면 된다.

이제 배포될 떄 까지 기다리자. 조금 오래 걸렸었다.

이제 실행이되면 cloud function log나 bigquery로 스트리밍 데이터가 잘 들어오는지 확인해보자. (나는 그냥 bigquery 숫자가 계속 증가하는 걸 확인했다)



kubernetes engine 모습이다 여기서 상태가 처음에 error일 수 있는데, 쿠버네티스는 어떤 상태로 만들어주어서 어느정도 자동 복구 기능이 있어서 있다가 보면 error가 고쳐질 수 있다.
** 다하고 kubernetes cluster랑 cloud function은 삭제해주자(요금..)
쿠버네티스를 통해 자동배포를 해보았다.
사실상 1개의 컨테이너만 돌린거라서 쿠버네티스를 좀 더 이해하고 공부하고, 나중에 하고 싶은 프로젝트를 위해서는 컨테이너 설계도 중요해 보인다. 쿠버네티스를 꾸준히 좀 공부해야겠다.
'빅데이터' 카테고리의 다른 글
twitter api + google cloud pub/sub 사용해보기 (0) | 2020.09.24 |
---|---|
python으로 twitter api 사용해보기 (0) | 2020.09.23 |