[클라우드/K8S - GCP 사용하기]

SooYeon Yeon·2022년 9월 13일
0

클라우드 K8S

목록 보기
1/18
post-thumbnail

GCP와 연결하기

구글클라우드가입

GCP에서 새프로젝트 선택 → 새 프로젝트 생성

유니크한 값이어야함

… → 프로젝트 설정 → 종료를 하면 삭제가 됨(이 안에 포함된 DB 등등을 한번에 삭제 가능)

manager 노드

  • gcloud 로그인
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
  • 해당 프로젝트ID(이름)을 이후에 쓰게되니 변수에 저장해둠
rapa@manager:~/0826$ PROJECT_ID=$(gcloud config list project --format "value(core.project)")
rapa@manager:~/0826$ echo $PROJECT_ID
sooyeon-test-project
  • git clone
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.
  • btstore>kube 안으로 들어감
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

  • private-registry : 우리 회사 내에 사설 저장소를 만들어 팀원간 공유
  • aws, gcp, azure와 같은 퍼블릭 클라우드는 작업을 위한 공간이 별도로 만들어짐. 이를 VPC,PROJECT(해당 프로젝트에서 사용할 수 있는 사설 저장소)

Cloudbuild.yml에서는 간편하게 만들고 올려줌(하나의 서비스)

Google cloud 홈페이지

왼쪽 메뉴바 > API 서비스 > 사용설정된 API 서비스 > 위쪽 API 및 서비스 사용 설정> kubernetes Engine API > 사용 , 나머지 2,3번도

활성해야 할 API

  1. kubernetes engine
  2. cloud build
  3. google container reigistry

cloud build를 이용해 container registry에 push를 자동으로 해준다.

  • 이미지 만들기 확인하기
  • 프로젝트 ID와 현재 위치가 btstore/kube 인지 확인
rapa@manager:~/0826/btstore/kube$ echo $PROJECT_ID
sooyeon-test-project
rapa@manager:~/0826/btstore/kube$ pwd
/home/rapa/0826/btstore/kube
  • cloudbuild.yaml 파일을 이용해 실행하기 (2개 이미지를 만들고, 클라우드 상에 올림)
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/
  • config맵 올리기
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가 보인다.

  • secret 올리기
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

업로드중..

0개의 댓글