1. Cloud Shell & sdk 설치


- GCP 에서는 dashboard 에 접속하여 서버에게 명령을 내린다
GCP 는 Project 단위로 작업을 수행한다!!!

- Cloud Shell 을 눌러서 서버에 접속하자
- GCP 에서 제공해주는 서버는 기본적으로 데미안 계열의 linux 환경이 설치되어있다
2. Project 시작하기

- GCP 는 Project 단위로 작업한다. 새 Project 를 생성하자

- Project 이름을 설정하자. Project ID 가 중요하다

- 생성된 Project 에 들어가자

- 프로젝트 설정에 들어가자

- Project 종료를 누르면, Project 와 Project 와 연관된 모든 것들이 삭제된다
3. Ubuntu 와 GCP 연동
GCP sdk 설치
- 원격지에서 GCP 에 접속하여 명령을 내릴 수 있다
sudo snap install google-cloud-sdk --classic
- 원하는 linux 서버에서 google cloud sdk 를 설치하자
- 설치되면 Ubuntu 에서 gcp 명령어를 사용할 수 있다
GCP 로그인하기
gcloud auth login
gcloud init
- 로그인해주자

- 로그인 후 gcloud init 를 통해 시작해주자
Project 접속

- 접속할 Project 를 선택하자

- 현재 접속된 Project 를 확인하자
Project ID 확인 및 저장

- Project ID 를 확인하고, 변수에 저장하자
3. Git Clone 하기

-
위 주소를 Clone 하고, 내용물을 확인하자
-
저장소에서 gcp 와 같은 퍼블릭 클라우드는 작업을 위한 공간이 별도로 만들어진다. 이를 Project 라고 한다. 이는 퍼블릭 클라우드 안의 프라이빗 공간이다
- 해당 Project 에서 사용할 수 있는 사설 저장소를 사용할 수 있다
- Project 는 Unique 하다
4. API 및 서비스

- API 및 서비스에 들어가자. 우리는 API 를 통해 서비스를 제공받을 수 있다

- 설정에 들어가자
API 활성화
활성해야할 API
- kubernetes engine
- cloud build - 이미지 생성 및 업로드
- container registry - 사설 저장소

- kubernetes Engine 선택

- 사용을 눌르자. 이제 kubernetes 서비스를 사용할 수 있다

- cloud build 사용

- container registry 는 활성화되어 있다
확인하기

- kubernetes 확인

- cloud build 확인하자. cloud build 를 통해 Image 를 만들고, 업로드 할 수 있다

- container registry 를 확인하자. 이는 우리가 사용할 사설 저장소이다
5. Image 생성 및 업로드
build 하기 전 확인 사항

- blue 와 green 디렉터리의 Dockerfile 을 확인하자

- cloudbuild.yml 파일을 확인하면, cloud builder 에 연결하여 docker Image 를 만들고, 지정한 위치에 업로드하게 설정되있다. 우리는 PROJECT_ID 이름의 디렉터리에 업로드 할 것이다

- PROJECT_ID 와 현재 위치를 확인하자
Image build 및 업로드
gcloud builds submit --config config/cloudbuild.yaml
- 로컬 컴퓨터에서 이미지를 생성하고 생성된 이미지를 자신의 사설 저장소에 push 해준다

- yml 파일을 이용해 Image 를 생성하고, 사설 저장소에 업로드하자

- PROJECT_ID 이름의 디렉터리 밑의 imageview 디렉터리에 Image 가 저장되었다
6. Kubernetes Cluster 생성 및 연결

- kubernetes 의 클러스터에 들어가자

- 클러스터를 만들자. Standard 방식으로 구성하자
- Autopilot 는 pod 단위로 결제한다. 이는 컨테이너당 결제하는 것이다
- Standard 는 Node 단위로 결제한다
Node

-
GCP 는 master Node 를 따로 제공해주는 것이 아닌, 현재 우리가 작업하고 있는 Dashboard 가 master 역활을 한다. 생성되는 Node 는 worker Node 들이다
-
runtime 과 Node 환경을 선택하자. 우리는 runtime 으로 containerd 를 사용하며, 환경은 Ubuntu 를 사용할 것이다

-
Node 사양을 선택하자. 표준 영구 디스크는 AWS 의 EBS 와 동일한 서비스 이다
클러스터 기본 사항

- 기본 사항을 설정하자
- 하나의 리전에 여러 영역이 포함되어있다
- 영역은 asia 일본 오사카로 지정하였다

- 제어 영역 버전은 기본으로 유지하고, 클러스터를 만들어주자
Cluster 확인하기

- 클러스터가 생성되었다. 현재 우리가 사용중인 master 역활이고, worker Node 3 개가 생성된 것이다
연결하기 - Ubuntu

- 연결에 들어가자

- Code 를 복사해서 Ubuntu 에 붙여넣자

- kubectl 을 설치하자

- Code 를 복사해서 Ubuntu 에서 실행하면 클러스터에 연결된다
연결하기 - Cloud Shell

kubectl get nodes

Cloud Shell 에 Clone

- 현재 Cloud Shell 에는 사용할 자료들이 없다. 따라서, Cloud Shell 에 Clone 해주자
7. Configmap & Secret 배포
Configmap

- yml 파일 내용을 확인하자. 이름은 projectid 이며, Data 도 확인 가능하다

- Configmap 을 생성해주자

- 확인해보면 잘 생성되었다

- Configmap 은 Data 를 확인할 수 있다
Secret

- Secret 을 생성해주자

- 잘 생성되었다

- Secrets 는 Data 를 확인할 수 없다
8. Yaml 파일을 이용해 APP 배포하기
Yaml 수정

- 배포에 사용할 Yaml 파일을 확인하자

- 내용을 확인해주자

- image 부분을 본인의 Project ID 로 수정해주자

- green Yml 파일도 수정해주자
배포하기

- api 버전을 확인하자

- 우리는 Deploy 를 하므로 Deployment 의 api 버전을 확인하자

- 위 사항들을 수정해주자

- Yaml 파일을 이용해 배포해주자
9. K8S 와 Deployment

- Yaml 파일은 하나의 Deployment 의 정의이다. 파일 내용을 확인하면, Replica_set 정의 안에 Pod 정의 안에 Container 정의가 있는 것을 확인할 수 있다
10. Pod Scale 조정

- Pod list 를 확인하자

- replicas 부분만 수정하면 된다

- 수정된 Yaml 파일을 적용시키면, Pod 가 4 개로 늘어났다

- Pod 를 하나 삭제해도, replicas 가 4 이므로, Pod 가 새로 생성되어 4 개를 유지한다
11. Load Balancer 배포
blue 로 보내기

- Yaml 파일을 확인하면, 80 번 Port 를 매핑하였고, LB 의 80 번 Port 로의 접근은 webserver 타입에 blue 인 Pod 한테 전달해주도록 설정되있다

- 배포해주자

- 생성되었는지 확인하자

- 엔드포인트에 접속하면, 배포한 APP 컨테이너의 WEB 페이지로 접속된다
green 으로 보내기

- green Service 를 배포하고, service 에서 green 으로 트래픽을 보내게 설정해서 다시 배포해주면 된다

- 총 7 개의 Pod 가 생성되었다
12. GCP Project 삭제
