GCP에서 새프로젝트 선택 → 새 프로젝트 생성
유니크한 값이어야함
… → 프로젝트 설정 → 종료를 하면 삭제가 됨(이 안에 포함된 DB 등등을 한번에 삭제 가능)
rapa@manager:~/0826$ gcloud auth login
기다리면 웹으로 로그인하라고 뜨면 로그인하고 들어오면 된다.
gcloud init
1번 → 1번(내계정으로 로그인) → 내 프로젝트번호 선택 →
rapa@manager:~/0826$ gcloud config list project
[core]
project = sooyeon-test-project
Your active configuration is: [default]
rapa@manager:~/0826$ gcloud config list project --format "value(core.project)"
sooyeon-test-project
rapa@manager:~/0826$ PROJECT_ID=$(gcloud config list project --format "value(core.project)")
rapa@manager:~/0826$ echo $PROJECT_ID
sooyeon-test-project
rapa@manager:~/0826$ git clone https://github.com/beomtaek78/btstore
Cloning into 'btstore'...
remote: Enumerating objects: 44, done.
remote: Total 44 (delta 0), reused 0 (delta 0), pack-reused 44
Unpacking objects: 100% (44/44), 317.68 KiB | 847.00 KiB/s, done.
rapa@manager:~/0826$ cd btstore/
rapa@manager:~/0826/btstore$ ls
docker-lab.sh kube web-docs-samples-master.zip
rapa@manager:~/0826/btstore$ cd kube/
rapa@manager:~/0826/btstore/kube$ ls
blue config green README.md
config에 service.yaml에 외부 네트워크 정의가 되어있음
일반적인 저장소
public
local
private
Cloudbuild.yml에서는 간편하게 만들고 올려줌(하나의 서비스)
Google cloud 홈페이지
왼쪽 메뉴바 > API 서비스 > 사용설정된 API 서비스 > 위쪽 API 및 서비스 사용 설정> kubernetes Engine API > 사용 , 나머지 2,3번도
활성해야 할 API
cloud build를 이용해 container registry에 push를 자동으로 해준다.
rapa@manager:~/0826/btstore/kube$ echo $PROJECT_ID
sooyeon-test-project
rapa@manager:~/0826/btstore/kube$ pwd
/home/rapa/0826/btstore/kube
rapa@manager:~/0826/btstore/kube$ cat config/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']
build : 로컬 컴퓨터에서 이미지를 생성하고 생성된 이미지를 자신의 사설 저장소에 push
rapa@manager:~/0826/btstore/kube$ gcloud builds submit --config config/cloudbuild.yaml
GCP의 container registry에 들어가보면 imageview 폴더 안에 태그 green, blue가 된 이미지가 올라와 있다.
Kubernetes Engine > 클러스터 > 만들기 > Autopilot(포드당-컨테이너당) / standard(노드당) > 일단 standard
노드풀 default-pool>노드>containered를 포함한 Ubuntu>
클러스터 기본사항 이름 이름-cluster > 영역 asia-northeast2-b > 만들기
현재master가 하나, 노드 수 3개는 worker
… 눌러서 연결 > 코드 복사 > cloud shell 붙여넣기
kubectl get nodes
해당 명령어 cloud shell에 붙여넣기
git clone https://github.com/beomtaek78/btstore
cd btstore/
cd kube/
dustndus8@cloudshell:~/btstore/kube (sooyeon-test-project)$ cat config/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: projectid
data:
project.id: "hello-docker"
dustndus8@cloudshell:~/btstore/kube (sooyeon-test-project)$ kubectl create -f config/configmap.yaml
configmap/projectid created
보안 비밀 및 ConfigMap 들어가면 만든 projectid가 보인다.
dustndus8@cloudshell:~/btstore/kube (sooyeon-test-project)$ kubectl apply -f config/secrets.yaml
secret/apikey created
보안 비밀 및 ConfigMap에 들어가면 apikey가 보인다.
deployment_blue와 green 파일에서 image에 gcr.io/PROJECT_ID를 내 프로젝트 아이디로 바꾸기(sooyeon-test-project)
kubectl api-resources
deployement apps/v1임 그러므로 deployement_blue, green 파일에서 apiVersion을 apps/v1으로 변경, replicas 밑에 selector: ~도 추가
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/sooyeon-test-project/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
dustndus8@cloudshell:~/btstore/kube (sooyeon-test-project)$ kubectl apply -f config/deployment-blue.yaml
deployment.apps/webserver-blue created
k8s는 모든 기능을 객체화함
Deployment 하위에는 ReplicaSet 그 하위에는 Pod 그 하위는 컨테이너
배포 단위가 서비스가 아니라 포드임
포드 3개가 만들어 진 것임
dustndus8@cloudshell:~/btstore/kube (sooyeon-test-project)$ kubectl get pod
NAME READY STATUS RESTARTS AGE
webserver-blue-69b56d47d4-4f8gb 1/1 Running 0 28m
webserver-blue-69b56d47d4-bcm52 1/1 Running 0 28m
webserver-blue-69b56d47d4-f4dlh 1/1 Running 0 28m
replica를 4로 바꾸고싶다면 scale을 이용하거나 yaml파일에서 4로 바꾸고 저장 후 다시 kubectl apply -f config/deployment-blue.yaml
dustndus8@cloudshell:~/btstore/kube (sooyeon-test-project)$ kubectl delete pod webserver-blue-69b56d47d4-4f8gb
pod "webserver-blue-69b56d47d4-4f8gb" deleted
dustndus8@cloudshell:~/btstore/kube (sooyeon-test-project)$ cat config/service.yaml
apiVersion: v1
kind: Service
metadata:
name: webserver
spec:
type: LoadBalancer
ports:
- port: 80
targetPort: 80
protocol: TCP
selector:
type: webserver
color: blue
로드밸런서고 type이 webserver이고 color가 blue인 포드에게 넘기겠다는 뜻
dustndus8@cloudshell:~/btstore/kube (sooyeon-test-project)$ kubectl apply -f config/service.yaml
service/webserver created
selector을 green으로 바꾸게 되면 green쪽으로만 가게된다 .(HOT standby)
dustndus8@cloudshell:~/btstore/kube (sooyeon-test-project)$ cp config/deployment-blue.yaml config/deployment-green.yaml
dustndus8@cloudshell:~/btstore/kube (sooyeon-test-project)$ sed -i 's/blue/green/g' config/deployment-green.yaml
dustndus8@cloudshell:~/btstore/kube (sooyeon-test-project)$ kubectl apply -f config/deployment-green.yaml
deployment.apps/webserver-green created
dustndus8@cloudshell:~/btstore/kube (sooyeon-test-project)$ vi config/service.yaml
서비스 파일의 selector → green으로
dustndus8@cloudshell:~/btstore/kube (sooyeon-test-project)$ kubectl get pod
NAME READY STATUS RESTARTS AGE
webserver-blue-69b56d47d4-bcm52 1/1 Running 0 40m
webserver-blue-69b56d47d4-f4dlh 1/1 Running 0 40m
webserver-blue-69b56d47d4-jst5j 1/1 Running 0 8m48s
webserver-blue-69b56d47d4-p7jtl 1/1 Running 0 10m
webserver-green-6d7698444d-6vk96 1/1 Running 0 2m45s
webserver-green-6d7698444d-btmxj 1/1 Running 0 2m45s
webserver-green-6d7698444d-chzrt 1/1 Running 0 2m45s
webserver-green-6d7698444d-gnk2h 1/1 Running 0 2m45s