- 프로젝트 생성하기
- 내 프로젝트에 접속하기
- 처음 계정을 생성하게 되면 구글에서 $300을 무료로 제공해준다.
- GCP sdk 설치
rapa@manager:~$ sudo snap install google-cloud-sdk --classic
- gcloud 로그인하기
rapa@manager:~$ gcloud auth login
- gcloud 시작하기
rapa@manager:~$ gcloud init
rapa@manager:~$ gcloud config list project
- 프로젝트 리스트 확인
rapa@manager:~$ gcloud config list project --format "value(core.project)" yangseunghyun-test-project
- 프로젝트 명 변수 지정
rapa@manager:~$ PROJECT_ID=$(gcloud config list project --format "value(core.project)")
- echo로 변수명 확인
rapa@manager:~$ echo $PROJECT_ID yangseunghyun-test-project
- git clone 하기
rapa@manager:~$ git clone https://github.com/beomtaek78/btstore
- 일반적인 저장소
-> public -> local -> private -> private-registry -> 우리 회사내에 사설 저장소를 만들어 팀원간 공유한다. -> aws, gcp, azure와 같은 퍼블릭 클라우드는 작업을 위한 공간이 별도로 만들어진다. 이를 Project 라고 한다. 이는 퍼블릭 클라우드 안의 프라이빗 공간이다
API 및 서비스에 접속 후
API 및 서비스 사용 설정에 접속
- kubernetes engine
- cloud build
- condainer registry
- yml파일로 이미지 생성 및 GCP에 업로드
rapa@manager:~/btstore/kube$ gcloud builds submit --config config/cloudbuild.yaml cloudbuild.yaml steps: - name: 'gcr.io/cloud-builders/docker' args: ['build', '-t', 'gcr.io/$PROJECT_ID/imageview:blue', './blue'] - name: 'gcr.io/cloud-builders/docker' args: ['build', '-t', 'gcr.io/$PROJECT_ID/imageview:green', './green'] images: ['gcr.io/$PROJECT_ID/imageview:blue', 'gcr.io/$PROJECT_ID/imageview:green']
- cloud build를 이용하면 로컬 컴퓨터에서 이미지를 생성하고 생성된 이미지를 자신의 사설 저장소에 push 할 수 있다.
- kubernetes engine 클릭 후 접속
- standard 클릭
- 클러스터 생성
ubuntu에서 사용하기
- ubuntu에서 kubectl 설치
rapa@manager:~/btstore/kube/config$ sudo apt-get install kubectl
- 클러스터 연결
rapa@manager:~/btstore/kube/config$ gcloud container clusters get-credentials yangseunghyun-cluster --zone 영역 --project 프로젝트 명
cloud shell에서 사용하기
- 클러스터 연결
gcloud container clusters get-credentials yangseunghyun-cluster --zone 영역 --project 프로젝트 명
- 클러스터 노드 확인
kubectl get node NAME STATUS ROLES AGE VERSION gke-yangseunghyun-cluste-default-pool-377c54d2-f185 Ready <none> 7m51s v1.22.11-gke.400 gke-yangseunghyun-cluste-default-pool-377c54d2-rlbr Ready <none> 7m50s v1.22.11-gke.400 gke-yangseunghyun-cluste-default-pool-377c54d2-z9c9 Ready <none> 7m51s v1.22.11-gke.400
- git clone 하기
git clone https://github.com/beomtaek78/btstore
Configmap & Secret 배포하기
Configmap
kubectl apply -f config/configmap.yaml
cat config/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: projectid data: project.id: "hello-docker"
- configmap은 data 확인이 가능하다.
Secret
kubectl apply -f config/secrets.yaml
cat config/secrets.yaml apiVersion: v1 kind: Secret metadata: name: apikey type: Opaque data: id: YXNh key: YUJjRDEyMw==
- secrets은 data 확인이 불가능하다.
Yaml 파일로 APP 배포하기
- api 버전 확인
kubectl api-resources
- 배포 할 파일 내용
vi config/deployment-green.yaml apiVersion: apps/v1 kind: Deployment metadata: name: webserver-blue spec: replicas: 3 selector: matchLabels: color: blue template: metadata: labels: type: webserver color: blue spec: containers: - image: gcr.io/beomtaek-test/imageview:blue name: webserver-container env: - name: PROJECT_ID valueFrom: configMapKeyRef: name: projectid key: project.id - name: SECRET_ID valueFrom: secretKeyRef: name: apikey key: id - name: SECRET_KEY valueFrom: secretKeyRef: name: apikey key: key ports: - containerPort: 80 name: http-server
- 배포하기
kubectl apply -f config/deployment-blue.yaml
load balancer 배포하기
- 80번 포트로 매핑하였으며, LB의 80번 포트로 접근하게 되면 webserver 타입의 blue인 pod에 전달하게 된다.
cat config/secrets.yaml apiVersion: v1 kind: Service metadata: name: webserver spec: type: LoadBalancer ports: - port: 80 targetPort: 80 protocol: TCP selector: type: webserver color: blue
- 컨테이너 배포하기
kubectl apply -f config/service.yaml
- 확인